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

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

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

bash 复制代码
# 拉取镜像
docker pull nginx

# 运行容器
docker run -d -p 80:80 nginx

# 查看运行中的容器
docker ps

# 停止容器
docker stop <容器ID>

# 删除容器
docker rm <容器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 远洋舰队

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

一句话总结

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 示例,欢迎留言告诉我~

相关推荐
java_cj1 小时前
阅读 k8s 源码的准备工作
云原生·容器·kubernetes
开发者联盟league2 小时前
使用Jenkins整合Sonarqube/Gitlab/Harbor/Kubernetes实现CICD
kubernetes·gitlab·jenkins
枫叶林FYL2 小时前
项目十一:Saga模式分布式旅行预订系统 核心服务实现与Saga编排器
数据库·python·docker
取名好樊2 小时前
Windows Docker PostgreSQL 端口绑定失败问题记录
windows·docker·postgresql
ai产品老杨2 小时前
深度解析:基于Docker构建的安防视频AI平台——如何通过GB28181/RTSP协议栈统一接入与全套源码交付,破局异构边缘计算芯片内卷
人工智能·docker·音视频
AI服务老曹2 小时前
基于Docker与边缘计算的企业级AI视频平台架构演进:GB28181/RTSP多协议接入与源码交付深度解析
人工智能·docker·边缘计算
蜀道山老天师2 小时前
OpenClaw 从零部署 + 飞书机器人完整接入(实操篇)
运维·docker·容器·飞书
robinLi09132 小时前
docker mac 下载不同系统架构镜像
macos·docker·容器
IT利刃出鞘2 小时前
Docker Compose--安装harbor--方法/实例
docker