Docker 架构
- 简介
- Docker daemon (守护进程)
- Docker client (客户端)
- Docker registries (仓库)
- Images (镜像)
- Containers (容器)
- The underlying technology (底层技术)
简介
Docker 使用 client-server 体系结构
。 Docker client (docker 客户端)
与 Docker daemon(docker 守护进程)
进行对话,后者负责构建、运行和分发Docker容器。Docker客户端和守护进程可以在同一系统上运行,也可以将 Docker 客户端 连接到远程 Docker 守护进程。Docker 客户端 和 守护进程 使用REST API通过UNIX套接字或网络接口进行通信。另一个Docker客户端 是Docker Compose,它允许使用由一组容器组成的应用程序。
Docker daemon (守护进程)
- Docker 守护进程(dockerd)侦听Docker API请求并管理Docker对象, 如 images, containers, networks, and volumes(图像、容器、网络和卷) 。守护进程还可以与其他守护进程通信,以管理Docker服务。
Docker client (客户端)
- Docker 客户端(Docker)是许多Docker用户与Docker交互的主要方式。 当使用诸如
docker run
之类的命令时,客户端会将这些命令发送给 dockerd,后者会执行这些命令。docker 命令使用 docker API。Docker客户端可以与多个守护进程进行通信。
Docker registries (仓库)
-
Docker registries 存储 Docker images。 Docker Hub 是一个任何人都可以使用的公共 registries,默认情况下,Docker 配置为在Docker Hub上查找 images。甚至可以运行自己的私人 registries。
-
当使用
docker pull
或docker run
命令时,将从配置的 registries 中提取所需的 images。当使用docker push
命令时, images 将被推送到配置的 registries 中。
Images (镜像)
-
Images 是一个只读模板,带有创建Docker容器的说明。 通常,一个 Images 是基于另一个 Images ,并进行一些额外的自定义。例如,构建一个基于ubuntu 镜像的镜像,但安装Apache web服务器和应用程序,以及运行应用程序所需的配置详细信息。
-
可以创建自己的 Images ,也可以只使用他人创建并在注册表中发布的Images 。要构建自己的 Images ,可以创建一个Dockerfile,该文件使用简单的语法来定义创建镜像和运行镜像所需的步骤。Dockerfile中的每个指令都会在 Images 中创建一个层。当更改Dockerfile并重建镜像时,只会重建那些已更改的层。
Containers (容器)
- 容器是 Images 的可运行实例。 可以使用Docker API或CLI创建、启动、停止、移动或删除容器。可以将容器连接到一个或多个网络,将存储连接到容器,甚至可以根据容器的当前状态创建新镜像。
The underlying technology (底层技术)
- Docker是用Go编程语言编写的,并利用Linux内核的几个特性来提供其功能。Docker使用一种名为
namespaces
的技术来提供称为容器的隔离工作空间。当运行一个容器时,Docker会为该容器创建一组命名空间 。 - 这些名称空间提供了一层隔离。容器的每个方面都在一个单独的命名空间中运行,其访问权限仅限于该命名空间。
- 通过
Cgroups
: 其名称源自控制组群(control groups)的简写,用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等)。