文章目录前言一、Docker 在 K8s 集群中到底扮演什么角色1.1 Docker 的核心定位应用打包与运行工具1.2 通俗角色比喻永久看懂二、K8s 为什么不替代 Docker破除最大误区2.1 所谓“K8s 弃用 Docker”是什么意思2.2 K8s 永远替代不了 Docker 的核心原因2.3 当下企业真实技术现状三、企业黄金联动链路Docker Harbor K8s完整闭环3.1 三大组件分工标准企业定义1. Docker负责【打包、制作、本地运行】2. Harbor负责【统一存储、版本管理、权限管控】3. K8s负责【调度部署、运维管控、高可用】3.2 完整闭环链路企业标准上线流程四、Docker Compose 与 K8s 场景区分开发/生产严格分离4.1 Docker Compose本地开发、单机测试专用4.2 K8s企业生产、线上环境专用4.3 企业标准分工记住就是工作经验五、企业真实项目上线全流程总览完整复盘步骤1代码开发与本地调试步骤2Docker 打包标准镜像步骤3推送私有 Harbor 仓库步骤4K8s 集群拉取镜像部署步骤5服务暴露与线上运维六、本篇核心总结面试工作万能答案前言学到这里很多人心里会有一个巨大的疑问既然 K8s 这么强为什么还要用 DockerK8s 能不能彻底取代 Docker网上90%的教程都没讲明白Docker 和 K8s根本不是竞争关系而是上下流水线的协作关系。大部分开发者只会单独敲 Docker 命令、单独敲 K8s 命令但完全不懂项目从代码 → 镜像 → 上线运行 → 运维管控 的完整企业闭环。本篇为系列核心认知升华篇彻底打通 Docker、Harbor、K8s 三者的企业联动逻辑区分 Compose 与 K8s 的真实使用场景还原互联网公司标准上线流程补齐容器技术栈的最后一块认知拼图。一、Docker 在 K8s 集群中到底扮演什么角色先记一句终极结论K8s 不生产容器K8s 只负责管理容器容器由 Docker/Containerd 负责创建与运行。1.1 Docker 的核心定位应用打包与运行工具K8s 是一套编排调度系统它的核心能力是调度、部署、扩容、自愈、回滚但它不会打包代码、不会创建容器、也不负责运行程序。而 Docker 刚好补齐了这个短板在整套技术栈中只负责两件核心事本地打包将 Java/Go/Vue 代码、依赖、环境统一打包成标准镜像运行容器在服务器上根据镜像创建容器、启动程序1.2 通俗角色比喻永久看懂Docker工厂工人负责把原材料代码打包成成品镜像并启动运行容器K8s项目经理不干活、只管事负责安排运行数量、故障重启、流量分发、版本更新核心认知没有 DockerK8s 就是空架子没有任何程序可以运行没有 K8sDocker 只能单机跑无法上线生产。二、K8s 为什么不替代 Docker破除最大误区很多新手被网上谣言误导“K8s 淘汰 Docker、Docker 没用了”。这句话只对了一半真实企业现状彻底拆解2.1 所谓“K8s 弃用 Docker”是什么意思新版 K8s 确实移除了对 Docker 运行时的直接支持转而使用 Containerd。很多人误解为Docker 被淘汰、不用学了。真实真相K8s 换掉的是「Docker 运行时」但 100% 保留了 Docker 镜像标准。企业现在依然全部用 Docker 打包镜像只是集群运行时用更轻量的 Containerd。2.2 K8s 永远替代不了 Docker 的核心原因K8s 天生不具备代码打包能力它无法完成读取代码、安装依赖、编译项目、封装环境。只要企业还在用容器化部署打包镜像这件事永远只能 Docker 做。2.3 当下企业真实技术现状开发阶段全员使用 Docker 打包、本地调试仓库阶段Harbor 存储 Docker 标准镜像集群运行阶段Containerd 运行容器K8s 管理容器总结一句话Docker 负责「造镜像」K8s 负责「管容器」分工明确无法替代。三、企业黄金联动链路Docker Harbor K8s完整闭环企业90%的开发者只会单独使用某一个工具却不懂三者联动流水线。本节给出互联网公司标准上线流水线记住这套链路就掌握了容器化部署的核心精髓。3.1 三大组件分工标准企业定义1. Docker负责【打包、制作、本地运行】属于开发/构建层。所有项目上线第一步必须通过 Docker编写 Dockerfile编译代码、安装依赖构建统一镜像本地测试运行核心价值统一环境、统一版本、一次构建、到处运行。极简实操示例Docker 打包核心命令 Dockerfile\1. 基础极简 Dockerfile所有项目通用模板# 基础镜像 FROM nginx:alpine # 拷贝本地代码到容器目录 COPY ./index.html /usr/share/nginx/html/ # 容器启动命令 CMD [nginx,-g,daemon off;]\2. 打包、本地测试核心命令# 构建镜像自定义镜像名和版本dockerbuild-tnginx-demo:v1.0.# 本地运行容器测试dockerrun-d-p8080:80 nginx-demo:v1.02. Harbor负责【统一存储、版本管理、权限管控】属于镜像仓库层企业私有镜像仓库绝对不用公共DockerHub。核心作用存储开发打包好的镜像区分测试版、生产版、历史版本团队权限管理、镜像安全扫描供 K8s 集群统一拉取镜像核心价值统一制品仓库保证所有服务器拉取的镜像完全一致。极简实操示例Harbor 镜像推送/拉取命令# 1. 登录企业私有Harbor仓库dockerlogin192.168.1.100:8080# 2. 给本地镜像打标签规范仓库路径版本dockertag nginx-demo:v1.0192.168.1.100:8080/dev/nginx-demo:v1.0# 3. 推送镜像到Harbor仓库dockerpush192.168.1.100:8080/dev/nginx-demo:v1.0# 4. K8s节点拉取镜像集群部署前置操作dockerpull192.168.1.100:8080/dev/nginx-demo:v1.03. K8s负责【调度部署、运维管控、高可用】属于运行编排层不参与打包只负责上线后的一切管控从 Harbor 拉取镜像创建、调度、分配容器节点实现故障自愈、动态扩缩容滚动更新、版本回滚、负载均衡资源限制、监控运维极简实操示例K8s 部署极简YAML 运维命令极简部署配置demo-deploy.yaml直接关联Harbor镜像apiVersion:apps/v1kind:Deploymentmetadata:name:nginx-demospec:replicas:2selector:matchLabels:app:nginxtemplate:metadata:labels:app:nginxspec:containers:-name:nginx# 直接拉取Harbor私有镜像image:192.168.1.100:8080/dev/nginx-demo:v1.0ports:-containerPort:80---# 极简Service暴露服务apiVersion:v1kind:Servicemetadata:name:nginx-demo-svcspec:selector:app:nginxtype:NodePortports:-port:80targetPort:80nodePort:30080K8s 核心部署运维命令# 应用YAML创建/更新服务kubectl apply-fdemo-deploy.yaml# 查看部署、Pod、服务状态kubectl get deploy kubectl get pods kubectl get svc# 滚动更新版本替换Harbor新版本镜像kubectlsetimage deployment nginx-demonginx192.168.1.100:8080/dev/nginx-demo:v2.0# 版本回滚kubectl rollout undo deployment nginx-demo3.2 完整闭环链路企业标准上线流程开发代码 → Docker 构建镜像 → 推送 Harbor 仓库 → K8s 拉取镜像部署 → 线上稳定运行这就是所有互联网公司通用的CICD 容器上线流水线。四、Docker Compose 与 K8s 场景区分开发/生产严格分离很多新手最大的误区学了 Compose 不知道什么时候用学了 K8s 不知道怎么配合。二者不存在谁替代谁是不同环境、不同阶段的专属工具。4.1 Docker Compose本地开发、单机测试专用定位本地多容器编排工具适用场景程序员本地电脑开发调试单机快速启动多个依赖服务MySQL、Redis、后端服务小型本地测试环境绝对不用于生产的原因不支持集群、不支持多节点调度没有自愈、没有扩容、没有滚动更新挂了就崩完全无法保证高可用极简实操示例Docker Compose 本地开发配置本地开发专用docker-compose.yml一键启动多服务version:3.8services:nginx:image:nginx-demo:v1.0ports:-8080:80redis:image:redis:alpineports:-6379:6379本地启动/停止命令# 后台启动所有服务docker-composeup-d# 停止并销毁服务docker-composedown绝对不用于生产的原因不支持集群、不支持多节点调度没有自愈、没有扩容、没有滚动更新挂了就崩完全无法保证高可用4.2 K8s企业生产、线上环境专用定位分布式集群容器编排平台适用场景公司线上生产环境微服务集群、高并发、高可用项目需要扩容、自愈、灰度更新、故障回滚的业务缺点太重、复杂、不适合本地开发调试。4.3 企业标准分工记住就是工作经验本地开发Docker Docker Compose快速、简单、高效线上生产Docker镜像 Harbor仓库 K8s集群稳定、高可用、可运维五、企业真实项目上线全流程总览完整复盘结合本系列所有知识点完整复盘一套零基础→上线的企业标准流程打通所有技术壁垒步骤1代码开发与本地调试开发者写完项目代码使用Docker Compose本地启动整套服务调试接口、功能、依赖保证本地可正常运行。步骤2Docker 打包标准镜像编写 Dockerfile通过docker build构建项目镜像统一运行环境、依赖版本解决“本地能跑、线上报错”问题。步骤3推送私有 Harbor 仓库将打好的镜像打上版本标签推送至企业内部 Harbor 私有仓库统一存储、版本归档禁止使用公共镜像仓库。步骤4K8s 集群拉取镜像部署编写 K8s 标准 YAML 文件DeploymentServicePV/PVC通过kubectl apply部署服务K8s 调度节点、创建 Pod自动拉取 Harbor 镜像启动容器挂载持久化存储保证数据不丢步骤5服务暴露与线上运维通过 Service 实现内网调用/外网访问依托 K8s 能力实现故障自动自愈业务动态扩缩容版本滚动更新、一键回滚负载均衡、高可用运行六、本篇核心总结面试工作万能答案1、Docker 负责造镜像、跑容器是容器的生产工具K8s 不管打包、只负责管理是容器的运维编排工具二者各司其职、互不冲突。2、K8s 弃用 Docker 运行时不代表淘汰 Docker企业依然 100% 使用 Docker 完成镜像打包Docker 是容器化的基础核心。3、企业标准黄金链路Docker构建 → Harbor存镜像 → K8s管容器是所有容器化项目上线的核心闭环。4、环境严格区分Compose用于本地开发调试K8s用于线上生产部署生产绝对不用Compose本地开发不用K8s。5、整套联动方案解决了项目环境不一致、版本混乱、线上不稳定、运维复杂等核心问题是现代云原生开发的标准范式。