在实际的微服务架构中,仅仅控制启动顺序是不够的。如果数据库还在初始化,Web 服务强行启动就会报错。此时需要结合健康检查(healthcheck)与条件依赖:
services:
mysql:
image: mysql:8.0
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
webapp:
build: .
depends_on:
mysql:
condition: service_healthy # 只有当 mysql 健康时,webapp 才会启动
虽然 Compose 会自动为项目创建一个默认网络,但在复杂架构中,建议自定义网络以实现服务隔离。在 services 中,通过 networks: frontend, backend 将服务加入指定网络。同一网络下的服务可以通过服务名作为主机名直接相互访问。
networks:
frontend:
driver: bridge
backend:
driver: bridge
volumes:
mysql_data: # 声明一个命名卷,由 Docker 自动管理存储位置
编写好 docker-compose.yml 后,在项目根目录下使用以下命令即可轻松管理整个集群:
docker compose up -ddocker compose up -d --builddocker compose downdocker compose psdocker compose logs -fdocker compose restart api