一个实验搞懂 Docker 和 K8s 怎么配合
️ 我的项目目录12 个关键文件text/root/message-board/ │ ├── backend/ ← 【Docker 相关】打包后端用的 │ ├── Dockerfile ← 告诉 Docker 怎么打包后端 │ ├── package.json ← 后端依赖列表供 Docker 构建时用 │ └── server.js ← 后端代码被 Docker 打包进镜像 │ ├── frontend/ ← 【Docker 相关】打包前端用的 │ ├── Dockerfile ← 告诉 Docker 怎么打包前端 │ ├── index.html ← 前端页面被 Docker 打包进镜像 │ ├── app.js ← 前端逻辑被 Docker 打包进镜像 │ └── config.js ← 前端配置被 Docker 打包进镜像但 K8s 会覆盖它 │ └── k8s/ ← 【K8s 相关】告诉 K8s 怎么部署 ├── namespace.yaml ← 告诉 K8s创建一个叫 message-board 的文件夹 ├── api-deployment.yaml ← 告诉 K8s后端容器怎么跑 ├── api-service.yaml ← 告诉 K8s后端端口怎么对外暴露 ├── frontend-configmap.yaml ← 告诉 K8s前端配置内容是什么 ├── frontend-deployment.yaml ← 告诉 K8s前端容器怎么跑 └── frontend-service.yaml ← 告诉 K8s前端端口怎么对外暴露一、Docker 环节哪些文件参与了怎么参与的你执行的命令bashdocker build -t message-api:v1 ./backend docker build -t message-frontend:v1 ./frontend第一个命令docker build -t message-api:v1 ./backend文件在这个命令中扮演的角色backend/Dockerfile主文件。Docker 读取它按里面的步骤一步步执行backend/package.json被 Dockerfile 里的COPY package.json ./复制进镜像然后执行npm install装依赖backend/server.js被 Dockerfile 里的COPY server.js ./复制进镜像成为容器的运行代码Dockerfile 怎么说的dockerfileFROM node:20-alpine # 基础环境装好 Node.js 的 Linux COPY package.json ./ # 把依赖列表复制进去 RUN npm install # 在镜像里安装依赖 COPY server.js ./ # 把代码复制进去 CMD [npm, start] # 容器启动时执行 node server.js最终产出message-api:v1镜像。这个镜像 Node.js 环境 你的代码 依赖。第二个命令docker build -t message-frontend:v1 ./frontend文件在这个命令中扮演的角色frontend/Dockerfile主文件。Docker 读取它按里面的步骤执行frontend/index.html被复制进镜像成为 Nginx 提供的页面frontend/app.js被复制进镜像页面加载后执行frontend/config.js被复制进镜像但 K8s 部署时会用 ConfigMap 覆盖它Dockerfile 怎么说的dockerfileFROM nginx:1.25-alpine # 基础环境装好 Nginx 的 Linux COPY index.html /usr/share/nginx/html/ # 复制页面 COPY app.js /usr/share/nginx/html/ # 复制 JS COPY config.js /usr/share/nginx/html/ # 复制配置最终产出message-frontend:v1镜像。这个镜像 Nginx 你的前端文件。Docker 环节总结你的文件被谁用了用来干什么backend/DockerfileDocker 读取指导构建后端镜像backend/package.jsonDocker 构建时复制进去在镜像里装依赖backend/server.jsDocker 构建时复制进去成为容器的运行代码frontend/DockerfileDocker 读取指导构建前端镜像frontend/index.htmlDocker 构建时复制进去成为 Nginx 的页面frontend/app.jsDocker 构建时复制进去成为页面逻辑frontend/config.jsDocker 构建时复制进去作为默认配置后续被 K8s ConfigMap 覆盖二、K8s 环节哪些文件参与了怎么参与的你执行的命令bashkubectl apply -f k8s/namespace.yaml kubectl apply -f k8s/api-deployment.yaml kubectl apply -f k8s/api-service.yaml kubectl apply -f k8s/frontend-configmap.yaml kubectl apply -f k8s/frontend-deployment.yaml kubectl apply -f k8s/frontend-service.yaml逐一拆解每个 YAML 文件的作用①k8s/namespace.yamlyamlapiVersion: v1 kind: Namespace metadata: name: message-board作用告诉 K8s 创建一个叫message-board的“文件夹”后面所有资源都放里面。和 Docker/K8s 的关系纯 K8s 概念。Docker 不参与。②k8s/api-deployment.yamlyamlapiVersion: apps/v1 kind: Deployment metadata: name: message-api namespace: message-board spec: replicas: 1 template: spec: containers: - name: message-api image: message-api:v1 # ← 关键用的就是 Docker 构建的镜像 imagePullPolicy: IfNotPresent ports: - containerPort: 3000作用告诉 K8s——“我要运行 1 个容器用message-api:v1这个镜像Docker 刚打好的它监听 3000 端口”。和 Docker 的关系image: message-api:v1直接引用 Docker 构建的镜像。③k8s/api-service.yamlyamlapiVersion: v1 kind: Service metadata: name: message-api namespace: message-board spec: type: NodePort selector: app: message-api ports: - port: 3000 targetPort: 3000 nodePort: 30787作用告诉 K8s——“把后端 Pod 的 3000 端口映射到集群的 30787 端口让外部能访问”。和 Docker 的关系引用的是 Pod容器通过selector: app: message-api找到 Deployment 创建的容器。④k8s/frontend-configmap.yamlyamlapiVersion: v1 kind: ConfigMap metadata: name: frontend-config namespace: message-board data: config.js: | window.APP_CONFIG { APP_TITLE: K8s班级留言板, API_BASE_URL: http://192.168.116.168:30787 };作用告诉 K8s——“这里有一份前端配置文件内容如上”。和 Docker 的关系这个文件的内容会覆盖Docker 构建时打包进去的config.js。这就是“配置与镜像分离”。⑤k8s/frontend-deployment.yamlyamlapiVersion: apps/v1 kind: Deployment metadata: name: message-frontend namespace: message-board spec: replicas: 1 template: spec: containers: - name: message-frontend image: message-frontend:v1 # ← 关键用的就是 Docker 构建的镜像 ports: - containerPort: 80 volumeMounts: - name: frontend-config mountPath: /usr/share/nginx/html/config.js subPath: config.js # ← 用 ConfigMap 覆盖镜像里的 config.js volumes: - name: frontend-config configMap: name: frontend-config作用告诉 K8s——“运行 1 个前端容器用message-frontend:v1镜像”同时告诉 K8s——“把 ConfigMap 里的配置挂进去覆盖镜像里原来的 config.js”和 Docker 的关系image: message-frontend:v1引用 Docker 构建的镜像volumeMounts用 ConfigMap 覆盖镜像里的文件⑥k8s/frontend-service.yamlyamlapiVersion: v1 kind: Service metadata: name: message-frontend namespace: message-board spec: type: NodePort selector: app: message-frontend ports: - port: 80 targetPort: 80 nodePort: 30082作用告诉 K8s——“把前端 Pod 的 80 端口映射到集群的 30082 端口让用户浏览器能访问页面”。和 Docker 的关系引用的是 Pod容器通过selector: app: message-frontend找到 Deployment 创建的容器。三、一张图每个文件对应到 Docker/K8s 的哪个环节text┌─────────────────────────────────────────────────────────────────────┐ │ 【Docker 环节】 │ ├─────────────────────────────────────────────────────────────────────┤ │ 输入文件 → 输出 │ │ ├── backend/Dockerfile → │ │ ├── backend/package.json → message-api:v1 镜像 │ │ └── backend/server.js → │ │ │ │ ├── frontend/Dockerfile → │ │ ├── frontend/index.html → message-frontend:v1 镜像 │ │ ├── frontend/app.js → │ │ └── frontend/config.js → 默认配置会被覆盖 │ └─────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ 【K8s 环节】 │ ├─────────────────────────────────────────────────────────────────────┤ │ 输入文件 → 作用 │ │ ├── namespace.yaml → 创建“message-board”文件夹 │ │ ├── api-deployment.yaml → 用 message-api:v1 启动后端容器│ │ ├── api-service.yaml → 后端暴露 30787 端口 │ │ ├── frontend-configmap.yaml → 创建前端配置API 地址 │ │ ├── frontend-deployment.yaml → 用 message-frontend:v1 │ │ │ ConfigMap 覆盖 config.js │ │ └── frontend-service.yaml → 前端暴露 30082 端口 │ └─────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ 【最终运行】 │ ├─────────────────────────────────────────────────────────────────────┤ │ 浏览器访问 http://192.168.116.168:30082 → 看到留言板页面 ✅ │ └─────────────────────────────────────────────────────────────────────┘四、我之前疑惑的几个点现在用文件回答你的疑惑用文件回答Docker 怎么用的用backend/Dockerfile和frontend/Dockerfile分别生成message-api:v1和message-frontend:v1两个镜像K8s 怎么用的用k8s/目录下的 6 个 YAML 文件告诉 K8s 怎么运行、暴露、配置这两个镜像配置文件怎么改frontend/config.js本来在镜像里但 K8s 部署时用frontend-configmap.yaml覆盖它镜像和 YAML 什么关系api-deployment.yaml里的image: message-api:v1引用 Docker 构建的镜像frontend-deployment.yaml里的image: message-frontend:v1同理Node2 收到什么Node2 没有收到 YAML 文件收到的是 K8s 的指令“用 message-api:v1 启动容器”五、一句话总结Docker读了backend/Dockerfile和frontend/Dockerfile生成了 2 个镜像message-api:v1、message-frontend:v1。K8s读了k8s/目录下的 6 个 YAML 文件拿着这 2 个镜像在集群里启动容器、暴露端口、注入配置最终让用户通过http://192.168.116.168:30082访问到留言板。

