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 加数据库的两服务组合练起,跑通、停掉、再拉起,熟悉之后再逐步加缓存、加队列,组合的复杂度可以慢慢长,但管理方式始终是同一个文件、同一条命令。
- 点赞
- 收藏
- 关注作者
评论(0)