Docker Desktop 入门 Kubernetes:用 YAML 文件部署 Nginx 服务 一、为什么用 Docker Desktop 学 Kubernetes对刚接触 Kubernetes简称 K8s的开发者来说搭建一套完整集群往往是最劝退的一步。Docker Desktop 从某个版本起内置了单节点 Kubernetes开箱即用非常适合在本地完成「写 YAML → 部署 → 验证 → 清理」的完整闭环。你不需要额外安装 Minikube、k3s 或云厂商集群只要 Windows/macOS 上装了 Docker Desktop再配合kubectl命令行工具就可以在本机感受真实的 K8s 工作流。二、准备工作启用 Docker Desktop 的 Kubernetes你的 Docker Desktop 已安装好但 K8s 还没启用先把它打开。打开 Docker Desktop点击右上角齿轮进入Settings。左侧选择Kubernetes。勾选Enable Kubernetes然后点击Apply Restart。等待 Docker Desktop 重启左下角 Kubernetes 图标变为绿色即表示已就绪。如果一直卡在启动中可以检查是否开启了代理、磁盘剩余空间是否充足必要时在 Kubernetes 设置里选择Reset Kubernetes Cluster重来。在终端里确认集群和节点状态kubectl cluster-info kubectl get nodes看到docker-desktop节点处于Ready状态说明本机集群已经可用。三、理解你要用的 YAML 配置Deployment管理 Nginx 副本apiVersion:apps/v1kind:Deploymentmetadata:name:nginx-deploymentlabels:app:nginxspec:replicas:2selector:matchLabels:app:nginxtemplate:metadata:labels:app:nginxspec:containers:-name:nginximage:nginx:latestports:-containerPort:80关键字段含义apiVersion: apps/v1Deployment 属于apps/v1这个 API 组。kind: Deployment资源类型负责维护 Pod 副本数量。replicas: 2期望运行 2 个 Nginx Pod。selector.matchLabelsDeployment 通过app: nginx找到它要管理的 Pod。template.metadata.labelsPod 的标签必须和matchLabels一致。containers容器定义这里使用nginx:latest镜像并暴露 80 端口。Service对外暴露服务apiVersion:v1kind:Servicemetadata:name:nginx-servicespec:type:LoadBalancerselector:app:nginxports:-port:80targetPort:80关键字段含义type: LoadBalancer在 Docker Desktop 中会映射到本机端口方便浏览器访问。selector.app: nginxService 会把流量转发给带app: nginx标签的 Pod。port: 80Service 对外暴露的端口。targetPort: 80Pod 内容器监听的端口。可以把两个文件成nginx.yaml两个文件中间用—隔开四、用 YAML 文件部署把上面整理好的内容保存为nginx.yaml然后在终端进入文件所在目录执行kubectl apply-fnginx.yaml输出类似deployment.apps/nginx-deployment created service/nginx-service created接着查看资源状态kubectl get deployments kubectl get pods-owide kubectl get services当两个 Pod 都进入Running状态后就可以访问服务了NAME READY STATUS RESTARTS AGE nginx-deployment-5bf87f5f59-xxxxx 1/1 Running 0 30s nginx-deployment-5bf87f5f59-yyyyy 1/1 Running 0 30skubectl get services会显示nginx-service的EXTERNAL-IP为localhost在浏览器打开http://localhost就能看到 Nginx 欢迎页。五、体验 K8s 调度删掉一个 Pod 试试Kubernetes 的核心能力是「声明式管理 自动恢复」。你可以做一个小实验手动删除一个 Pod看 Deployment 会不会把它拉回来。kubectl delete pod其中一个 Pod 的名字kubectl get pods-owide几秒后你会看到一个新的 Pod 被自动创建副本数重新回到 2。这就是 Deployment 控制器在起作用也是 K8s 和普通docker run最大的区别之一。六、修改 YAML 再升级体验滚动更新把nginx.yaml里的镜像改成nginx:1.25-alpine然后再次执行kubectl apply-fnginx.yaml kubectl rollout status deployment/nginx-deployment你会看到 Pod 被逐个替换服务不中断这就是滚动更新。想回滚也很简单kubectl rollout undo deployment/nginx-deployment七、常用排查命令入门阶段遇到 Pod 起不来按下面顺序排查# 查看 Pod 状态kubectl get pods# 查看 Pod 事件能看到镜像拉取失败、端口冲突等原因kubectl describe podpod-name# 查看容器日志kubectl logspod-namekubectl describe是新手最值得记住的命令大部分启动失败的原因都写在 Events 里。八、清理环境实验完成后删除本次创建的所有资源kubectl delete-fnginx.yaml这会同时删掉 Service 和 Deployment。如果后续不再使用 K8s也可以在 Docker Desktop 设置里取消勾选Enable Kubernetes释放本机资源。九、小结用 Docker Desktop 入门 K8s最舒服的地方在于你不需要关心集群搭建可以把精力全放在 YAML 和kubectl上。从 Deployment Service 这一个最小组合开始你已经体验了声明式部署副本自动恢复Service 负载暴露滚动更新与回滚建议下一步把kubectl get、kubectl describe、kubectl logs这三个命令用熟再逐步接触 ConfigMap、Ingress 和多容器 Pod就能顺利进入 K8s 的正式学习轨道。