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