全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-21 6 分钟 ✍️ juanwangdev

Docker 与 K8s 关系

Docker 和 Kubernetes 是容器生态两大核心,下面梳理其关系。

Docker 镜像与 Pod

镜像关系

YAML
Docker 镜像
    ↓
K8s Pod (1 或多个容器)
    ↓
每个容器 = Docker 镜像的运行实例
Bash
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: app
      image: my-app:v1.0  # Docker 镜像
    - name: sidecar
      image: fluentd:latest  # Docker 镜像

容器运行时演进

历史演进

YAML
Docker Engine (2013-2016)
    ↓
containerd (2017)
    ↓
CRI-O (2017)
    ↓
containerd (2021,K8s 默认)

Docker Shim 废弃

text
K8s v1.20 废弃 Docker Shim
K8s v1.24 移除 Docker Shim

原因:
- Docker 不遵循 CRI (Container Runtime Interface)
- 需要额外 shim 层转换
- containerd 原生支持 CRI

当前架构

text
K8s
    ↓ CRI
containerd / CRI-O
    ↓ OCI
runc
    ↓
容器

运行时对比

运行时维护者CRI 支持推荐度
containerdCNCF✅ 原生✅ 推荐
CRI-ORedHat✅ 原生✅ 推荐
Docker ShimDocker❌ 需转换⚠️ 废弃

Docker 镜像兼容性

text
# K8s 可直接使用 Docker 构建的镜像
# 因为都遵循 OCI Image Spec

# 构建镜像
docker build -t my-app:v1.0 .

# K8s 使用
kubectl run my-pod --image=my-app:v1.0

开发到生产流程

text
本地开发:
  docker build → docker compose up

构建 CI:
  docker build → docker push

部署生产:
  kubectl apply -f deployment.yaml
  # K8s 从仓库拉取 Docker 构建的镜像

迁移考虑

Docker Compose → K8s

text
# Compose 配置
services:
  app:
    image: my-app
    ports:
      - "80:80"

# K8s 等价配置
apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      containers:
        - name: app
          image: my-app
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
spec:
  type: LoadBalancer
  ports:
    - port: 80

要点总结

  • Docker 镜像遵循 OCI 规范,K8s Pod 直接使用
  • K8s v1.24 移除 Docker Shim,使用 containerd/CRI-O
  • 容器运行时架构:K8s → CRI → containerd → OCI → runc
  • Docker 构建的镜像可在 K8s 直接使用(OCI 兼容)
  • 开发用 Docker Compose,生产用 K8s 编排

📝 发现内容有误?点击此处直接编辑

← 上一篇 版本升级策略
下一篇 → 从 Compose 迁移到 K8s
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库