Docker 学习笔记(七)docker compose
目录
警告
本文最后更新于 2022-08-14,文中内容可能已过时。
1. 简介
- docker-compose: 定义和运行多个 Docker 容器的应用
- compose v2: Docker 官方用 GO 语言 重写 了 Docker Compose,并将其作为了 docker cli 的子命令,称为 Compose V2。
docker-compose
命令替换为docker compose
,即可使用 Compose v2
2. compose 文件结构和命令
基本语法结构:
|
|
命令:
- 创建并启动:
docker compose [-f composefile.yml] up [-d] [--build]
- 停止并删除:
docker compose [-f composefile.yml] down
- 启动、停止:
docker compose [-f composefile.yml] {start|stop}
- 重启:
docker compose [-f composefile.yml] restart
- build or rebuild:
docker compose [-f composefile.yml] build
3. compose 网络
- 不指定网络,会创建一个默认网络
- 创建网络不指定 driver 为默认 bridge
4. compose 水平扩展
- 配置 compose file
|
|
- 或者 up 时指定 scale,会覆盖 compose file 中的配置:
docker compose up -d --scale frontend=3
- 还会做简单的负载均衡,使用 service name 访问时,dns 会解析到不同的 replicas 中
5. compose 环境变量
- 在 compose 文件中使用
${VAR_NAME}
代表从外部读取变量值填入 compose 文件 - 传入变量的方式:创建
.env
文件,在文件中赋值会自动传入 - 验证 compose 文件:
docker compose config
- 指定 env 文件名:
docker compose --env-file <filename> ...
6. 服务依赖和健康检查
depends_on
指定依赖,被依赖的服务启动后,才会启动该服务- 只依赖启动顺序不靠谱,可能被依赖的服务启动了但是发生错误了,因此需要健康检查
Dockerfile
也可以定义健康检查:HEALTHCHECK
指令,根据--interval
间隔不断检查,docker container ls
可以在STATUS
字段看到 health 状态(starting、healthy, unhealthy)- 在 compose 文件中定义 health check:
|
|
- 只有 depends_on 是 [healthy|started] 才启动:
|
|