java系统找不到指定文件怎么解决
227
2022-10-19
G022-CON-CKA-DOC-02 Docker 架构及与虚拟机区别
1 您需要了解
2 Docker 架构
Docker 使用客户端-服务器架构。Docker客户端与 Docker守护进程对话,后者负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序可以在同一系统上运行,或者您可以将 Docker 客户端连接到远程 Docker 守护程序。Docker 客户端和守护程序使用 REST API,通过 UNIX 套接字或网络接口进行通信。 套用 Docker 官方提供的架构图来了解下 Docker 架构。如下图所示 Docker架构。
::: hljs-center
:::
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 理解镜像容器进程之间的关系
创建镜像的时候要指定镜像里面运行什么进程,当通过该镜像创建容器的时候,这个容器里面运行的就是镜像指定的进程。
创建的容器,里面运行的什么进程,是由镜像来决定的。如下图所示镜像容器进程关系。
比如在 linux 系统里要使用 mysql 数据库,只需要下载一个 mysql 镜像,然后通过 mysql 镜像创建 mysql 容器(里面运行 mysqld 进程);如果需要第二个 mysql,再次利用该镜像,创建第二个 mysql 容器(里面运行 mysqld 进程),这样部署 mysql 流程简洁很多,不用单独下载安装包,不用一次又一次安装,并且也不依赖操作系统各种环境变量及配置文件等等。
4 虚拟机与容器区别
4.1 虚拟机
依靠底层物理硬件,通过虚拟化技术(虚拟化层),创建出来的 Guest OS,称之为虚拟机。虚拟机之间资源相互独立、环境相互隔离,互不干涉,具备和物理机一样的功能特性。一台物理机的硬件资源被运行在其上的所有虚拟机共享使用。如下图所示虚拟机架构。
::: hljs-center
:::
Infrastructure 是基础设施底层硬件,Host Operating System 是运行在硬件上的操作系统,Hypervisor 是虚拟化层,也称之为 VMM (Virtual Machine Monitor) 虚拟机监视器,也正是因着它,虚拟机才得以被创建。Guest OS 是虚拟机操作系统。
其中 Hypervisor 分为两种类型:类型 1 裸金属型;类型 2 宿主型(参考论文 Formal Requirements
for Virtualizable Third Generation Architectures)
裸金属型:Hypervisor 作为操作系统内核的一部分直接运行在物理硬件上。例如 VMware Esxi 主机、华为的 CNA 主机、开源的 KVM 。如下图所示裸金属型。
::: hljs-center
:::
宿主型:Hypervisor 运行在物理机操作系统之上。例如 VMware Workstation 、VMware Server 、VirtualBox。如下图所示宿主型。
::: hljs-center
:::
4.2 容器
与虚拟机不同的是,容器不再需要 Hypervisor 虚拟化层,取而代之的是 Docker Daemon 守护进程,它运行在宿主机操作系统上,统一管理 Docker 容器。它不再像虚拟机那样,上层需要一个独立的 Guest OS 来进行资源和环境的隔离,Docker 守护进程可以直接与主操作系统进行通信,为各个容器分配资源并使他们相互隔离。因此,Docker 显得无比简洁和轻量,启动关闭都在一瞬间。如下图所示容器架构。
::: hljs-center
:::
虚拟机是操作系统级别的完全隔离(如运行多个Windows或Linux操作系统);容器是进程级别的隔离(如运行多个应用程序或数据库)。
END
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~