Compose 网络与卷
Compose 中网络和卷是多容器通信与数据共享的基础,下面介绍配置方法。
网络配置
默认网络
YAML
services:
web:
image: nginx
app:
image: my-app
默认所有服务加入
default网络,可互相访问。
自定义网络
YAML
version: '3.8'
services:
web:
image: nginx
networks:
- frontend
app:
image: my-app
networks:
- frontend
- backend
db:
image: postgres
networks:
- backend # 仅 app 可访问 db
networks:
frontend:
backend:
网络驱动
YAML
networks:
frontend:
driver: bridge # 默认
overlay-net:
driver: overlay # Swarm 跨主机
网络别名
YAML
services:
db:
image: postgres
networks:
backend:
aliases:
- database
- postgres-db
# app 可通过 database、postgres-db 访问
数据卷配置
命名卷
YAML
version: '3.8'
services:
db:
image: postgres
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
driver: local
外部卷
YAML
volumes:
db-data:
external: true # 使用已存在的卷
卷驱动选项
YAML
volumes:
cache-data:
driver: local
driver_opts:
type: tmpfs
device: tmpfs
o: size=100m
完整示例
YAML
version: '3.8'
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
networks:
- frontend
volumes:
- nginx-config:/etc/nginx/conf.d:ro
app:
build: .
networks:
- frontend
- backend
volumes:
- app-data:/app/data
depends_on:
- db
- redis
db:
image: postgres:15
networks:
- backend
volumes:
- db-data:/var/lib/postgresql/data
redis:
image: redis:7
networks:
- backend
volumes:
- redis-data:/data
networks:
frontend:
driver: bridge
backend:
driver: bridge
internal: true # 禁止外部访问
volumes:
nginx-config:
app-data:
db-data:
redis-data:
网络隔离
YAML
networks:
backend:
internal: true # 无外网访问
frontend:
# 可访问外网
internal: true阻止网络访问外部,仅允许内部通信。
查看网络与卷
Bash
# 查看网络
docker compose config --networks
# 查看卷
docker compose config --volumes
# 查看容器网络
docker inspect my-app-web-1 | grep -A 10 "Networks"
要点总结
- 默认所有服务加入同一网络可互相访问
- 自定义网络实现服务隔离,仅同一网络服务可通信
- 网络别名提供服务发现别名,提高配置灵活性
- 命名卷实现数据持久化,外部卷使用已有数据
internal: true阻止网络访问外部,增强安全性
📝 发现内容有误?点击此处直接编辑