07.Docker Compose 2
我们将上节分批启动的容器汇总到一个 Docker-compose 文件中,新建一个 docker-compose.yml 文件,内容如下:
yml
version: '3'
services:
redis:
# 服务的名称,后面要使用该服务即使用此名称,如 vote 中的 -redis:redis 中的第一个 redis 既是该名称
image: redis:alpine
db:
image: postgres:15-alpine
environment:
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "postgres"
vote:
image: voting-app
ports:
- 5000:80
links:
- redis:redis
worker:
image: worker-app
links:
- db:db
- redis:redis
result:
image: result-app
ports:
- 5001:80
links:
- db:db然后命令执行:
bash
docker-compose up即可启动这些容器,访问浏览器,将得到和上节相同的效果。
使用 Docker compose 部署时,会自动创建一个网络,可以从这里的输出中看到:
cmd
[+] Running 6/6
✔ Network study-compose_default Created 0.1s
✔ Container study-compose-worker-1 Created 0.7s
✔ Container study-compose-result-1 Created 0.7s
✔ Container study-compose-db-1 Created 0.7s
✔ Container study-compose-redis-1 Created 0.7s
✔ Container study-compose-vote-1 Created 0.7s这里创建的网络名称为 study-compose_default ,当然也可以在启动时在指令中显式指定。
另外,不需要显式的指定 links 选项,在 3.x 及以上版本的 Docker compose 不再强制要求指定 links ,Docker Compose 会自动为同一网络中的容器提供DNS 解析功能,容器可以直接使用主机名 redis 来访问 redis 服务(如果容器内部使用的名称和 compose 文件中定义的不同,仍需要使用 links 选项):
yml
version: '3'
services:
redis:
image: redis:alpine
db:
image: postgres:15-alpine
environment:
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "postgres"
vote:
image: voting-app
ports:
- 5000:80
worker:
image: worker-app
result:
image: result-app
ports:
- 5001:80