面向初学者的 Docker 架构及其组件

让我们深入了解一下Docker的构造以及构成它的基础要素。

我假设你已经对Docker有了一定的基础认知。如果你是新手,可以先参考我之前发布的文章。

相信您已经认识到Docker在DevOps领域的重要性。如今,这款强大的工具背后,必然存在一个精心设计、考虑周全的架构,不是吗?

但在我深入探讨之前,先让我们简单回顾一下传统的虚拟化系统和当下的虚拟化系统。

传统虚拟化与新一代虚拟化

在早期,我们通常会创建虚拟机,每个虚拟机都需要运行一个完整的操作系统,这会占用大量的存储空间,并且导致系统变得笨重。

而现在,在Docker容器的情况下,我们只需要一个单一的操作系统,资源可以在不同的容器之间共享。因此,它更加轻便,并且可以在几秒钟内快速启动。

Docker架构

下面是一个简化的Docker架构示意图。

现在,让我来详细解释一下Docker架构的各个组成部分。

Docker引擎

它是整个Docker系统的核心所在。Docker引擎是一个遵循客户端-服务器架构的应用程序,它被安装在宿主机上。Docker引擎由以下三个关键组件构成:

  • 服务器:也称为Docker守护进程,名为dockerd。它负责创建和管理Docker镜像、容器、网络等。
  • REST API:用于接收指令,并告知Docker守护进程应该执行哪些操作。
  • 命令行界面(CLI):一个客户端工具,用于输入Docker命令。

Docker客户端

Docker用户可以通过客户端与Docker进行交互。当执行任何Docker命令时,客户端会将这些命令发送给dockerd守护进程,然后由守护进程执行。Docker命令会调用Docker API。Docker客户端可以与多个守护进程通信。

Docker注册表

它是用于存储Docker镜像的位置。它可以是公共的Docker注册表,也可以是私有的Docker注册表。Docker Hub是默认的Docker镜像存储位置,是一个公共注册表。你也可以创建和运行自己的私有注册表。

当你执行docker pulldocker run命令时,所需Docker镜像会从配置的注册表中被拉取下来。当你执行docker push命令时,Docker镜像会被存储到配置的注册表中。

Docker对象

在使用Docker时,你会接触到镜像、容器、卷、网络等;这些都被称为Docker对象。

镜像

Docker镜像是一种只读模板,其中包含了创建Docker容器的说明。Docker镜像可以从Docker Hub中直接获取并使用,或者你可以基于基础镜像添加额外的指令,创建新的、经过修改的Docker镜像。你也可以使用Dockerfile来创建自己的Docker镜像。Dockerfile包含所有创建和运行容器的指令,它会生成你的自定义Docker镜像。

Docker镜像包含一个只读的基础层,在其之上可以有一个可写的顶层。当你编辑Dockerfile并重新构建镜像时,只有被修改的部分会在顶层被重新构建。

容器

当运行Docker镜像时,会创建一个Docker容器。所有的应用程序及其运行环境都在这个容器内部运行。你可以使用Docker API或CLI来启动、停止或删除Docker容器。

以下是运行Ubuntu Docker容器的示例命令:

docker run -i -t ubuntu /bin/bash

Docker生成并被Docker容器使用的持久数据存储在卷中。它们完全由Docker通过Docker CLI或Docker API进行管理。卷适用于Windows和Linux容器。相对于将数据持久化到容器的可写层,使用卷始终是一个更优的选择。卷的内容独立于容器的生命周期而存在,因此使用卷不会增加容器的大小。

你可以使用-v--mount标志来启动带有卷的容器。在以下示例命令中,geekvolume卷将与techblik.com容器一起使用。

docker run -d --name techblik.com  -v geekvolume:/app nginx:latest

网络

Docker网络是所有隔离容器进行通信的渠道。Docker中主要有五种网络驱动:

  • Bridge:这是容器的默认网络驱动。当你的应用程序在独立的容器上运行时,你可以使用这个网络,即多个容器与同一个Docker主机通信。
  • Host:这个驱动程序消除了Docker容器和Docker主机之间的网络隔离。当你不需要主机和容器之间的任何网络隔离时使用它。
  • Overlay:这个网络使群服务能够相互通信。当容器在不同的Docker主机上运行,或者由多个应用程序形成群服务时使用它。
  • None:这个驱动程序禁用了所有网络。
  • macvlan:这个驱动程序为容器分配MAC地址,使其看起来像物理设备。流量通过容器的MAC地址在容器之间路由。当你希望容器看起来像物理设备时使用此网络,例如,在迁移虚拟机设置时。

结论

我希望这篇文章能够帮助你对Docker的架构及其基本组件有所了解。要学习更多内容,请进一步探索Docker。如果你有兴趣参加实践培训,可以查看这个Docker精通课程

你喜欢这篇文章吗?请与世界分享你的想法!