Docker真的被Kubernetes放弃了吗?

废柴阿尤
2024-01-07 / 6 评论 / 2,835 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年01月31日,已超过261天没有更新,若内容或图片失效,请留言反馈。

首先,要明确的是,Kubernetes 并没有完全放弃 Docker,而是改变了对 Docker 的使用方式。

这一改变主要是因为 Kubernetes 1.20 版本开始,宣布弃用了 Docker 作为容器运行时的支持(Dockershim 的移除)。这意味着,虽然在 Kubernetes 集群中可以运行用 Docker 构建的容器镜像,但 Kubernetes 将不再使用 Docker 作为容器运行时。

1、Docker 是什么? 表情

docker

  Docker 是一个开源的应用容器引擎,它允许开发者打包他们的应用及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙盒机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
  Docker 使用的是客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。镜像可以看作是容器的“模版”,而容器则是这些模版的实例化对象。Docker 提供了一个非常便捷的镜像使用方式,除了可以使用本地镜像外,还可以从 Docker Hub 上下载数以万计的镜像使用。

2、Kubernetes 是什么? 表情

kubernetes

  Kubernetes(也称为 K8s)是用于自动部署、扩展和管理容器化应用程序的开源系统。它由 Google 设计并捐赠给 Cloud Native Computing Foundation 来维护。Kubernetes 提供了一个用于部署应用程序的框架,支持应用程序的扩展和故障处理等功能,还提供了一系列的工具和服务以实现各种需求。

Kubernetes 的核心功能包括

  • 自动化容器的部署和复制
  • 随时扩展或缩减容器数量
  • 将容器组织成组并提供容器间的负载均衡
  • 服务发现和负载均衡
  • 自动挂载存储系统
  • 自动化的滚动更新
  • 自我修复,如重新启动失败的容器

3、Docker 和 Kubernetes 的区别? 表情

docker_vs_kubernetes

  虽然 Docker 和 Kubernetes 都是与容器化技术相关的工具,但它们在某些方面有着明显的不同。
使用范围和目的: Docker 主要关注的是容器的打包和运行,简化了应用程序的交付。而 Kubernetes 更加关注的是容器的协调和管理,包括自动部署、扩展、运行和调度容器。
设计和架构: Docker 使用简单的设计,易于理解和使用。它可以在单机上运行,也可以结合 Docker Swarm 在多机上协同工作。Kubernetes 则更加复杂,提供更多的功能和更高的灵活性,它是为在集群上大规模运行和管理容器化应用设计的。
功能和特性: Docker 直接处理容器的创建和运行,而 Kubernetes 提供了更复杂的调度器和集群管理工具。Kubernetes 能够管理和调度多个容器组成的应用,具有自动扩展、自愈等高级特性。
生态系统和社区: 虽然 Docker 和 Kubernetes 都拥有强大的社区支持,但 Kubernetes 在云计算和微服务领域的生态系统更为丰富,支持更多的云平台和产品集成。
  总的来说,Docker 更专注于单个容器的生命周期,而 Kubernetes 更关注容器集群的整体管理。在微服务和云原生应用的趋势下,两者往往是相辅相成的关系,Docker 用于容器化应用,而 Kubernetes 用于管理这些容器化的应用。

4、Kubernetes 对 Docker 的使用方式改变 表情

  首先,要明确的是,Kubernetes 并没有完全放弃 Docker,而是改变了对 Docker 的使用方式。这一改变主要是因为 Kubernetes 1.20 版本开始,宣布弃用了 Docker 作为容器运行时的支持(Dockershim 的移除)。这意味着,虽然在 Kubernetes 集群中可以运行用 Docker 构建的容器镜像,但 Kubernetes 将不再使用 Docker 作为容器运行时。
  这个改变背后的原因是 Docker 和 Kubernetes 之间的技术差异。Docker 是一个包含多种功能的大型应用,除了容器运行时之外,还包括图像管理、存储、网络等。而 Kubernetes 实际上只需要容器运行时这一部分功能。因此,为了减轻 Kubernetes 的负担,更高效地管理容器,Kubernetes 开始支持更加轻量级和标准化的容器运行时接口(CRI)。

5、Kuberetes 并没有淘汰 Docker 表情

  这并不意味着 Docker 被淘汰,因为 Docker 构建的容器镜像仍然可以在 Kubernetes 中运行。只是 Kubernetes 会使用其他容器运行时(如 containerd 或 CRI-O)来直接运行这些镜像。Docker 镜像本身符合 OCI(Open Container Initiative)标准,因此可以被任何标准的容器运行时使用。

