news 2026/6/11 7:22:28

Docker 与 Kubernetes:从“集装箱”到“远洋舰队”

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker 与 Kubernetes:从“集装箱”到“远洋舰队”

Docker 与 Kubernetes:从“集装箱”到“远洋舰队”

  • Docker 与 Kubernetes:从“集装箱”到“远洋舰队”
    • 1. Docker 是什么?——把应用装进“集装箱”
      • 1.1 Docker 解决了什么问题?
      • 1.2 核心概念(小白版)
      • 1.3 Docker 的常用命令(看一眼就行)
    • 2. Docker 火了之后,新的问题来了
    • 3. Kubernetes 是什么?——容器的“总司令”
      • 3.1 Kubernetes 能做什么?
      • 3.2 核心概念(小白版)
    • 4. Docker 和 K8s 的关系:集装箱 vs 远洋舰队
    • 5. 它们是不是非此即彼?
    • 6. 小白常见疑问
      • Q1:我能不能不学 Docker 直接学 K8s?
      • Q2:Docker 和虚拟机有什么区别?
      • Q3:K8s 只能管理 Docker 吗?
      • Q4:学习顺序是什么?
    • 7. 总结

Docker 与 Kubernetes:从“集装箱”到“远洋舰队”

你有没有遇到过这种情况:
在电脑上跑得好好的程序,换到服务器上就报错;
开发说“我这边没问题啊”,运维说“环境不一样啊”。

Docker就是来解决这个问题的。而Kubernetes是 Docker 流行之后,用来管理成千上万个 Docker 容器的“总指挥官”。


1. Docker 是什么?——把应用装进“集装箱”

想象一下,你是一家工厂的老板,要出口一批玩具。

  • 传统做法:把玩具直接堆在船上。但每个国家的港口要求不同:有的要贴标签,有的要防潮,有的要单独清关。到了港口,还要重新打包、搬运——非常折腾。

  • 集装箱的做法:把玩具提前装进标准化的集装箱里。箱子里自带标签、防潮、固定措施。无论运到哪个国家,只要把整个箱子吊到船上就行,不用重新打包。

Docker 就是软件世界的“集装箱”

1.1 Docker 解决了什么问题?

传统痛点Docker 的解法
“在我电脑上能跑啊”把环境和代码一起打包,保证到处运行一致。
安装配置依赖很麻烦(Java、Python、数据库驱动)镜像里什么都装好了,一条命令就启动。
新服务器部署要配半天拉取镜像,启动容器,几秒钟搞定。
多个应用在同一台服务器上冲突(比如一个要 Python2,一个要 Python3)每个容器隔离,互不影响。

1.2 核心概念(小白版)

  • 镜像(Image):一个只读的“模板”,就像集装箱的设计图纸。里面装好了操作系统、代码、运行环境。
    (类比:一个已经装好所有东西的“种子文件”)

  • 容器(Container):镜像的一个运行实例。你可以启动、停止、删除它。
    (类比:根据图纸造出来的一个实体集装箱)

  • 仓库(Repository):存放镜像的地方。Docker Hub 就是官方仓库,你可以从上面拉取别人做好的镜像(比如nginxmysqlpython)。
    (类比:集装箱码头,放着成千上万种集装箱)

1.3 Docker 的常用命令(看一眼就行)

# 拉取镜像dockerpull nginx# 运行容器dockerrun-d-p80:80 nginx# 查看运行中的容器dockerps# 停止容器dockerstop<容器ID># 删除容器dockerrm<容器ID>

你不需要记住这些命令,只需要知道:Docker 把环境和代码打包成一个镜像,然后在任何有 Docker 的地方,一条命令就能跑起来


2. Docker 火了之后,新的问题来了

假设你的业务成功了,用户量暴涨。一个 Docker 容器不够了,你需要启动100 个甚至1000 个容器。

这时候问题就来了:

  • 这 1000 个容器应该放在哪些服务器上?
  • 某个容器挂了,谁来重启它?
  • 用户请求来了,怎么平均分给这 1000 个容器?
  • 发布新版本,怎么做到不停机更新(一个一个替换)?
  • 容器越来越多,怎么让它们互相发现、通信?

