Docker容器与Kubernetes编排指南

Docker容器与Kubernetes编排指南
Docker 容器与 Kubernetes 编排指南一、Docker Desktop 概述1.1 定义与核心价值Docker Desktop是 Docker 官方提供的 Windows/Mac 桌面客户端提供可视化界面管理容器简化本地开发和测试流程。核心价值可视化管理图形化界面查看和管理容器、镜像、网络一键部署快速启动常用服务MySQL、Redis、Nginx 等多平台支持统一的开发体验支持 Windows、Mac、Linux内置工具集成 Docker Compose、Kubernetes、Dev Environments1.2 界面功能左侧导航栏功能描述Containers查看和管理运行中的容器Images查看和管理本地镜像Volumes管理数据卷Networks管理网络配置Dev Environments开发环境管理Settings配置 Docker 运行参数常用操作右键容器 → Start/Stop/Restart 右键容器 → Open in Terminal进入容器 右键容器 → Inspect查看详细信息 右键镜像 → Run创建容器1.3 配置优化资源配置打开 Settings → ResourcesCPU分配 CPU 核心数建议 2-4 核Memory分配内存建议 4-8GBDisk分配磁盘空间WSL Integration启用与 WSL 的集成镜像加速打开 Settings → Docker Engine添加镜像源{registry-mirrors:[https://docker.m.daocloud.io,https://hub-mirror.c.163.com,https://mirror.baidubce.com]}二、Docker 容器引擎深度解析2.1 Docker 的核心角色Docker 作为容器引擎负责创建和运行单个容器镜像构建、容器运行、单机管理提供容器运行时环境2.2 工作原理┌──────────────────────────────────────────────┐ │ Docker Client │ │ (docker 命令行工具、Docker Desktop) │ └───────────────────┬──────────────────────────┘ │ API ▼ ┌──────────────────────────────────────────────┐ │ Docker Daemon │ │ (dockerd运行在宿主机后台) │ └───────────────────┬──────────────────────────┘ │ ┌───────────┼───────────┐ ▼ ▼ ▼ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ 镜像管理 │ │ 容器管理 │ │ 网络管理 │ └─────────┘ └─────────┘ └─────────┘2.3 适用场景场景是否适用 Docker说明本地开发✓快速搭建开发环境测试环境✓与生产环境一致单个服务器部署✓Docker Docker ComposeCI/CD✓构建和测试容器化应用三、Kubernetes 容器编排平台3.1 定义与核心价值Kubernetes简称 K8s是一个开源的容器编排平台用于自动化部署、扩展和管理容器化应用。核心价值自动化运维自动部署、扩缩容、自愈恢复高可用性故障自动转移服务持续可用弹性伸缩根据负载自动调整资源服务发现内置 DNS 服务容器间自动发现3.2 核心组件控制平面组件组件作用kube-apiserverKubernetes API 服务器集群控制入口etcd分布式键值存储存储集群状态kube-scheduler调度器将 Pod 分配到节点kube-controller-manager控制器管理器维护期望状态节点组件组件作用kubelet节点代理管理容器生命周期kube-proxy网络代理维护网络规则Container Runtime容器运行时Docker、containerd3.3 核心概念概念定义类比Pod最小部署单元包含一个或多个容器应用实例Service定义 Pod 的访问方式ClusterIP、NodePort、LoadBalancer服务入口Deployment声明式管理 Pod 部署支持滚动更新部署模板ReplicaSet确保指定数量的 Pod 副本运行副本控制器Namespace虚拟集群隔离资源项目/环境隔离Volume持久化存储共享存储ConfigMap/Secret配置管理配置文件/密钥3.4 工作流程用户提交 Deployment → API Server → etcd (存储) ↓ Scheduler (调度) → 选择节点 ↓ kubelet (执行) → 创建 Pod → 运行容器 ↓ kube-proxy (网络) → 创建 Service → 暴露服务四、Docker 与 Kubernetes 对比4.1 核心区别维度DockerKubernetes定位容器引擎容器编排平台管理范围单机容器集群容器核心功能构建、运行容器部署、扩缩容、自愈适用场景开发、测试、单节点部署生产环境、多节点部署复杂度简单易用复杂强大4.2 类比理解类比一餐厅Docker → 厨师负责做一道菜 Kubernetes → 餐厅经理协调整个厨房 厨师Docker - 专注于烹饪构建和运行容器 - 擅长单个菜品单个容器 经理Kubernetes - 管理多个厨师多个节点 - 协调订单处理调度 Pod - 确保菜品质量健康检查 - 应对突发情况故障恢复类比二交通系统Docker → 汽车发动机单个容器运行 Kubernetes → 城市交通调度系统集群管理 发动机Docker - 提供动力运行容器 - 单个车辆单个容器 交通调度Kubernetes - 管理多条道路多节点 - 控制车流量负载均衡 - 处理交通事故故障恢复 - 优化路线调度算法4.3 技术关系┌─────────────────────────────────────────────┐ │ Kubernetes (编排层) │ │ Deployment / Service / ReplicaSet / ... │ └────────────────────┬────────────────────────┘ │ 调用 ▼ ┌─────────────────────────────────────────────┐ │ Container Runtime (运行时) │ │ Docker Engine / containerd / CRI-O │ └────────────────────┬────────────────────────┘ │ 创建 ▼ ┌─────────────────────────────────────────────┐ │ 容器实例 │ │ (运行中的应用进程) │ └─────────────────────────────────────────────┘重要说明Kubernetes 1.24 默认使用containerd作为容器运行时Docker Engine 仍可使用但需通过 cri-dockerd 适配containerd 是更轻量、更稳定的容器运行时五、选型决策指南5.1 场景匹配场景推荐方案理由本地开发、测试Docker Docker Compose简单易用快速搭建单个服务器部署Docker Docker Compose轻量无需 K8s 复杂度多服务器部署Kubernetes自动化管理高可用需要自动扩缩容KubernetesHPA/VPA 自动伸缩需要自愈能力Kubernetes自动重启、故障转移CI/CD 流水线Docker标准化构建和测试5.2 迁移路径阶段 1Docker Compose 部署 ↓ 阶段 2Docker Swarm可选过渡 ↓ 阶段 3Kubernetes生产环境六、实战Docker Compose 部署多容器应用6.1 项目结构my-app/ ├── docker-compose.yml ├── web/ │ ├── Dockerfile │ ├── app.py │ └── requirements.txt └── nginx/ └── nginx.conf6.2 docker-compose.ymlversion:3.8services:web:build:./webcontainer_name:my-web-appports:-5000:5000environment:-FLASK_ENVproduction-REDIS_URLredis://redis:6379depends_on:-redis-dbvolumes:-./web:/app-static-files:/app/staticredis:image:redis:7-alpinecontainer_name:my-redisports:-6379:6379volumes:-redis-data:/datadb:image:postgres:15container_name:my-postgresports:-5432:5432environment:-POSTGRES_DBmyapp-POSTGRES_USERadmin-POSTGRES_PASSWORDpasswordvolumes:-postgres-data:/var/lib/postgresql/datanginx:image:nginx:latestcontainer_name:my-nginxports:-80:80volumes:-./nginx/nginx.conf:/etc/nginx/conf.d/default.conf-static-files:/var/www/staticdepends_on:-webvolumes:redis-data:postgres-data:static-files:6.3 启动与验证# 启动服务docker-composeup-d# 查看状态docker-composeps# 查看日志docker-composelogs-fweb# 停止服务docker-composedown# 停止并删除数据卷docker-composedown-v七、实战Kubernetes 入门7.1 启用 KubernetesDocker Desktop打开 Docker Desktop Settings勾选 “Enable Kubernetes”点击 “Apply Restart”7.2 验证安装# 检查 kubectl 版本kubectl version# 查看集群节点kubectl get nodes# 输出NAME STATUS ROLES AGE VERSION# docker-desktop Ready control-plane,master 1d v1.28.2# 查看所有资源kubectl get all7.3 部署应用创建 Deployment# deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:nginx-deploymentlabels:app:nginxspec:replicas:3selector:matchLabels:app:nginxtemplate:metadata:labels:app:nginxspec:containers:-name:nginximage:nginx:latestports:-containerPort:80resources:requests:memory:128Micpu:250mlimits:memory:256Micpu:500m# 创建 Deploymentkubectl apply-fdeployment.yaml# 查看 Deploymentkubectl get deployments# 查看 Podkubectl get pods创建 Service# service.yamlapiVersion:v1kind:Servicemetadata:name:nginx-servicespec:type:NodePortselector:app:nginxports:-protocol:TCPport:80targetPort:80nodePort:30007# 创建 Servicekubectl apply-fservice.yaml# 查看 Servicekubectl get services# 访问服务curlhttp://localhost:300077.4 常用操作# 查看 Pod 日志kubectl logspod-name# 进入 Podkubectlexec-itpod-name--bash# 查看 Pod 详情kubectl describe podpod-name# 扩缩容kubectl scale deployment nginx-deployment--replicas5# 删除资源kubectl delete deployment nginx-deployment kubectl deleteservicenginx-service八、高级话题8.1 容器网络模式对比模式特点适用场景Bridge默认模式容器间可通信单机多容器Host共享宿主机网络高性能网络None无网络连接安全隔离Overlay跨主机网络Swarm/K8s 集群8.2 持久化存储方案方案特点适用场景Docker VolumeDocker 管理的数据卷单机部署Host Path挂载宿主机目录开发环境NFS网络文件系统多节点共享PersistentVolumeK8s 持久化卷K8s 集群8.3 安全最佳实践1. 使用非 root 用户运行容器 2. 限制容器资源CPU、内存 3. 定期更新镜像 4. 使用私有镜像仓库 5. 配置网络策略隔离 6. 扫描镜像漏洞九、总结核心要点Docker 是基础容器引擎负责构建和运行单个容器Kubernetes 是进阶容器编排平台管理大规模集群选型看场景开发测试用 Docker生产环境用 K8s技术演进Docker → Docker Compose → Kubernetes学习路径Docker 基础 → Docker Compose → Kubernetes 基础 → K8s 高级特性 → 生产环境部署 → 运维监控下一步建议实践 Docker Compose 部署完整应用Web 数据库 缓存在 Docker Desktop 中启用 Kubernetes体验集群管理学习 Helm 包管理工具了解 K8s 网络模型和持久化存储