相关新闻

2026年Java岗八股文面试大全(金九银十最新版,含答案解析)

2026年Java岗八股文面试大全(金九银十最新版,含答案解析)

时间过的真快,转眼就要到金九银十了,现在面临年初裁员,公司跳槽,不论是校招还是社招都避免不了各种面试,如何去准备面试就变得格外重要了,相信一些小伙伴也在为自己的技术,薪资,发展…

2026/6/23 11:13:44阅读更多 →
华尔街神秘量化公司 Jane Street:押注 AI 基建与模型,投资回报超 50 倍!

华尔街神秘量化公司 Jane Street:押注 AI 基建与模型,投资回报超 50 倍!

突发:量化公司的 AI 投资之问如果梁文锋掌管的幻方量化,没有去做大模型,而是去做了投资,会有怎样的结果?这是个很有意思的问题。华尔街一家量化交易公司 Jane Street,不仅净收益高达 396 亿美元&#xff0c…

2026/6/23 11:13:44阅读更多 →
IndexTTS2 本地部署与配音实战评测:面向视频创作者的零成本 TTS 方案

IndexTTS2 本地部署与配音实战评测:面向视频创作者的零成本 TTS 方案

我在本地跑通了 IndexTTS2 做配音:它真能省掉那笔长期付费吗? 做短视频这几年,最让我头疼的一直是配音。 偶尔来一两句旁白,打开个在线 TTS 网页,粘贴文本、点生成,确实方便。但一旦你开始日更——小说解…

