• 基于docker搭建apache和mariadb服务器,实现一个dz页面完美访问


    构建并启动两个容器,一个Apache,一个mariadb,并安装dz程序,使之正常访问

    首先 将dz程序放到目录下

    1. unzip -n Discuz_X3.2_SC_UTF8.zip
    2. mv upload/ dz
    3. useradd -r -u 48 apache
    4. setfacl -R -m u:apache:rwx /web/html/

    1,apache 容器

    mkdir /root/docker-httpd
    1. vim httpd.dockerfile
    2. # 内容如下
    3. FROM centos:latest
    4. MAINTAINER Nineven ""
    5. # RUN sed -i -e 's@^mirrorlist.*repo=os.*$@baseurl=http://10.1.41.1/centos$releasever/yum/@g' -e '/^mirrorlist.*repo=updates/a enabled=0' -e '/^mirrorlist.*repo=extras/a enabled=0' /etc/yum.repos.d/CentOS-Base.repo && \
    6. #       yum -y install httpd php php-mysql php-mbstring && \
    7. #       yum clean all
    8. RUN yum -y install httpd php php-mysql php-mbstring && \
    9.         yum clean all && \
    10.         echo -e '' > /var/www/html/info.php
    11. VOLUME /var/www/html
    12. EXPOSE 80/tcp
    13. CMD ["/usr/sbin/httpd","-f","/etc/httpd/conf/httpd.conf","-DFOREGROUND"]

    构建

    docker build -t httpd:2.4 -f /root/docker-httpd/httpd.dockerfile /root/docker-httpd/

    运行

    docker run -d -p 80:80 --name httpd -v /web/html/dz/:/var/www/html httpd:2.4

    2,mariadb容器

    创建文件夹

    1. mkdir /root/docker-mariadb
    2. cd /root/docker-mariadb
    1. vim mariadb.dockerfile
    2. # 内容如下
    3. FROM centos:latest
    4. MAINTAINER Nineven 
    5. #RUN yum -y install --setopt=tsflags=nodocs epel-release && \
    6. #    yum -y install --setopt=tsflags=nodocs mariadb-server bind-utils pwgen psmisc hostname && \
    7. #    yum -y erase vim-minimal && \
    8. #    yum -y update && \
    9. #     yum clean all
    10. RUN sed -i -e 's@^mirrorlist.*repo=os.*$@baseurl=http://10.1.41.1/centos$releasever/yum/@g' -e '/^mirrorlist.*repo=updates/a enabled=0' -e '/^mirrorlist.*repo=extras/a enabled=0' /etc/yum.repos.d/CentOS-Base.repo && yum -y install mariadb-server && yum clean all
    11. COPY fix-permissions.sh ./
    12. RUN ./fix-permissions.sh /var/lib/mysql/   && \
    13.     ./fix-permissions.sh /var/log/mariadb/ && \
    14.     ./fix-permissions.sh /var/run/
    15. COPY docker-entrypoint.sh /
    16. ENTRYPOINT ["/docker-entrypoint.sh"]
    17. VOLUME /var/lib/mysql
    18. USER 27
    19. EXPOSE 3306
    20. CMD ["mysqld_safe"]
    1. vim fix-permissions.sh
    2. # 内容如下
    3. #!/bin/sh
    4. chgrp -R 0 $1
    5. chmod -R g+rw $1
    6. find $1 -type d -exec chmod g+x {} +
    1. vim docker-entrypoint.sh
    2. # 内容如下
    3. #!/bin/bash
    4. set -e
    5. if [ "${1:0:1}" = '-' ]; then
    6.         set -- mysqld_safe "$@"
    7. fi
    8. if [ "$1" = 'mysqld_safe' ]; then
    9.         DATADIR="/var/lib/mysql"
    10.         if [ ! -d "$DATADIR/mysql" ]; then
    11.                 if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" ]; then
    12.                         echo >&2 'error: database is uninitialized and MYSQL_ROOT_PASSWORD not set'
    13.                         echo >&2 '  Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?'
    14.                         exit 1
    15.                 fi
    16.                 echo 'Running mysql_install_db ...'
    17.                 mysql_install_db --datadir="$DATADIR"
    18.                 echo 'Finished mysql_install_db'
    19.                 # These statements _must_ be on individual lines, and _must_ end with
    20.                 # semicolons (no line breaks or comments are permitted).
    21.                 # TODO proper SQL escaping on ALL the things D:
    22.                 tempSqlFile='/tmp/mysql-first-time.sql'
    23. cat > "$tempSqlFile" <<EOSQL
    24.         DELETE FROM mysql.user ;
    25.        CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
    26.        GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;
    27.        DROP DATABASE IF EXISTS test ;
    28. EOSQL
    29.                 if [ "$MYSQL_DATABASE" ]; then
    30.                         echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` ;" >> "$tempSqlFile"
    31.                 fi
    32.                 if [ "$MYSQL_USER" -a "$MYSQL_PASSWORD" ]; then
    33.                         echo "CREATE USER '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASSWORD' ;" >> "$tempSqlFile"
    34.                         if [ "$MYSQL_DATABASE" ]; then
    35.                                 echo "GRANT ALL ON \`$MYSQL_DATABASE\`.* TO '$MYSQL_USER'@'%' ;" >> "$tempSqlFile"
    36.                         fi
    37.                 fi
    38.                 echo 'FLUSH PRIVILEGES ;' >> "$tempSqlFile"
    39.                 set -- "$@" --init-file="$tempSqlFile"
    40.         fi
    41. fi
    42. exec "$@"

    构建

    1. chmod a+x /root/docker-mariadb/*sh
    2. useradd -r -u 27 mysql
    3. chown mysql.mysql /var/lib/mysql
    4. docker build -t mariadb:10.1.8 -f /root/docker-mariadb/mariadb.dockerfile /root/docker-mariadb/

    运行

    docker run --name=mariadb -d -p 3306:3306 -v /var/lib/mysql/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mariadb:10.1.8

    测试访问如下

    因为都是基于挂载的宿主机的目录,因此mairadb和apache的数据全部都在宿主机上,易于管理

    文档:docker-compose Compose specification | Docker Documentation

    docker Dockerfile reference | Docker Documentation

  • 相关阅读:
    【NodeJs-5天学习】第三天实战篇④ ——QQ机器人,实现自动回复、重要提醒
    告别繁琐粘贴,CleanClip Mac 版,让复制粘贴变得简单快捷!粘贴队列功能太强大了!
    使用数据增强从头开始训练卷积神经网络(CNN)
    Linux C 调度程序
    spring cloud alibaba 集成seata
    [Codeforces] number theory (R1200) Part.8
    java 迭代器 Iterator
    【01】什么是概率图模型?
    CUDA小白 - NPP(4) 图像处理 Data Exchange and Initialization(1)
    Fast.ai 深度学习实战课程「中文字幕」
  • 原文地址:https://blog.csdn.net/ly1358152944/article/details/126435980