Docker与Kubernetes实战指南:从容器构建到集群编排

一、容器网络配置与调试实战

容器网络是分布式应用的基础设施,掌握网络地址分配与调试方法对故障排查至关重要。以下通过典型场景演示容器网络操作流程:

  1. 容器创建与网络初始化
    ```bash

    创建随机端口映射的容器实例

    docker run -d -P —name web-demo nginx:alpine

获取容器IP地址(两种等效方式)

docker inspect -f ‘{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}’ web-demo
docker exec -it web-demo ip addr show eth0

  1. 生产环境建议采用固定端口映射:
  2. ```bash
  3. docker run -d -p 8080:80 --name web-fixed nginx:alpine
  1. 自定义网络拓扑
    ```bash

    创建用户自定义网络(支持DNS自动解析)

    docker network create my-net

启动容器并指定网络

docker run -d —network my-net —name service-a alpine ping service-b
docker run -d —network my-net —name service-b alpine ping service-a

  1. 该模式特别适合微服务架构,容器间可通过服务名直接通信。
  2. ### 二、Dockerfile指令深度解析
  3. 镜像构建是容器化的核心环节,正确使用构建指令可显著提升镜像安全性和可维护性。重点对比两种容器启动指令:
  4. 1. **CMDENTRYPOINT的协同使用**
  5. | 特性 | CMD | ENTRYPOINT |
  6. |---------------------|------------------------------|-----------------------------|
  7. | 参数传递方式 | 可被覆盖 | 追加参数 |
  8. | 典型使用场景 | 默认执行命令 | 基础命令框架 |
  9. | 多指令处理 | 仅最后一条生效 | 全部合并执行 |
  10. **最佳实践组合**:
  11. ```dockerfile
  12. FROM alpine:3.16
  13. ENTRYPOINT ["/usr/bin/curl"]
  14. CMD ["--help"]

构建后镜像支持两种调用方式:

  1. # 使用默认参数
  2. docker run curl-demo
  3. # 追加自定义参数
  4. docker run curl-demo -v https://example.com
  1. 多阶段构建优化
    ```dockerfile

    编译阶段

    FROM golang:1.19 AS builder
    WORKDIR /app
    COPY . .
    RUN go build -o myapp

运行阶段

FROM alpine:3.16
COPY —from=builder /app/myapp /usr/local/bin/
CMD [“myapp”]

  1. 该技术可将最终镜像体积缩小80%以上,特别适合GoRust等编译型语言。
  2. ### 三、Kubernetes编排实战案例
  3. 当容器数量超过10个时,手动管理变得不可持续,此时需要引入编排系统。以下演示从容器到集群的演进过程:
  4. 1. **基础Pod配置**
  5. ```yaml
  6. apiVersion: v1
  7. kind: Pod
  8. metadata:
  9. name: nginx-pod
  10. spec:
  11. containers:
  12. - name: nginx
  13. image: nginx:alpine
  14. ports:
  15. - containerPort: 80
  16. resources:
  17. limits:
  18. memory: "128Mi"
  19. cpu: "500m"
  1. Deployment控制器配置
    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. name: nginx-deploy
    5. spec:
    6. replicas: 3
    7. selector:
    8. matchLabels:
    9. app: nginx
    10. template:
    11. metadata:
    12. labels:
    13. app: nginx
    14. spec:
    15. containers:
    16. - name: nginx
    17. image: nginx:1.23
    18. livenessProbe:
    19. httpGet:
    20. path: /healthz
    21. port: 80
    22. initialDelaySeconds: 5
    23. periodSeconds: 10

    该配置实现了:

  • 自动故障恢复
  • 滚动更新能力
  • 健康检查机制
  • 水平扩展基础
  1. Service负载均衡
    1. apiVersion: v1
    2. kind: Service
    3. metadata:
    4. name: nginx-service
    5. spec:
    6. selector:
    7. app: nginx
    8. ports:
    9. - protocol: TCP
    10. port: 80
    11. targetPort: 80
    12. type: ClusterIP # 可替换为NodePort/LoadBalancer

四、生产环境优化建议

  1. 镜像安全加固
  • 使用非root用户运行容器
  • 定期扫描基础镜像漏洞
  • 启用镜像签名验证机制
  1. 资源管理策略
  • 为每个容器设置合理的requests/limits
  • 采用Vertical Pod Autoscaler动态调整资源
  • 使用ResourceQuotas限制命名空间资源总量
  1. 监控告警体系
    1. # 示例Prometheus监控配置
    2. apiVersion: monitoring.coreos.com/v1
    3. kind: ServiceMonitor
    4. metadata:
    5. name: nginx-monitor
    6. spec:
    7. selector:
    8. matchLabels:
    9. app: nginx
    10. endpoints:
    11. - port: web
    12. path: /metrics
    13. interval: 30s

五、故障排查工具链

  1. 日志收集方案
    ```bash

    查看容器日志

    kubectl logs nginx-pod-xxxx -f

集群级日志聚合(需提前部署EFK栈)

kubectl logs —all-containers=true -n production

  1. 2. **网络诊断工具**
  2. ```bash
  3. # 容器内网络连通性测试
  4. kubectl exec -it nginx-pod-xxxx -- apk add curl
  5. kubectl exec -it nginx-pod-xxxx -- curl -v http://service-b
  6. # 服务拓扑可视化(需安装NetworkPolicy插件)
  7. kubectl get networkpolicy -o wide
  1. 性能分析组合
  • 节点级监控:Node Exporter + Prometheus
  • 应用级监控:自定义Metrics Exporter
  • 链路追踪:Jaeger/Zipkin集成

通过系统化的技术实践,开发者可以构建出高可用、可观测的容器化应用架构。建议从基础容器操作开始,逐步掌握编排系统的高级特性,最终实现从单机部署到云原生架构的平滑过渡。实际生产环境中,还需结合具体业务场景补充安全策略、备份恢复等运维机制。