Docker进阶实践
2025/9/17大约 3 分钟
Docker进阶实践
前置知识
在开始本教程之前,建议您具备以下基础知识:
- Docker基础操作
- Linux系统管理
- 基本的网络知识
- 安全基础概念
Docker监控与日志
1. 容器监控
# 基本状态监控
docker stats
# 查看容器进程
docker top mycontainer
# 查看容器事件
docker events --filter 'container=mycontainer'
2. 日志管理
# docker-compose.yml 日志配置
services:
app:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
tag: "{{.Name}}"
3. 监控工具集成
# prometheus.yml
scrape_configs:
- job_name: 'docker'
static_configs:
- targets: ['localhost:9323']
# daemon.json
{
"metrics-addr": "127.0.0.1:9323",
"experimental": true
}
安全加固
1. 容器安全配置
# 使用非root用户
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
# 只读文件系统
VOLUME /data
RUN chmod 755 /data
2. 安全扫描
# 镜像漏洞扫描
docker scan myimage:latest
# Trivy扫描示例
trivy image nginx:latest
# Snyk容器扫描
snyk container test nginx:latest
3. 网络安全
# 创建自定义网络
docker network create --driver bridge \
--subnet=172.20.0.0/16 \
--ip-range=172.20.10.0/24 \
--gateway=172.20.10.11 \
custom-network
# 限制容器通信
docker run --network custom-network \
--network-alias secure-app \
--cap-drop=ALL \
--security-opt=no-new-privileges \
myapp:latest
性能优化
1. 资源限制
# CPU和内存限制
docker run -d \
--cpus=2 \
--cpu-shares=512 \
--memory=2g \
--memory-reservation=1g \
--memory-swap=4g \
myapp:latest
# 块IO限制
docker run -d \
--device-write-bps /dev/sda:10mb \
--device-read-bps /dev/sda:10mb \
myapp:latest
2. 网络优化
# 使用host网络模式
docker run --network host myapp:latest
# 配置DNS
docker run --dns 8.8.8.8 \
--dns-search example.com \
myapp:latest
高级特性应用
1. 多阶段构建优化
# 构建阶段
FROM golang:1.20 AS builder
WORKDIR /build
COPY go.* .
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o app
# 安全扫描阶段
FROM aquasec/trivy:latest AS scanner
COPY --from=builder /build/app /app
RUN trivy --no-progress --exit-code 1 --severity HIGH,CRITICAL /app
# 最终阶段
FROM scratch
COPY --from=builder /build/app /app
ENTRYPOINT ["/app"]
2. 健康检查配置
# 健康检查配置
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost:8080/health || exit 1
# 自定义脚本检查
COPY healthcheck.sh /
RUN chmod +x /healthcheck.sh
HEALTHCHECK --interval=30s --timeout=3s \
CMD ["/healthcheck.sh"]
生产环境最佳实践
1. 容器编排策略
# docker-compose.prod.yml
version: '3.8'
services:
app:
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
restart_policy:
condition: on-failure
max_attempts: 3
resources:
limits:
cpus: '0.50'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
2. 备份策略
# 数据卷备份
docker run --rm \
-v myapp_data:/source:ro \
-v $(pwd)/backup:/backup \
alpine tar czf /backup/data-$(date +%Y%m%d).tar.gz -C /source .
# 自动备份脚本
#!/bin/bash
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d)
docker run --rm \
-v myapp_data:/source:ro \
-v $BACKUP_DIR:/backup \
alpine tar czf /backup/data-$DATE.tar.gz -C /source .
# 保留最近7天的备份
find $BACKUP_DIR -name "data-*.tar.gz" -mtime +7 -delete
常见问题与解决方案
1. 容器启动失败?
排查步骤:
- 检查容器日志
docker logs <container_id>
- 查看容器详情
docker inspect <container_id>
- 验证配置文件
- 检查资源限制
- 查看系统日志
2. 网络连接问题?
解决方案:
- 检查网络配置
docker network inspect <network_id>
- 验证DNS设置
- 测试容器连通性
- 检查防火墙规则
- 查看路由配置
3. 性能问题?
优化建议:
- 监控资源使用
docker stats <container_id>
- 调整资源限制
- 优化存储驱动
- 使用性能分析工具
- 检查日志配置
总结
本教程详细介绍了Docker的进阶实践,包括:
- ✅ 监控与日志:容器监控、日志管理、工具集成
- ✅ 安全加固:容器安全、漏洞扫描、网络安全
- ✅ 性能优化:资源限制、网络优化
- ✅ 高级特性:多阶段构建、健康检查
- ✅ 最佳实践:编排策略、备份方案
下一步学习
- 探索Kubernetes
- 了解服务网格
- 学习DevOps实践
- 深入云原生架构