6、Docker 在 Kubernetes 生态中的角色 表情

  在这种情况下,Docker 更像是一个开发工具,而不是在生产环境中的容器运行时。开发者仍然可以使用 Docker 来构建、测试容器镜像,然后将这些镜像部署到 Kubernetes 集群中。实际上,这种变化让 Kubernetes 变得更加高效,因为它可以直接与底层容器运行时接口交互,减少了不必要的中间层。
  两个代码示例来展示如何在 Kubernetes 环境中使用容器。第一个示例是一个 Dockerfile,用于创建一个简单的 Docker 镜像;第二个示例是一个 Kubernetes 的部署配置文件(Deployment)用于在 Kubernetes 集群中部署这个镜像。这两个示例将展示如何将一个 Docker 容器化的应用部署到 Kubernetes 集群中。

示例 1:Dockerfile

这个 Dockerfile 示例将创建一个简单的 Node.js 应用的 Docker 镜像。

# 使用官方的 Node.js 基础镜像作为构建环境
FROM node:14
# 设置工作目录为 /app
WORKDIR /app
# 将 package.json 和 package-lock.json 复制到容器中
COPY package*.json ./
# 安装应用依赖
RUN npm install
# 将应用的源代码复制到容器中
COPY . .
# 应用运行时监听的端口
EXPOSE 8080
# 定义容器启动时运行的命令
CMD ["node", "server.js"]

  在这个 Dockerfile 中,我们基于 Node.js 的官方镜像创建一个新的镜像,安装了应用的依赖,并设置容器启动时执行的命令。

示例 2:Kubernetes Deployment 配置文件

这个 YAML 文件示例定义了一个 Kubernetes Deployment,用于部署上面创建的 Docker 镜像。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nodejs-app
  labels:
    app: nodejs-app
spec:
  replicas: 2  # 创建两个副本
  selector:
    matchLabels:
      app: nodejs-app
  template:
    metadata:
      labels:
        app: nodejs-app
    spec:
      containers:
      - name: nodejs-container
        image: your-dockerhub-username/nodejs-app:latest  # 指定 Docker 镜像
        ports:
        - containerPort: 8080  # 容器应用监听的端口

  在这个 YAML 文件中,我们定义了一个名为 nodejs-app 的 Deployment。它将部署两个副本的容器,每个容器都运行 your-dockerhub-username/nodejs-app:latest 镜像(这里你需要替换成你自己的 Docker Hub 用户名和镜像名)。这个部署配置指定了容器内部的应用监听端口为 8080。
  结合这两个示例,你可以看到 Docker 和 Kubernetes 如何一起工作来容器化和部署一个应用。首先,使用 Docker 构建一个应用的镜像,然后通过 Kubernetes 部署配置在集群中部署这个镜像。

7、总结,Docker真的被Kubernetes放弃了吗? 表情

  所以,我们可以说 Kubernetes 改变了对 Docker 的使用方式,而不是完全放弃了 Docker。这种变化更多地反映了 Kubernetes 向标准化、高效化发展的趋势,同时也保留了 Docker 在容器技术领域的核心价值和广泛使用。对于开发者来说,这意味着他们仍然可以在开发过程中使用 Docker,而 Kubernetes 则更专注于容器的编排和管理。

1,569

打赏

评论 (6)

取消
  1. 头像
    dxrxjxvnxw
    Windows 10 · Google Chrome

    不错不错,我喜欢看 https://www.ea55.com/

    回复
  2. 头像
    smhmyyszfw
    Windows 10 · Google Chrome

    想想你的文章写的特别好https://www.237fa.com/

    回复
  3. 头像
    hqvvvwwnqq
    Windows 10 · Google Chrome

    怎么收藏这篇文章?

    回复
  4. 头像
    bhpttwnpru
    Windows 10 · Google Chrome

    叼茂SEO.bfbikes.com

    回复
  5. 头像
    老泥鳅
    Android · QQ Browser

    可以讲讲Docker和Podman的区别吗?

    回复
    1. 头像
      废柴阿尤 作者
      Windows 10 · Google Chrome
      @ 老泥鳅

      我抽时间写一篇关于他俩区别的文章表情

      回复