Docker Compose 入门指南

Docker Compose 用一份 YAML 定义多容器应用:服务、网络、卷一键起停。本文以全栈应用为例走通安装、编写 compose 文件、构建运行与服务间通信全流程。

最佳实践
容器模块与编排港口插画

直接回答:Docker Compose 是多容器应用的编排工具——compose.yaml 声明服务(web/db/cache)、网络与卷,docker compose up 一条命令按依赖顺序拉起全部服务,服务间以服务名互访。单机开发与小型部署的标准答案。

解决什么问题

手动跑全栈应用:docker run 数据库、记 IP、再 docker run 应用并 link……服务一多就是灾难。Compose 把这一切收进一份 YAML——环境即代码,clone 下来 compose up 就跑。

一份典型 compose.yaml

services:
  web:
    build: .
    ports: ["127.0.0.1:8080:8080"]
    depends_on: [db, cache]
    environment:
      DATABASE_URL: postgres://app:${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD}@db:5432/app
  db:
    image: postgres:16
    environment:
      POSTGRES_USER: app
      POSTGRES_DB: app
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD}
    volumes: ["pgdata:/var/lib/postgresql/data"]
  cache:
    image: redis:7
volumes:
  pgdata:

这是应用骨架,需自备监听 8080 的应用与 Dockerfile,并实现数据库连接重试。先在受控环境设置 POSTGRES_PASSWORD;URL 特殊字符需编码,密码不可入库。生产使用文件密钥或外部密钥管理。

核心命令

docker compose up -d      # 后台起全部
docker compose ps         # 状态
docker compose logs -f web  # 追日志
docker compose exec web sh  # 进容器
docker compose down       # 全部停掉并清理网络
# 仅对可丢弃数据的测试项目执行:
# docker compose down -v  # 删除本项目非 external 卷及匿名卷

docker compose ps 显示容器运行后,再访问应用接口并检查数据库连接日志,确认服务真正可用。

服务间通信

接入同一 Compose 网络的服务以服务名为主机名互访(postgres://db:5432)——内置 DNS 自动解析,不用管 IP。

常见问题(FAQ)

Q:depends_on 会等数据库就绪吗?
A:默认只等容器启动,不等服务就绪。配 condition: service_healthy + 数据库的 healthcheck 才靠谱。

Q:生产环境能用 Compose 吗?
A:单机小项目完全可用(很多团队这么跑);多机与高可用需求上 Swarm/K8s。

Q:compose.yaml 和 docker-compose.yml 有什么区别?
A:新旧文件名,都认。命令也从 docker-compose(v1 Python 版)演进为 docker compose(v2 插件,空格无连字符)。

官方参考

本文依据官方文档整理,示例未在本文中进行运行验证。生产部署需按所用版本、权限和实际负载验证。

延伸阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台