2026/6/23 11:13:44阅读更多 →
Emacs AI助手:3个理由让你在编辑器中体验大型语言模型的强大能力

Emacs AI助手:3个理由让你在编辑器中体验大型语言模型的强大能力

Emacs AI助手:3个理由让你在编辑器中体验大型语言模型的强大能力 【免费下载链接】ellama Work with local and cloud LLMs from Emacs. 项目地址: https://gitcode.com/gh_mirrors/el/ellama 你是否曾经在编写代码时希望有个助手能即时审查你的逻辑&#xf…

2026/6/23 12:39:14阅读更多 →
高考后大学4年花10万,室内设计培训1个月花几千——算完这笔账我沉默了

高考后大学4年花10万,室内设计培训1个月花几千——算完这笔账我沉默了

家人们,今天咱们来好好唠唠高考后上大学和参加室内设计培训这两条路,算完这其中的账,真的让人忍不住沉默思考。一、成本对比:时间和金钱的投入先说说大学这一块。一般来说,现在上大学,学费一年大概几千到上…

2026/6/23 12:39:14阅读更多 →
中小运营商 5G 核心网建设方案

中小运营商 5G 核心网建设方案

在 5G 规模化应用深化的当下,中小运营商作为通信市场的重要补充力量,正面临数字化转型的关键机遇。与大型运营商不同,中小运营商资金有限、技术团队精简、业务聚焦本地或垂直行业,传统集中式、高成本的 5G 核心网建设模式难以适配…

2026/6/23 12:39:14阅读更多 →
安全组网热门品牌推荐

安全组网热门品牌推荐

企业选 SD-WAN,早年比的是"能不能连上、带宽够不够",现在这个选项题已经前置成了另一道题,网络和安全是不是一张皮、方案能不能落到几百个门店/工厂/仓里、长期养不养得起。尤其对零售连锁、智能制造、物流仓储、多分支互联网这类&…

2026/6/23 12:39:14阅读更多 →
腾讯地图LBS多场景开发技术解析

腾讯地图LBS多场景开发技术解析

腾讯地图LBS多场景开发技术解析 随着数字化转型在各行业的深度推进,位置服务(LBS)已成为支撑出行、物流、文旅、零售等领域业务运转的核心基础设施。腾讯地图作为腾讯产业互联网LBS基础设施的核心载体,凭借其覆盖全国的高鲜度地理…

2026/6/23 12:39:14阅读更多 →
从Prompt到Context再到Harness:AI Agent的进化与未来趋势

从Prompt到Context再到Harness:AI Agent的进化与未来趋势

文章指出AI行业经历了从Prompt Engineering到Context Engineering再到Harness Engineering的三次认知升级。Prompt Engineering关注如何与AI沟通,Context Engineering关注如何给AI提供知识,而Harness Engineering则关注如何让AI真正完成任务。文章强调Ha…

2026/6/23 12:34:14阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/23 7:04:52阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/23 1:55:32阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/23 5:55:37阅读更多 →
2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流…

2026/6/23 0:00:38阅读更多 →
2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

模块一:行业背景——百亿赛道爆发,北京市场的特殊性与选型困局2026年,电子沙盘行业已走过“要不要做”的讨论,进入“找谁做、怎么做”的深水区。据行业研究机构数据,2025年国内电子沙盘市场规模已突破85亿元&#xff0…

2026/6/23 0:00:38阅读更多 →
音视频场景下的 Java 开发者面试:技术与挑战

音视频场景下的 Java 开发者面试:技术与挑战

面试互联网大厂:从音视频场景看 Java 开发者的技能与挑战 在互联网大厂求职的面试中,Java 开发者往往需要面对严苛的技术问题。今天,我们将通过一位名叫燕双非的搞笑程序员与严肃的面试官之间的对话,看看在音视频场景下&#xff0…

2026/6/23 0:00:38阅读更多 →