0
点赞
收藏
分享

微信扫一扫

G022-CON-CKA-DOC-02 Docker 架构及与虚拟机区别

1 您需要了解

  • 您可参考 G021 来完成学习环境的搭建
  • 您可以点击文章左上方目录按钮来显示文章层次结构,以便有更好的浏览体验

    -相关文章

  • G016-OS-LIN-CENT-01 CentOS 7.8.2003 安装
  • G021-CON-CKA-DOC-01 急速入门,构建你的第一个 docker 学习环境

2 Docker 架构

  • Docker 使用客户端-服务器架构。Docker客户端与 Docker守护进程对话,后者负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序可以在同一系统上运行,或者您可以将 Docker 客户端连接到远程 Docker 守护程序。Docker 客户端和守护程序使用 REST API,通过 UNIX 套接字或网络接口进行通信。

  • 套用 Docker 官方提供的架构图来了解下 Docker 架构。如图 2-1 所示 Docker架构。

::: hljs-center

Snipaste_20220601_083501.png
图 2-1 Docker 架构

:::

2.1 Client 部分

  • 通过 docker build 命令并配合 Dockerfile 可以构建一个新的镜像 Images(后续博文介绍)。
  • 通过 docker pull 命令可以从 Registry 中拉取镜像 Images(参考博文G021)。
  • 通过 docker run 命令可以利用镜像 Images 创建容器 Containers(参考博文G021)。

2.2 Docker_Host 部分

不管是 build、pull、还是 run,客户端的命令都要经过 DOCKER_HOST 上的 Docker Daemon 进行处理,Docker Daemon 在中间起着承上启下的作用。

2.2.1 Docker Daemon

  • Docker 守护程序 ( dockerd ) 侦听 Docker API 请求并管理 Docker 对象,例如镜像、容器、网络和卷。守护进程还可以与其他守护进程通信以管理 Docker 服务。

2.2.2 Images

  • 镜像是一个只读模板,其中包含创建 Docker 容器的说明。通常,一个镜像是基于另外一个镜像,并带有一些额外的自定义操作。例如,您可以基于 ubuntu 的镜像来构建一个新的镜像,但安装 Apache Web 服务器和应用程序,以及使应用程序运行的详细信息需要去配置。
  • 您可以创建自己的镜像,也可以只使用其他人创建的并在注册表(Registry)中发布的镜像。要构建您自己的镜像,您需要使用简单的语法创建一个 Dockerfile,用于定义创建和运行镜像所需的步骤。Dockerfile 中的每条指令都会在镜像中创建一个层(Layer)。当您更改 Dockerfile 并重建镜像时,仅重建那些已更改的层。与其他虚拟化技术相比,这是使镜像如此轻量、小巧和快速的部分原因。

2.2.3 Containers

  • 容器是镜像的可运行实例。您可以使用 Docker API 或 CLI 创建、启动、停止、移动或删除容器。可以将容器连接到一个或多个网络,并将存储附加给它,甚至可以根据其当前状态创建新镜像。
  • 默认情况下,一个容器与其他容器及其主机的隔离相对较好。您可以控制容器的网络、存储或其他底层子系统与其他容器或主机的隔离程度。
  • 容器是由其镜像,以及在创建或启动容器时提供给它的配置选项来定义的。当容器被移除时,任何未存储在持久存储中的状态更改都会丢失。

2.3 Registry 部分

  • Docker 注册表存储 Docker 镜像。Docker Hub 是一个任何人都可以使用的公共注册表,并且 Docker 默认配置为在 Docker Hub 上查找镜像。您甚至可以运行自己的私有注册表。
  • 当您使用 docker pull or docker run 命令时,将从您配置的注册表中提取所需的镜像。当您使用 docker push 命令时,您的镜像会被推送到您配置的注册表中(后续博文介绍)。

3 理解镜像容器进程之间的关系

创建镜像的时候要指定镜像里面运行什么进程,当通过该镜像创建容器的时候,这个容器里面运行的就是镜像指定的进程

  • 创建的容器,里面运行的什么进程,是由镜像来决定的。如图 3-1 所示镜像容器进程关系。

::: hljs-center

arc2.png图 3-1 镜像容器进程关系

:::

  • 比如在 linux 系统里要使用 mysql 数据库,只需要下载一个 mysql 镜像,然后通过 mysql 镜像创建 mysql 容器(里面运行 mysqld 进程);如果需要第二个 mysql,再次利用该镜像,创建第二个 mysql 容器(里面运行 mysqld 进程),这样部署 mysql 流程简洁很多,不用单独下载安装包,不用一次又一次安装,并且也不依赖操作系统各种环境变量及配置文件等等。

4 虚拟机与容器区别

4.1 虚拟机

  • 依靠底层物理硬件,通过虚拟化技术(虚拟化层),创建出来的 Guest OS,称之为虚拟机。虚拟机之间资源相互独立、环境相互隔离,互不干涉,具备和物理机一样的功能特性。一台物理机的硬件资源被运行在其上的所有虚拟机共享使用。如图 4-1 所示 虚拟机架构。

::: hljs-center

hy.png图 4-1 虚拟机架构

:::

  • Infrastructure 是基础设施底层硬件,Host Operating System 是运行在硬件上的操作系统,Hypervisor 是虚拟化层,也称之为 VMM (Virtual Machine Monitor) 虚拟机监视器,也正是因着它,虚拟机才得以被创建。Guest OS 是虚拟机操作系统。
  • 其中 Hypervisor 分为两种类型:类型 1 裸金属型;类型 2 宿主型
  • 裸金属型:Hypervisor 作为操作系统内核的一部分直接运行在物理硬件上。例如 VMware Esxi 主机、华为的 CNA 主机、开源的 KVM 。如图 4-2 所示裸金属型。

::: hljs-center

luo2222.png图 4-2 裸金属型

:::

  • 宿主型:Hypervisor 运行在物理机操作系统之上。例如 VMware WorkstationVMware ServerVirtualBox。如图 4-3 所示宿主型。

::: hljs-center

suzhu.png图 4-3 宿主型

:::

4.2 容器

  • 与虚拟机不同的是,容器不再需要 Hypervisor 虚拟化层,取而代之的是 Docker Daemon 守护进程,它运行在宿主机操作系统上,统一管理 Docker 容器。它不再像虚拟机那样,上层需要一个独立的 Guest OS 来进行资源和环境的隔离,Docker 守护进程可以直接与主操作系统进行通信,为各个容器分配资源并使他们相互隔离。因此,Docker 显得无比简洁和轻量,启动关闭都在一瞬间。如图 4-4 所示 容器架构。

::: hljs-center

docker.png图 4-4 容器架构

:::

  • END
举报

相关推荐

0 条评论