了解了Docker是个什么东东?后,我们再来看看Docker架构。
如上图所示,Docker 使用客户端-服务器架构(c/s)。Docker 客户端(client)与 Docker 守护进程(daemon)进行通信,守护进程负责构建、运行和分发 Docker 容器。Docker 客户端和守护进程可以在同一系统上运行,也可以将 Docker 客户端连接到远程 Docker 守护进程。Docker 客户端和守护进程通过 REST API 、UNIX 套接字或网络接口进行通信。另一个 Docker 客户端是 Docker Compose,它允许你处理由一组容器组成的应用程序。
Docker 守护进程(Docker daemon)
dockerd 是 Docker 守护进程(Docker daemon)的可执行文件。它是 Docker 平台的核心,在后台运行,负责监听 Docker API 请求并管理 Docker 对象,例如镜像、容器、网络和卷等。dockerd 负责执行 Docker 客户端发送的命令,这些命令可以是创建、运行、停止和删除容器等操作。
当您使用 Docker CLI(命令行界面)时,您实际上是在与 dockerd 进行交互。例如,当您输入 docker run 命令时,Docker 客户端会将这个命令发送给 dockerd,然后 dockerd 会创建并启动一个新的容器。
dockerd 可以通过配置文件进行配置,也可以通过命令行参数来修改其行为。它通常在系统启动时自动运行,或者可以通过服务管理工具手动启动和停止。
Docker 客户端
Docker 客户端(Docker client)是指用户用来与 Docker 守护进程(Docker daemon)通信的命令行工具。它是 Docker CLI 的一部分,允许用户通过终端或控制台发送命令来管理 Docker 对象,如容器、镜像、网络和卷等。
当您在命令行中输入 Docker 命令(例如 docker run
、docker build
等)时,实际上是 Docker 客户端将这些命令发送到 Docker 守护进程。守护进程负责执行这些命令,并管理 Docker 的所有操作和资源。
Docker 客户端和守护进程可以运行在同一台机器上,也可以通过网络连接到远程的 Docker 守护进程。它们之间的通信是通过 REST API 完成的,可以通过 UNIX 套接字或网络接口进行。
简而言之,Docker 客户端是用户与 Docker 交互的界面,它简化了容器的管理和操作过程。
Docker 注册表
Docker 注册表(Docker Registry)是一个存储和分发 Docker 镜像的服务。它是一个集中的存储库,允许用户上传(推送)和下载(拉取)容器镜像。Docker 注册表是 Docker 生态系统中的一个关键组件,因为它使得容器镜像的共享和再利用变得容易。
Docker Hub 是最著名的公共 Docker 注册表,它提供了大量的官方和社区支持的镜像,供开发者直接使用。除了 Docker Hub,还有其他公共注册表和私有注册表选项。私有注册表可以由个人或组织在本地或云中运行,用于管理敏感或专有的镜像,以及控制镜像的分发。
注册表可以包含多个仓库(repositories),每个仓库又可以包含多个标签(tags)的镜像。每个标签通常代表一个特定版本的镜像。例如,一个仓库可能包含多个版本的 Ubuntu 镜像,每个版本都有一个不同的标签,如 “14.04”、“16.04” 或 “18.04”。
当您使用 docker pull 命令时,Docker 客户端会从配置的注册表中下载指定的镜像。当您使用 docker push 命令时,Docker 客户端会将本地构建的镜像上传到注册表中。这些操作允许开发者和运维人员轻松地共享和部署容器化的应用程序。