Docker Compose 是单机上定义和运行多容器应用的标准工具,适合开发、测试以及部分生产场景。
先说结论:单机多容器场景首选 Docker Compose,通过 YAML 文件管理依赖和配置,避免手动敲命令出错。
- 适合:开发环境、测试环境、单机生产部署
- 先准备:安装 Docker Compose 插件,编写 docker-compose.yml
- 验收:容器状态运行中,服务端口可访问,日志无报错
命令速用版
# 启动服务(后台运行)
docker compose up -d
# 查看运行状态
docker compose ps
# 查看日志
docker compose logs -f
# 停止并移除容器
docker compose down
为什么会这样
手动使用 docker run 启动多个容器时,需要分别处理网络链接、卷挂载和启动顺序,容易遗漏配置导致服务不通。Docker Compose 将这一切声明在一个 YAML 文件里,一次性编排所有资源,确保环境一致性。
分步处理
1. 确认环境
确保已安装 Docker 且包含 Compose 插件。运行 docker compose version 确认有输出。如果没有,需安装 Docker Desktop 或单独安装 compose 插件。
2. 编写配置文件
在项目根目录创建 docker-compose.yml。定义服务、网络和卷。注意缩进必须正确,YAML 对缩进敏感。
3. 启动服务
在文件所在目录执行 docker compose up -d。首次运行会拉取镜像,耗时取决于网络。
4. 日常维护
修改配置后,通常只需再次运行 docker compose up -d,Compose 会自动重建变更的容器。
怎么验证是否生效
执行 docker compose ps,所有服务状态应显示为 running。尝试访问服务暴露的端口,例如浏览器访问 http://localhost:8080。查看日志 docker compose logs [服务名] 确认无启动报错。
常见坑
1. 命令混淆:旧版命令是 docker-compose(带横杠,Python 编写),新版是 docker compose(空格,插件模式)。建议统一使用新版,旧版已进入维护期。
2. 路径问题:YAML 中挂载卷使用相对路径时,是相对于 docker-compose.yml 文件所在目录,而非执行命令的目录。
3. 网络隔离:默认情况下,不同 Compose 项目的容器网络是隔离的。如果需要通信,需显式配置外部网络或放在同一项目中。
4. 资源限制:单机资源有限,建议在 YAML 中为服务设置 deploy.resources 限制,避免某个容器占满内存导致主机宕机。
参考来源
Docker 官方文档 - Compose 概览,https://docs.docker.com/compose/