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
图 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
ordocker run
命令时,将从您配置的注册表中提取所需的镜像。当您使用docker push
命令时,您的镜像会被推送到您配置的注册表中(后续博文介绍)。
3 理解镜像容器进程之间的关系
创建镜像
的时候要指定镜像
里面运行什么进程
,当通过该镜像
创建容器
的时候,这个容器
里面运行的就是镜像
指定的进程
。
- 创建的容器,里面运行的什么进程,是由镜像来决定的。如图 3-1 所示镜像容器进程关系。
::: hljs-center
图 3-1 镜像容器进程关系
:::
- 比如在 linux 系统里要使用 mysql 数据库,只需要下载一个 mysql 镜像,然后通过 mysql 镜像创建 mysql 容器(里面运行 mysqld 进程);如果需要第二个 mysql,再次利用该镜像,创建第二个 mysql 容器(里面运行 mysqld 进程),这样部署 mysql 流程简洁很多,不用单独下载安装包,不用一次又一次安装,并且也不依赖操作系统各种环境变量及配置文件等等。
4 虚拟机与容器区别
4.1 虚拟机
- 依靠底层物理硬件,通过虚拟化技术(虚拟化层),创建出来的
Guest OS
,称之为虚拟机。虚拟机之间资源相互独立、环境相互隔离,互不干涉,具备和物理机一样的功能特性。一台物理机的硬件资源被运行在其上的所有虚拟机共享使用。如图 4-1 所示 虚拟机架构。
::: hljs-center
图 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
图 4-2 裸金属型
:::
- 宿主型:
Hypervisor
运行在物理机操作系统之上。例如VMware Workstation
、VMware Server
、VirtualBox
。如图 4-3 所示宿主型。
::: hljs-center
图 4-3 宿主型
:::
4.2 容器
- 与虚拟机不同的是,容器不再需要
Hypervisor
虚拟化层,取而代之的是Docker Daemon
守护进程,它运行在宿主机操作系统上,统一管理 Docker 容器。它不再像虚拟机那样,上层需要一个独立的Guest OS
来进行资源和环境的隔离,Docker 守护进程可以直接与主操作系统进行通信,为各个容器分配资源并使他们相互隔离。因此,Docker 显得无比简洁和轻量,启动关闭都在一瞬间。如图 4-4 所示 容器架构。
::: hljs-center
图 4-4 容器架构
:::
- END