07.进阶与最佳实践

1. 生产环境注意事项

资源限制

1
2
3
4
5
6
7
8
9
10
services:
app:
deploy:
resources:
limits:
cpus: '1.0'
memory: 1G
reservations:
cpus: '0.5'
memory: 512M

日志管理

1
2
3
4
5
6
7
services:
app:
logging:
driver: json-file
options:
max-size: "100m" # 单个日志文件最大
max-file: "5" # 保留文件数量

安全加固

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
services:
app:
# 以非 root 用户运行
user: "1000:1000"

# 只读文件系统
read_only: true

# 临时文件目录
tmpfs:
- /tmp:size=100m

# 安全选项
security_opt:
- no-new-privileges:true

2. 常见问题排查

容器无法启动

1
2
3
4
5
6
7
8
9
10
# 查看容器日志
docker logs container_name

# 查看详细信息
docker inspect container_name

# 常见原因:
# 1. 端口冲突
# 2. 数据卷权限问题
# 3. 依赖服务未就绪

网络不通

1
2
3
4
5
6
7
8
9
10
11
# 检查网络
docker network ls
docker network inspect network_name

# 测试容器间连通性
docker exec container1 ping container2

# 常见原因:
# 1. 容器不在同一网络
# 2. 服务名拼写错误
# 3. 端口未暴露

磁盘空间不足

1
2
3
4
5
6
7
8
9
10
11
# 查看磁盘使用
docker system df

# 清理未使用资源
docker system prune

# 清理所有(包括未使用的镜像)
docker system prune -a

# 清理数据卷
docker volume prune

3. Docker 生态与未来

Kubernetes 简介

当容器数量达到一定规模(几十到上百),Docker Compose 就不够用了。Kubernetes(K8s)是容器编排的事实标准:

  • 自动扩缩容
  • 服务发现与负载均衡
  • 滚动更新与回滚
  • 自我修复

Docker Swarm

Docker 原生的编排工具,比 K8s 简单:

1
2
3
4
5
# 初始化 Swarm
docker swarm init

# 部署服务
docker stack deploy -c docker-compose.yml myapp

云原生趋势

  • 容器运行时:containerd、CRI-O 等逐渐替代 Docker Engine
  • 无服务器容器:AWS Fargate、Google Cloud Run
  • 服务网格:Istio、Linkerd