当前位置: 首页 > news >正文

用 Docker Compose 管理留言板多容器应用

用 Docker Compose 管理留言板多容器应用

导航目录

  1. 引言
  2. 实验前准备
  3. 环境规划
  4. 部署前置条件
  5. 核心配置文件
  6. 部署步骤
  7. 功能验证
  8. Docker Compose 优势

一、引言

目标是将上一个实验中手动启动的 MySQL 和 Python 应用 容器,
通过 docker-compose.yml 文件统一管理,实现 “一键启动 / 停止所有服务”。

描述:
本项目是基于 Flask + MySQL 的留言板应用,通过 Docker Compose 实现开发环境与测试环境的隔离部署,支持独立端口、独立数据库、独立日志存储,确保开发与测试过程互不干扰。

二、实验前准备

基于上一个实验“用 Docker 部署一个带 MySQL 的 Python 留言板”(需要有message-app:v1镜像和mysql:data卷,若没有可重新构建)
进入之前的应用目录:
cd /root/message-board

三、环境规划

环境类型应用端口数据库端口数据库名日志目录项目标识(项目名)
开发环境50003307message_board_dev./logs/devdev-project
测试环境50013308message_board_test./logs/testtest-project

四、部署前置条件

  1. 服务器已安装 Docker 和 Docker Compose;
  2. 服务器开放端口:5000(开发)、5001(测试)、3307(开发MySQL)、3308(测试MySQL);
  3. 项目文件结构:

四、部署前置条件

1. 环境变量文件

开发环境(.env.dev)
APP_PORT=5000               # 开发环境应用端口
DB_NAME=message_board_dev   # 开发环境数据库名
DB_PASSWORD=dev123456       # 数据库密码
LOG_DIR=./logs/dev          # 日志目录
DB_PORT=3307                # 数据库映射端口
测试环境(.env.test)
APP_PORT=5001               # 测试环境应用端口
DB_NAME=message_board_test  # 测试环境数据库名
DB_PASSWORD=test123456      # 数据库密码
LOG_DIR=./logs/test         # 日志目录
DB_PORT=3308                # 数据库映射端口
2. Docker Compose 配置(docker-compose.yml)
version: '3.8'x-common-config:&common-configrestart: alwayslogging:driver: "json-file"options:max-size: "10m"max-file: "3"services:db:<<: *common-configimage: mysql:5.7container_name: ${ENV}_dbenvironment:MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}MYSQL_DATABASE: ${DB_NAME}volumes:- ${ENV}_mysql-data:/var/lib/mysqlports:- "${DB_PORT}:3306"networks:- ${ENV}_nethealthcheck:test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${DB_PASSWORD}"]interval: 5stimeout: 5sretries: 5web:<<: *common-configbuild: .container_name: ${ENV}_appenvironment:DB_HOST: dbDB_PORT: 3306DB_USER: rootDB_PASSWORD: ${DB_PASSWORD}DB_NAME: ${DB_NAME}ports:- "${APP_PORT}:5000"depends_on:db:condition: service_healthyvolumes:- ${LOG_DIR}:/app/logsnetworks:- ${ENV}_netnetworks:dev_net:test_net:volumes:dev_mysql-data:test_mysql-data:

3. 应用代码关键优化(app.py)

数据库连接重试:最多 10 次重试,间隔 5 秒,避免 MySQL 未就绪导致启动失败;
日志持久化:日志输出到 /app/logs/app.log 并挂载到本地目录,便于排查问题。

六、部署步骤

步骤 1:创建 docker-compose.yml 文件(compose核心配置文件)
cat > docker-compose.yml << 'EOF'
version: '3.8'  # Compose 文件版本(需与 Docker 版本兼容)# 定义所有服务(容器)
services:# MySQL 服务(对应之前的 mymysql 容器)db:image: mysql:5.7  # 使用的镜像container_name: mymysql  # 容器名(可选,默认是 项目名_服务名_1)environment:  # 环境变量(替代 -e)MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: message_boardvolumes:  # 数据卷挂载(替代 -v)- mysql-data:/var/lib/mysqlports:  # 端口映射(替代 -p)- "3306:3306"restart: always  # 容器退出时自动重启(新增配置)# Python 应用服务(对应之前的 myapp 容器)web:image: message-app:v1  # 使用上一个实验构建的镜像container_name: myappenvironment:DB_HOST: db  # 连接 MySQL 服务名(替代容器名,Compose 自动解析)DB_PASSWORD: 123456DB_NAME: message_boardports:- "5000:5000"depends_on:  # 依赖 db 服务,确保 db 先启动- dbrestart: always# 声明数据卷(需与上面的 volumes 对应)
volumes:mysql-data:  # 复用之前创建的命名卷(若不存在会自动创建)
EOF
步骤2:理解docker-compose.yml核心配置
配置项	      作用说明
version	    指定 Compose 语法版本(3.8 是较新且稳定的版本)。
services	定义所有容器服务(这里有 db 和 web 两个服务)。
depends_on	定义启动顺序(web 依赖 db,确保 db 先启动再启动 web)。
volumes	     声明全局数据卷(复用之前的 mysql-data,确保数据持久化)。
restart: always	容器意外退出时自动重启(比手动启动更稳定,适合生产环境)。
步骤 3:使用 Docker Compose 操作服务
启动所有服务(首次运行)
# 前台启动(可看到日志输出,按 Ctrl+C 停止)
docker compose up# 推荐使用后台启动方式(-d 表示 detached 模式)
docker compose up -d启动成功后,会自动创建默认网络,web 服务可通过 db 这个服务名直接连接 MySQL(无需 --link)。
查看服务状态
# 查看正在运行的服务
docker compose ps# 查看所有服务(包括已停止的)
docker compose ps -a
查看服务日志
# 查看所有服务的日志(实时输出)
docker compose logs -f# 只查看 web 服务的日志
docker compose logs -f web
停止并删除服务
# 停止服务(保留容器、网络、数据卷)
docker compose stop# 停止并删除容器、网络(保留数据卷,推荐)
docker compose down# 停止并删除所有(包括数据卷,谨慎使用!会丢失 MySQL 数据)
docker compose down -v

