0
点赞
收藏
分享

微信扫一扫

Docker Compose 实战与多容器协作

覃榜言 08-22 21:00 阅读 10

经过前 22 天的学习,我已掌握 Docker 容器的基础操作、镜像构建与仓库管理,但在实际项目中,单容器部署难以满足复杂应用需求。今天重点攻克Docker Compose,这款工具能通过单一配置文件定义多容器应用,轻松实现容器的编排、启动与联动,彻底解决多服务部署的繁琐问题。

一、为什么需要 Docker Compose?

在学习 Compose 前,我曾手动部署一个 "Web 服务 + 数据库" 的 Demo:先启动 MySQL 容器并配置端口映射、环境变量,记录容器 IP 后,再启动 Spring Boot 应用容器并手动注入数据库连接参数。这种方式存在三大痛点:一是容器启动顺序依赖手动控制,数据库未就绪时 Web 服务会连接失败;二是容器间网络需手动配置,跨主机部署时 IP 地址频繁变动;三是参数配置分散在多个命令中,环境一致性难以保证。而 Docker Compose 通过docker-compose.yml配置文件,可一次性定义所有服务的依赖关系、网络规则与环境变量,执行docker-compose up即可完成全栈部署,效率提升显著。

二、Docker Compose 核心功能与实战

1. 核心概念

Compose 的架构包含三个核心组件:服务(Service) 对应一个容器实例,如web、db;网络(Network) 用于服务间通信,默认创建专属桥接网络;数据卷(Volume) 实现容器数据持久化,支持跨服务共享。

2. 实战:搭建 WordPress 博客系统

以经典的 "WordPress+MySQL" 组合为例,编写docker-compose.yml文件:

TypeScript取消自动换行复制

version: '3.8' # 指定Compose版本

services:

db: # 数据库服务

image: mysql:8.0

volumes:

- mysql-data:/var/lib/mysql # 数据卷挂载

environment:

- MYSQL_ROOT_PASSWORD=root

- MYSQL_DATABASE=wordpress

restart: always # 容器退出后自动重启

wordpress: # Web服务

depends_on: # 声明依赖db服务

- db

image: wordpress:latest

ports:

- "8080:80" # 端口映射:主机8080→容器80

environment:

- WORDPRESS_DB_HOST=db:3306 # 直接使用服务名访问db

- WORDPRESS_DB_PASSWORD=root

restart: always

volumes:

mysql-data: # 定义数据卷,持久化MySQL数据


执行docker-compose up -d后,Compose 会自动创建网络、启动服务并挂载数据卷。访问http://localhost:8080即可完成 WordPress 安装,整个过程无需手动配置容器间连接。

三、进阶技巧与避坑指南

  1. 服务依赖与启动顺序:depends_on仅保证服务启动顺序,不等待服务就绪(如 MySQL 启动后需时间初始化)。可通过wait-for-it脚本或健康检查(healthcheck)确保服务可用性。
  2. 环境变量管理:将敏感信息(如数据库密码)写入.env文件,在docker-compose.yml中通过${变量名}引用,避免配置文件泄露敏感数据。
  3. 容器日志查看:使用docker-compose logs -f [服务名]实时查看指定服务日志,便于问题排查。
  4. 资源限制:在服务中添加deploy.resources配置,限制 CPU 与内存使用,避免单个服务占用过多资源,例如:

TypeScript取消自动换行复制

deploy:

resources:

limits:

cpus: '0.50'

memory: 512M


四、学习总结

Day23 的学习让我深刻体会到 Docker Compose 在多容器管理中的优势,它将复杂的部署流程转化为可版本控制的配置文件,极大提升了开发与运维效率。后续计划深入学习 Compose 与 Docker Swarm 的结合使用,探索分布式应用的部署方案。如果大家在 Compose 使用中遇到问题,欢迎在评论区交流讨论!

举报

相关推荐

0 条评论