Docker Compose 多容器部署:网络与卷配置
·
Docker Compose 多容器部署:网络与卷配置
在 Docker Compose 中实现多容器协同工作时,网络和卷的配置是关键环节。以下是结构化配置指南:
一、网络配置
容器间通信依赖网络,Compose 提供两种模式:
-
默认网络
不显式声明时,Compose 自动创建名为{project}_default的网络,所有容器加入其中,可通过服务名互访:services: web: image: nginx:alpine db: image: postgres:14 # web容器可通过`db`主机名访问PostgreSQL -
自定义网络
需显式声明网络并指定子网,适用于复杂拓扑:networks: app_net: driver: bridge ipam: config: - subnet: 172.20.0.0/24 services: api: networks: app_net: ipv4_address: 172.20.0.2 cache: networks: app_net: ipv4_address: 172.20.0.3
二、卷配置
数据持久化与共享通过卷实现,主要分三类:
-
命名卷(Named Volumes)
Docker 管理存储位置,适合数据库等有状态服务:volumes: db_data: {} # 声明卷 services: database: image: mysql:8.0 volumes: - db_data:/var/lib/mysql # 挂载卷 -
绑定挂载(Bind Mounts)
直接映射宿主机目录,适合开发环境代码热更新:services: frontend: image: node:18 volumes: - ./src:/app/src # 宿主机目录:容器目录 -
多容器共享卷
同一卷可挂载到多个容器实现数据共享:volumes: shared_data: {} services: processor: volumes: - shared_data:/input exporter: volumes: - shared_data:/output
完整配置示例
version: '3.8'
# 网络定义
networks:
backend:
driver: bridge
ipam:
config:
- subnet: 192.168.5.0/24
# 卷定义
volumes:
pg_data:
app_logs:
services:
# 数据库服务
postgres:
image: postgres:14
networks:
backend:
ipv4_address: 192.168.5.2
volumes:
- pg_data:/var/lib/postgresql/data # 命名卷持久化
# 应用服务
webapp:
image: my-webapp:latest
networks:
- backend
volumes:
- ./app:/code # 绑定挂载代码
- app_logs:/var/log # 共享日志卷
depends_on:
- postgres
# 日志收集器
logstash:
image: logstash:7
volumes:
- app_logs:/input # 共享日志卷
networks:
- backend
关键配置说明
-
网络隔离性
- 自定义子网(如
192.168.5.0/24)避免 IP 冲突 - 服务间通过
服务名或静态IP通信
- 自定义子网(如
-
卷生命周期
docker compose down -v # 删除容器时同时移除卷命名卷需手动删除,绑定挂载随宿主机目录保留
-
跨主机扩展
生产环境中可将driver改为overlay支持 Swarm 集群
注:实际部署时需根据资源需求配置
deploy.resources限制 CPU/内存,避免容器资源竞争。
更多推荐
所有评论(0)