Docker Compose 入门:一条命令拉起多容器

举报
yd_225636183 发表于 2026/10/29 12:19:49 2026/10/29
【摘要】 Docker Compose 入门:一条命令拉起多容器 一个容器不够用的时候学会用 Docker 跑单个容器后,很快会遇到一个现实问题:一个真实项目很少只有一个服务。Web 应用要连数据库,缓存要配 Redis,后台任务还要一个队列服务。逐个 docker run 当然能跑起来,但命令越敲越长,端口、网络、启动顺序全靠人脑记住,换台机器又要重来一遍。Docker Compose 就是为了解...

Docker Compose 入门:一条命令拉起多容器

一个容器不够用的时候

学会用 Docker 跑单个容器后,很快会遇到一个现实问题:一个真实项目很少只有一个服务。Web 应用要连数据库,缓存要配 Redis,后台任务还要一个队列服务。逐个 docker run 当然能跑起来,但命令越敲越长,端口、网络、启动顺序全靠人脑记住,换台机器又要重来一遍。Docker Compose 就是为了解决这个麻烦:把多个容器的配置写进一个文件,一条命令全部拉起。

核心就一个文件

Compose 的核心是一个名为 docker-compose.yml 的文件(新版也可以叫 compose.yaml)。它用 YAML 描述每个服务:用什么镜像、映射哪个端口、挂载哪个目录、依赖哪个服务。下面是一个最小但能跑的例子,一个 Web 服务加一个数据库:

services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - db-data:/var/lib/postgresql/data
volumes:
  db-data:

这段配置说了三件事:web 服务用 nginx 镜像,把本机 8080 端口映射到容器 80 端口;db 服务用 postgres 镜像,通过环境变量设置密码,并把数据存进一个具名卷,这样容器删了数据还在。写好文件后,在文件所在目录执行 docker compose up -d,两个容器就一起在后台跑起来了;不用的时候 docker compose down 一起停掉,干净利落。

三个最常用的命令

日常用 Compose,记住三个命令就够了。docker compose up -d 是启动,-d 表示后台运行,不加它日志会直接打在终端里。docker compose ps 查看当前项目里各容器的运行状态,比 docker ps 更聚焦,因为它只列出这个项目的东西。docker compose logs -f web 可以只看某一个服务的实时日志,出问题先看日志,再决定是改配置还是重启服务。改了配置文件后,重新执行一次 up -d,Compose 会只重建有变化的服务,没变的保持运行,这一点在调试时特别省时间。

容易踩的三个坑

第一个坑是端口冲突:本机 8080 已经被别的程序占了,容器就起不来,换个没被占用的端口映射即可。第二个坑是服务启动顺序:数据库还没准备好,Web 服务就先连了过去,第一次连接失败很正常,靠应用的重试机制或者 depends_on 配合健康检查来缓解,不要指望启动顺序本身能保证就绪。第三个坑是数据卷:没有挂载卷的数据库容器,删掉容器数据就没了,重要的服务一定要配卷,这是 Compose 文件里最值得先写对的一行。

从单容器到一整套环境

Compose 的真正价值不在“少敲几条命令”,而在“环境可以被写下来、传给别人、重复跑出同样的结果”。一份 compose 文件就是一份可复现的环境说明:新同事拿到项目,不用再问数据库密码是多少、端口映射成什么,执行一条命令就能得到和你一样的开发环境。先从 web 加数据库的两服务组合练起,跑通、停掉、再拉起,熟悉之后再逐步加缓存、加队列,组合的复杂度可以慢慢长,但管理方式始终是同一个文件、同一条命令。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。