这些问题的答案:Kubernetes(简称 K8s)


3. Kubernetes 是什么?——容器的“总司令”

Kubernetes 是一个开源的容器编排平台,它可以自动化地管理成百上千个 Docker 容器。

名字由来:Kubernetes 是希腊语“舵手”的意思,缩写 K8s(K 和 s 之间有 8 个字母)。

3.1 Kubernetes 能做什么?

能力说明
自动部署你告诉它“我要跑 10 个 nginx”,它负责去找空闲机器创建。
弹性伸缩流量大了,一键增加容器数量;流量小了,自动缩容。
自动恢复某个容器挂了,K8s 自动重启一个新的。
负载均衡流量自动分散到所有容器上。
滚动更新更新版本时,一次只替换一个容器,全程不中断服务。
服务发现容器之间不用记 IP,直接通过服务名互相访问。

3.2 核心概念(小白版)

  • Pod:K8s 里最小的部署单元。一个 Pod 里通常只有一个容器(也可以有多个)。
    (类比:一个 Pod 就是一个“工人”)

  • Deployment:管理 Pod 的“经理”,负责保证始终有指定数量的 Pod 在运行,支持滚动更新、回滚。
    (类比:班组长,盯着工人不要少)

  • Service:给一组 Pod 提供一个固定的访问入口,无论 Pod 怎么重启、IP 怎么变,Service 的地址不变。
    (类比:餐厅的固定电话,谁接听不重要,打这个电话总能找到人)

  • Ingress:七层路由网关,把外部流量(比如https://api.example.com)导到不同的 Service。
    (类比:公司总机,你拨分机号能找到不同部门)

  • Node:K8s 集群里的一台服务器(物理机或虚拟机)。

  • Namespace:虚拟隔离空间,可以把不同环境(开发、测试、生产)隔开。


4. Docker 和 K8s 的关系:集装箱 vs 远洋舰队

维度DockerKubernetes
角色集装箱远洋舰队司令
职责打包、运行单个容器调度、管理成千上万个容器
处理能力单机跨成百上千台机器
自动恢复不支持(容器挂了就挂了)支持(自动重启)
弹性伸缩手动自动
服务发现需要额外组件内置
滚动更新不支持支持

一句话总结
Docker 负责“把应用装进集装箱,并在一台机器上跑起来”。
Kubernetes 负责“管理一个港口里成千上万个集装箱的调度、装卸、维护”。


5. 它们是不是非此即彼?

不是。它们是互补的、配合使用的。

  • 你可以只用 Docker:如果你只有一两台服务器,跑几个容器,手动管理就够了。
  • 你也可以用 Kubernetes 管理 Docker 容器:K8s 默认使用 Docker 作为容器运行时(也支持 containerd、CRI-O 等)。

在实际生产环境中,典型的使用方式是:

  1. 开发人员用 Docker 打包应用(制作镜像)。
  2. 镜像上传到仓库(如 Docker Hub)。
  3. 运维人员编写 Kubernetes 的 YAML 文件,描述需要多少个 Pod、用什么镜像、暴露什么端口。
  4. K8s 自动拉取镜像,并在集群中启动容器,并持续维护状态。

类比
Docker = 集装箱制造公司;
K8s = 全球航运物流系统(调度每一艘船、每一个港口、每一个集装箱)。


6. 小白常见疑问

Q1:我能不能不学 Docker 直接学 K8s?

:不建议。K8s 管理的就是容器,你得先理解容器是什么、镜像是什么,否则 K8s 的概念(Pod、Deployment)会很抽象。

Q2:Docker 和虚拟机有什么区别?

虚拟机虚拟的是整个操作系统(包括内核),需要 GB 级内存;
Docker 共享宿主机的内核,只隔离进程,启动快(毫秒级),占用 MB 级内存。

Q3:K8s 只能管理 Docker 吗?

不是。K8s 通过 CRI(容器运行时接口)可以对接多种运行时,比如 containerd、CRI-O。Docker 只是其中一种。

Q4:学习顺序是什么?

  1. 先学 Docker:安装、拉取镜像、跑容器、制作自己的镜像(写 Dockerfile)。
  2. 再学 K8s:用 Minikube 或 Docker Desktop 自带的 K8s 跑一个 Deployment + Service。
  3. 深入:Ingress、ConfigMap、持久化存储、Helm。

7. 总结

  • Docker:把应用及其环境打包成容器,实现“一次构建,到处运行”。解决环境不一致、部署繁琐的问题。
  • Kubernetes:当容器数量成百上千时,自动编排它们,解决调度、伸缩、恢复、服务发现等问题。
  • 关系:Docker 是“集装箱”,K8s 是“远洋舰队”。它们不是对手,而是黄金搭档。

最后送你一句话:

Docker 让你把应用装进盒子,K8s 让你在几百台服务器上轻松倒腾这些盒子。
从一台电脑到万台集群,K8s 就是那把打开云原生大门的钥匙。

希望这篇博客能帮你理清这两个 buzzword 的关系。如果你想了解如何写第一个 Dockerfile,或者在本地跑一个 K8s 示例,欢迎留言告诉我~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/11 7:20:42

做工业控制和物联网网关的朋友最近经常问:屏幕刷新卡顿、AI算力不够、PCB面积又受限,这该怎么选型?

今天简单分享一下我们项目里刚量产的一款核心模组——ESP32-S3-WROOM-1-N8R8。这玩意儿最近挺火&#xff0c;确实是解决了不少痛点。&#x1f9e0; 核心规格与硬件参数这颗模组用的是乐鑫ESP32-S3系列芯片&#xff0c;虽然长得和经典款差不多&#xff0c;但内里完全不一样。核心…

作者头像 李华
网站建设 2026/6/11 7:20:42

MySQL 大数据量场景下的表结构与索引设计指南

MySQL 大数据量场景下的表结构与索引设计指南 一、核心概念 1.1 InnoDB 聚簇索引&#xff08;Clustered Index&#xff09; InnoDB 存储引擎中&#xff0c;表数据按照主键的顺序物理存储在磁盘上&#xff0c;这种组织方式叫聚簇索引。 关键点&#xff1a; 每张 InnoDB 表有且只…

作者头像 李华
网站建设 2026/6/11 7:19:52

Open UI5 源代码解析之1442:TableDelegate.js

源代码仓库: https://github.com/SAP/openui5 源代码位置:src\sap.ui.mdc\src\sap\ui\mdc\TableDelegate.js TableDelegate.js 详细分析与项目作用说明 文件定位与核心价值 TableDelegate.js 位于 sap.ui.mdc 这一层,是 sap.ui.mdc.Table 的核心委托实现之一。这个文件…

作者头像 李华
网站建设 2026/6/11 7:14:10

HBase Python API实战:用HappyBase批量处理学生成绩数据(附完整代码)

HBase Python实战&#xff1a;用HappyBase构建学生成绩分析系统在当今数据驱动的教育领域&#xff0c;如何高效管理海量学生成绩数据成为技术团队的核心挑战。传统关系型数据库在面对高并发写入和灵活查询时往往力不从心&#xff0c;这正是分布式NoSQL数据库HBase的用武之地。本…

作者头像 李华
网站建设 2026/6/11 7:13:03

UniApp插件实战:封装一个获取蓝牙称重数据的原生Module完整流程

UniApp蓝牙称重插件开发&#xff1a;从SDK对接到数据安全传输的全链路实践在智能硬件与移动应用深度融合的今天&#xff0c;蓝牙称重设备作为仓储物流、零售结算等场景的核心数据入口&#xff0c;其与App的高效对接直接影响业务闭环的效率。本文将完整呈现一个基于UniApp的蓝牙…

作者头像 李华
网站建设 2026/6/11 7:11:52

5分钟搭建专业级语音转字幕平台:Whisper-WebUI完整指南

5分钟搭建专业级语音转字幕平台&#xff1a;Whisper-WebUI完整指南 【免费下载链接】Whisper-WebUI A Web UI for easy subtitle using whisper model. 项目地址: https://gitcode.com/gh_mirrors/wh/Whisper-WebUI 还在为视频字幕制作烦恼吗&#xff1f;Whisper-WebUI是…

作者头像 李华