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

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

首先 将dz程序放到目录下

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

1,apache 容器

mkdir /root/docker-httpd
vim httpd.dockerfile

# 内容如下
FROM centos:latest
MAINTAINER Nineven "<nineven@qq.com>"
# 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 httpd php php-mysql php-mbstring && \
#       yum clean all
RUN yum -y install httpd php php-mysql php-mbstring && \
        yum clean all && \
        echo -e '<?php\n\tphpinfo();\n?>' > /var/www/html/info.php
VOLUME /var/www/html
EXPOSE 80/tcp
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容器

创建文件夹

mkdir /root/docker-mariadb
cd /root/docker-mariadb
vim mariadb.dockerfile

# 内容如下
FROM centos:latest
MAINTAINER Nineven <nineven@qq.com>
#RUN yum -y install --setopt=tsflags=nodocs epel-release && \
#    yum -y install --setopt=tsflags=nodocs mariadb-server bind-utils pwgen psmisc hostname && \
#    yum -y erase vim-minimal && \
#    yum -y update && \
#     yum clean all
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
COPY fix-permissions.sh ./
RUN ./fix-permissions.sh /var/lib/mysql/   && \
    ./fix-permissions.sh /var/log/mariadb/ && \
    ./fix-permissions.sh /var/run/
COPY docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
VOLUME /var/lib/mysql
USER 27
EXPOSE 3306
CMD ["mysqld_safe"]
vim fix-permissions.sh

# 内容如下
#!/bin/sh
chgrp -R 0 $1
chmod -R g+rw $1
find $1 -type d -exec chmod g+x {} +
vim docker-entrypoint.sh
# 内容如下

#!/bin/bash
set -e
if [ "${1:0:1}" = '-' ]; then
        set -- mysqld_safe "$@"
fi
if [ "$1" = 'mysqld_safe' ]; then
        DATADIR="/var/lib/mysql"
        if [ ! -d "$DATADIR/mysql" ]; then
                if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" ]; then
                        echo >&2 'error: database is uninitialized and MYSQL_ROOT_PASSWORD not set'
                        echo >&2 '  Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?'
                        exit 1
                fi
                echo 'Running mysql_install_db ...'
                mysql_install_db --datadir="$DATADIR"
                echo 'Finished mysql_install_db'
                # These statements _must_ be on individual lines, and _must_ end with
                # semicolons (no line breaks or comments are permitted).
                # TODO proper SQL escaping on ALL the things D:
                tempSqlFile='/tmp/mysql-first-time.sql'
cat > "$tempSqlFile" <<EOSQL
        DELETE FROM mysql.user ;
       CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
       GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;
       DROP DATABASE IF EXISTS test ;
EOSQL
                if [ "$MYSQL_DATABASE" ]; then
                        echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` ;" >> "$tempSqlFile"
                fi
                if [ "$MYSQL_USER" -a "$MYSQL_PASSWORD" ]; then
                        echo "CREATE USER '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASSWORD' ;" >> "$tempSqlFile"
                        if [ "$MYSQL_DATABASE" ]; then
                                echo "GRANT ALL ON \`$MYSQL_DATABASE\`.* TO '$MYSQL_USER'@'%' ;" >> "$tempSqlFile"
                        fi
                fi
                echo 'FLUSH PRIVILEGES ;' >> "$tempSqlFile"
                set -- "$@" --init-file="$tempSqlFile"
        fi
fi
exec "$@"

构建

chmod a+x /root/docker-mariadb/*sh
useradd -r -u 27 mysql
chown mysql.mysql /var/lib/mysql
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值