构建并启动两个容器,一个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 "
" - # 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 '' > /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
- #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的数据全部都在宿主机上,易于管理