本文介绍了使用 Docker Compose 管理多容器应用的实践:布道师学习通,特别是如何通过一个 docker-compose.yml 文件配置 MySQL 和 Redis 数据库以及多个服务(如 budaos_com-stp-mgr, budaos_com-stp-evgl, budaos_com-stp-sp),确保数据库优先启动,并实现一键部署。文中还提供了关于加速镜像下载、配置 Docker 远程访问等常见问题的解决方案。
Docker Compose简介
Docker Compose 是 Docker 官方提供的一个工具,用于定义和运行多容器的 Docker 应用程序。通过使用 Docker Compose,用户可以利用 YAML 文件来配置应用程序的服务,然后通过一条命令即可启动所有服务,并且这些服务将自动在网络中连接起来。这大大简化了在本地开发环境中的应用部署流程,同时也使得跨环境(如从开发到生产)迁移变得更加容易。
任务描述
使用Docker Compose管理多个容器,实现一条命令启动部署布道师学习通服务,并设置容器的启动先后顺序 在应用程序启动前,先优先启动MySQL和redis数据库。
任务准备
- Docker环境已经安装
- Docker compose已经安装
- 熟练使用docker和docker compse常用命令
任务实施
1.编写docker-compose.yml
#version: '3.8'
networks:
cbnet:
driver: bridge
ipam:
config:
- subnet: 172.5.0.0/16
gateway: 172.5.0.1
services:
mysql:
image: mysql:8.0.39
container_name: mysql # 指定容器名称
#resources:
#limits:
#memory: 3072M # 3GB 的内存限制
#memory_swap: 4096M # 4GB 的内存交换空间限制
networks:
cbnet:
ipv4_address: 172.5.0.200
environment:
MYSQL_ROOT_PASSWORD: budaos_com
ports:
- "3306:3306"
volumes:
- /budaos_com/data/mysql:/var/lib/mysql # 保留 MySQL 数据卷的映射
- /etc/my.cnf:/etc/mysql/my.cnf
- /etc/localtime:/etc/localtime:ro # 挂载宿主机的时区文件,解决慢8个小时的问题
restart: always # 设置自动重启策略
redis:
image: redis:7.4.1
container_name: redis # 指定容器名称
networks:
cbnet:
ipv4_address: 172.5.0.107
command: ["redis-server", "--requirepass", "budaos_com_www_123456"]
ports:
- "6379:6379"
volumes:
- /budaos_com/data/redis:/data # 保留 Redis 数据卷的映射
- /etc/localtime:/etc/localtime:ro # 挂载宿主机的时区文件,解决慢8个小时的问题
#- /etc/timezone:/etc/timezone:ro # 挂载宿主机的时区文件
restart: always # 设置自动重启策略
budaos_com-stp-mgr:
image: budaos_com/budaos_com-stp-mgr:latest # 替换为实际的镜像名称
container_name: budaos_com-stp-mgr # 指定容器名称
networks:
cbnet:
ipv4_address: 172.5.0.205
ports:
- "9205:9084" # 将9205映射到9084
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://172.5.0.200:3306/budaos_com-stp # 替换为实际的数据库名称
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: budaos_com
SPRING_REDIS_HOST: 172.5.0.107
SPRING_REDIS_PASSWORD: budaos_com_www_123456
depends_on:
- mysql
- redis
volumes:
- /budaos_com/data/budaos_com-stp/uploads:/mnt/cbstp/uploads # 只为该服务映射
restart: always # 设置自动重启策略
budaos_com-stp-evgl:
image: budaos_com/budaos_com-stp-evgl:latest # 替换为实际的镜像名称
container_name: budaos_com-stp-evgl # 指定容器名称
#resources:
#limits:
#memory: 3072M # 3GB 的内存限制
#memory_swap: 4096M # 4GB 的内存交换空间限制
networks:
cbnet:
ipv4_address: 172.5.0.204
ports:
- "9204:9084" # 将9204映射到9084
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://172.5.0.200:3306/budaos_com-stp # 替换为实际的数据库名称
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: budaos_com
SPRING_REDIS_HOST: 172.5.0.107
SPRING_REDIS_PASSWORD: budaos_com_www_123456
depends_on:
- mysql
- redis
volumes:
- /budaos_com/data/budaos_com-stp/uploads:/mnt/cbstp/uploads # 只为该服务映射
restart: always # 设置自动重启策略
budaos_com-stp-sp:
image: budaos_com/budaos_com-stp-sp:latest # 替换为实际的镜像名称
container_name: budaos_com-stp-sp # 指定容器名称
#resources:
#limits:
#memory: 3072M # 3GB 的内存限制
#memory_swap: 4096M # 4GB 的内存交换空间限制
networks:
cbnet:
ipv4_address: 172.5.0.206
ports:
- "9206:9084" # 将9206映射到9084
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://172.5.0.200:3306/budaos_com-stp # 替换为实际的数据库名称
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: budaos_com
SPRING_REDIS_HOST: 172.5.0.107
SPRING_REDIS_PASSWORD: budaos_com_www_123456
depends_on:
- mysql
- redis
volumes:
- /budaos_com/data/budaos_com-stp/uploads:/mnt/cbstp/uploads # 只为该服务映射
restart: always # 设置自动重启策略
以下是您提供的 Docker Compose 文件的详细解释和说明:
1. Docker Compose 文件版本
version: '3.8'
- 指定 Docker Compose 文件的版本,这里使用的是 3.8 版本,该版本支持更先进的配置选项。
2. 网络配置
networks:
cbnet:
driver: bridge
ipam:
config:
- subnet: 172.5.0.0/24
gateway: 172.5.0.1
- 网络名称: 定义了名为
cbnet的自定义网络。 - 驱动: 使用
bridge驱动,这种网络模式是在 Docker 中创建虚拟网络的默认方式。 - IP 地址管理 (IPAM) : 配置了网络的子网(
subnet)和网关(gateway)。这里的子网是172.5.0.0/24,可以用来分配 IP 地址,网关为172.5.0.1。
3. MySQL 服务
mysql:
image: mysql:8.0.39
container_name: mysql # 指定容器名称
#resources:
#limits:
#memory: 3072M # 3GB 的内存限制
#memory_swap: 4096M # 4GB 的内存交换空间限制
networks:
cbnet:
ipv4_address: 172.5.0.200
environment:
MYSQL_ROOT_PASSWORD: budaos_com
ports:
- "3306:3306"
volumes:
- /budaos_com/data/mysql:/var/lib/mysql # 保留 MySQL 数据卷的映射
- /etc/my.cnf:/etc/mysql/my.cnf
- /etc/localtime:/etc/localtime:ro # 挂载宿主机的时区文件,解决慢8个小时的问题
restart: always # 设置自动重启策略
- 服务名称:
mysql为服务名称。 - 镜像: 使用 MySQL 官方 8.0.39 版本镜像。
- 容器名称:
container_name用于指定容器的名称为mysql。 - 网络配置: 将服务连接到
cbnet网络,并指定 static IP 地址为172.5.0.200。 - 环境变量: 设置
MYSQL_ROOT_PASSWORD,用于 MySQL 的根用户密码。 - 端口映射: 将主机的 3306 端口映射到容器的 3306 端口。
- 数据卷: 映射主机目录
/budaos_com/data/mysql到容器内的/var/lib/mysql,用于持久化数据库数据。 - 挂载宿主机的时区文件: /etc/localtime:/etc/localtime:ro 解决容器时间慢8个小时的问题
- 重启策略: 设置为
always,容器在退出时自动重启。
4. Redis 服务
redis:
image: redis:7.4.1
container_name: redis # 指定容器名称
networks:
cbnet:
ipv4_address: 172.5.0.107
command: ["redis-server", "--requirepass", "budaos_com_www_123456"]
ports:
- "6379:6379"
volumes:
- /budaos_com/data/redis:/data # 保留 Redis 数据卷的映射
- /etc/localtime:/etc/localtime:ro # 挂载宿主机的时区文件,解决慢8个小时的问题
#- /etc/timezone:/etc/timezone:ro # 挂载宿主机的时区文件
restart: always # 设置自动重启策略
- 服务名称:
redis为服务名称。 - 镜像: 使用 Redis 官方 7.4.1 版本镜像。
- 容器名称:
container_name用于指定容器名称为redis。 - 网络配置: 连接到
cbnet网络,并指定 static IP 地址为172.5.0.107。 - 命令: 在启动容器时执行
redis-server,并设置访问密码为budaos_com_www_123456。 - 端口映射: 将主机的 6379 端口映射到容器的 6379 端口。
- 数据卷: 映射主机目录
/budaos_com/data/redis到容器内的/data,用于持久化 Redis 数据。 - 挂载宿主机的时区文件: /etc/localtime:/etc/localtime:ro 解决容器时间慢8个小时的问题
- 重启策略: 设置为
always,容器在退出时自动重启。
5. Creatorblue 服务
budaos_com-stp-mgr:
image: budaos_com/budaos_com-stp-mgr:latest # 替换为实际的镜像名称
container_name: budaos_com-stp-mgr # 指定容器名称
networks:
cbnet:
ipv4_address: 172.5.0.205
ports:
- "9205:9084" # 将9205映射到9084
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://172.5.0.200:3306/budaos_com-stp # 替换为实际的数据库名称
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: budaos_com
SPRING_REDIS_HOST: 172.5.0.107
SPRING_REDIS_PASSWORD: budaos_com_www_123456
depends_on:
- mysql
- redis
volumes:
- /budaos_com/data/budaos_com-stp/uploads:/mnt/cbstp/uploads # 只为该服务映射
restart: always # 设置自动重启策略
- 服务名称:
creatorblue-stp-mgr为业务服务名称。 - 镜像: 使用指定业务镜像的最新版本。
- 容器名称:
container_name指定容器名称为budaos_com-stp-mgr。 - 网络配置: 连接到
cbnet网络,并指定 static IP 地址为172.5.0.205。 - 端口映射: 映射主机的 9205 端口到容器的 9084 端口。
- 环境变量: 设置 Spring Boot 应用的数据库和 Redis 配置,包括数据源 URL、用户名、密码等。
- 依赖服务: 使用
depends_on指定该服务依赖于mysql和redis服务。 - 数据卷: 映射主机目录
/budaos_com/data/budaos_com-stp/uploads到容器内的/mnt/cbstp/uploads,用于持久化文件上传数据。 - 重启策略: 设置为
always,容器在退出时自动重启。
2.启动
docker-compose up -d
常见问题
下载镜像慢的情况
新建/etc/docker/daemon.json内容如下:
{
"registry-mirrors" :["https://mirror.ccs.tencentyun.com",
"http://registry.docker-cn.com",
"http://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"],
"insecure-registries" :["registry.docker-cn.com",
"docker.mirrors.ustc.edu.cn"
],
"debug" : true,
"dns": ["8.8.8.8", "8.8.4.4"],
"experimental" : true
}
并重启容器才会生效。
docker支持远程访问
-
说明:docker默认没有打开“2375”端口,需要先进行配置开启端口
-
命令
-
修改配置:vim /usr/lib/systemd/system/docker.service
-
修改:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
-
备注:如果重启不起来可能是“unix://var/run/docker.sock”文件位置不对 ,通过:find / -name docker.sock, 查找正确位置修改即可
-
重载配置:systemctl daemon-reload
-
重启服务:systemctl restart docker