本次项目会用到3个镜像分别是nginx、mysql 和禅道,以后若迁移服务器环境则只需下载这3个镜像即可
mysql与禅道镜像下载与构建参考:mysql 禅道
目录介绍
cloud # 文件名
+----init # mysql初始化配置目录,挂载到容器
| +----init.sql # mysql初始化脚本,挂载到容器
+----mysql_db # mysql的挂载目录,挂载到容器
| +----mysqld.cnf # mysql的配置文件,挂载到容器
+----nginx
+----conf.d # nginx服务配置目录,挂载到容器
+----default.conf # nginx服务配置文件,挂载到容器
+----log
+----host.access.log # nginx日志文件,挂载到容器
+----html
+----50x.html # nginx报错50X返回页面
+----zentao # 禅道挂载目录,挂载到容器
+----.env # docker-compose环境变量配置文件
+----docker-compose.yml # docker-compose的运行文件
配置
环境变量 — .env文件
# mysql信息配置
MYSQL_IMAGE=mysql:5.7
MYSQL_ROOT_PASSWORD=password
MYSQL_IP=192.110.0.2
# 禅道信息配置
ZENTAO_IMAGE=zentao:latest
ZENTAO_IP_BACKEND=192.110.0.10
ZENTAO_IP_FRONTEND=182.120.0.3
# nginx信息配置
NGINX_IMAGE=nginx:mainline-alpine-perl
NGINX_IP=182.20.0.2
# network信息配置
BACKEND_SUBNET=192.110.0.0/16
FRONTEND_SUBNET=182.120.0.0/16
docker-compose.yml
version: '3.1'
services:
mysql:
image: ${MYSQL_IMAGE} # mysql镜像
container_name: "mysql_5.7" # 容器名称
volumes:
- ./mysql_db/mysqld.cnf:/etc/mysql/mysql.conf.d/ # 挂载mysql配置文件
- ./mysql_db/datadir:/var/lib/mysql/ # 挂载mysql数据文件
restart: always # 开机启动
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} # 设置ROOT账号密码
ports:
- "3306:3306"
networks:
my_backend: # 加入网络-my_backend
ipv4_address: ${MYSQL_IP} # 指定的IP地址
zentao:
image: ${ZENTAO_IMAGE} # 禅道镜像
container_name: "zentao_latest" # 容器名称
volumes:
- ./zentao/zentaopms:/app/zentaopms # 挂载禅道源码路径
- ./zentao/mysql:/var/lib/mysql # 禅道自带的mysql挂载到本机
restart: always # 开机启动
environment:
- MYSQL_ROOT_PASSWORD=password # 禅道镜像mysql的root账号密码
ports:
- "80:8010" # 容器80端口映射宿主机8010端口
networks:
my_backend: # 加入网络-my_backend
ipv4_address: ${ZENTAO_IP_BACKEND} # 指定IP地址
my_frontend: # 加入网络-my_frontend
ipv4_address: ${ZENTAO_IP_FRONTEND} # 指定的IP地址
nginx:
image: ${NGINX_IMAGE} # nginx镜像
container_name: "nginx_latest" # 容器名称
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d # 挂载nginx配置文件
- ./nginx/log/host.access.log:/var/log/nginx/host.access.log # 挂载nginx日志文件
- ./nginx/html:/usr/share/nginx/html # 挂载nginx首页
restart: always # 开机启动
ports:
- "80:80" # 容器80端口映射宿主机80端口
- "443:443" # 容器443端口映射宿主机443端口
networks:
my_frontend: # 加入网络-my_frontend
ipv4_address: ${NGINX_IP} # 指定的IP地址
networks:
my_backend: # 自定义网络-my_backend
driver: bridge # 定义的网络模式
ipam:
config:
- subnet: ${BACKEND_SUBNET} # 定义网段
my_frontend: # 自定义网络-my_frontend
driver: bridge # 定义的网络模式
ipam:
config:
- subnet: ${FRONTEND_SUBNET} # 定义网段
mysql配置文件mysqld.cnf
[mysqld]
explicit_defaults_for_timestamp=true
character-set-server=utf8
collation-server=utf8_unicode_ci
init_connect='SET NAMES utf8;'
max_allowed_packet=10M
wait_timeout=288000
interactive_timeout = 288000
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
skip-name-resolve
pid-file= /var/run/mysqld/mysqld.pid
socket= /var/run/mysqld/mysqld.sock
datadir= /var/lib/mysql/
symbolic-links=0
mysql测试脚本init.sql
create database test;
use test;
create table user
(
id int auto_increment primary key,
username varchar(64) unique not null,
email varchar(120) unique not null,
password_hash varchar(128) not null,
avatar varchar(128) not null
);
insert into user values(1, "zhangsan","1111@qq.com","passwd","password");
insert into user values(2, "lisi","22222222@qq.com","passwd","password");
insert into user values(3, "wangwu","333333@qq.com","passwd","password");
nginx配置文件default.conf
server {
listen 80;
server_name localhost;
# 日志
access_log /var/log/nginx/host.access.log main;
error_page 500 502 503 504 /50x.html;
# 50X报错页面
location = /50x.html {
root /usr/share/nginx/html;
}
# 反向代理禅道配置
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://182.120.0.3;
}
}
部署
sudo docker-compose up -d
# 以守护进程模式(-d)运行
查看网络
docker network ls
docker新增了两个网络定义的网络 — filename_my_backend 和 filename_my_frontend,如图:
查看容器的运行情况
docker ps -a
容器启动运行成功,如图:
客户端浏览器通过80端口访问禅道成功,反向代理配置ok
不积跬步无以至千里