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