七、功能验证

步骤1:查看数据卷的独立性
# 查看所有数据卷(确认开发/测试数据卷独立存在)
docker volume ls | grep -E "dev-project|test-project"
正常输出应包含两个独立的数据卷:
local     dev-project_dev_mysql-data
local     test-project_test_mysql-data
步骤2:向开发环境写入数据
1. 访问开发环境:http://服务器IP:5000  
2. 提交一条留言(例如:这是开发环境的测试数据)。
步骤3:检查测试环境是否存在开发环境的数据
1. 访问测试环境:http://服务器IP:5001  
2. 确认页面中 没有 步骤2中提交的留言(若为空,说明隔离生效)。
步骤4:向测试环境写入数据
1. 在测试环境提交一条留言(例如:这是测试环境的测试数据)。
步骤5:检查开发环境是否存在测试环境的数据
1. 刷新开发环境页面:http://服务器IP:5000  
2. 确认页面中 没有 步骤4中提交的留言。
步骤6:通过数据库直接验证(更彻底)
1. 进入开发环境的 MySQL 容器,查看数据:
# 进入开发环境MySQL容器
docker exec -it dev_db mysql -u root -pdev123456
# 查看开发环境数据库中的留言
use message_board_dev;
select * from messages;  # 应仅显示步骤2中提交的留言
exit;2. 进入测试环境的 MySQL 容器,查看数据:
# 进入测试环境MySQL容器
docker exec -it test_db mysql -u root -ptest123456
# 查看测试环境数据库中的留言
use message_board_test;
select * from messages;  # 应仅显示步骤4中提交的留言
exit;
留言

留言板界面
留言板(message_board_test环境)

开发环境-数据库检查:

MySQL 数据查询界面

测试环境-数据库检查

MySQL 数据查询界面

八、Docker Compose 优势

1.配置即代码:所有容器参数写在 docker-compose.yml 中,无需记忆复杂命令,方便版本控制。
2.一键操作:up 启动所有服务,down 停止所有服务,比手动逐个操作高效 10 倍。
3.网络自动管理:服务间通过服务名通信(如 web 用 db 连接 MySQL),无需手动配置 --link 或网络。
4.依赖控制:depends_on 确保服务启动顺序,避免 “应用启动时数据库还没就绪” 的问题

http://www.dtcms.com/a/598413.html

相关文章:

  • 国内网站设计案例做俄语网站
  • 厦门市湖里区建设局网站找别人做网站
  • 南阳企业网站建设公司天推广人的网站
  • 邢台网站制作多少钱哪些论坛是wordpress
  • 手机可以访问的网站怎么做百度应用商店官网
  • 2025年11月11日 AI快讯
  • 性能测试系统综述类型指标与流程协同
  • 头歌MySQL——单表查询
  • 哪个公司的app软件定制seo搜索如何优化
  • 网站后台管理破解漯河市住房和城乡建设局网站
  • Android系统定制——导航栏添加自定义按钮
  • 嵌入式Linux学习——环境变量与配置文件的关系(⭐难理解)
  • LIN总线基础讲解之二—LIN总线网络的物理层与帧结构
  • 十三、More Deeper:VGG详解,从网络结构到实战
  • 天台网站建设大丰有做网站的
  • 网站建设公司利润怎么样利用网站制作网页
  • 单端口RAM IP核
  • 26、【Ubuntu】【远程开发】内网穿透:密钥算法介绍(二)
  • 什么网站可以做电子画册医院网站建设 南宁
  • 免费物业网站模板网架生产企业
  • FreeRTOS coreHTTP 客户端库源码与架构全景剖析
  • HttpServletRequest中的 Attribute(属性)生命周期和作用域是 Java Web 开发中的重要概念
  • 甘肃省水利厅引洮工程建设管理局网站网页制作与网站建设...
  • 浦东建设网站柳州网站建设柳州
  • Linux 基础开发工具----Vim编辑器的常见命令
  • Flutter for HarmonyOS开发指南(八):国际化与本地化深度实践
  • 建设局主要负责什么黑帽seo软件
  • 购买东西网站怎么做网页空间租用
  • 什么网站做外贸最多的网站建设虚线的代码
  • AIDD - 自主决策实验室 Intrepid Labs 介绍