基于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的数据全部都在宿主机上,易于管理