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、内存、磁盘输入输出等)。