Docker架构及其组件初学者指南
让我们熟悉Docker架构及其基本组成部分。
我假设您对Docker有基本的了解。如果没有,您可以参考this previous article。
我相信您了解DevOps中Docker的重要性。现在,在这个神奇的工具背后,一定有一个令人惊叹的、经过深思熟虑的架构。不是吗?
但在我谈论这个之前,让我展示一下之前和当前的虚拟化系统。
传统虚拟化 vs. 新一代虚拟化
以前,我们使用虚拟机,每个虚拟机都有一个占用很大空间并使其变得笨重的操作系统。
现在在Docker容器的情况下,您只有一个操作系统,资源在容器之间共享。因此它是轻量级的,启动只需几秒钟。
Docker架构
下面是Docker架构的简单图示。
让我解释一下Docker架构的组成部分。
Docker引擎
它是整个Docker系统的核心部分。Docker引擎是一种遵循客户端-服务器架构的应用程序。它安装在主机上。Docker引擎有三个组件:
- 服务器:它是称为dockerd的Docker守护程序。它可以创建和管理Docker镜像、容器、网络等。
- Rest API:它用于指示Docker守护程序要做什么。
- 命令行界面(CLI):它是一个用于输入docker commands的客户端。
Docker客户端
Docker用户可以通过客户端与Docker进行交互。当任何Docker命令运行时,客户端将其发送到dockerd守护程序,然后由它执行。Docker命令使用Docker API。Docker客户端可以与多个守护程序通信。
Docker注册表
这是存储Docker镜像的位置。它可以是公共Docker注册表或私有Docker注册表。Docker Hub是Docker镜像的默认位置,它存储了公共注册表。您还可以创建和运行自己的private registry。
当您执行docker pull或docker run命令时,所需的Docker镜像会从配置的注册表中获取。当您执行docker push命令时,将Docker镜像存储在配置的注册表中。
Docker对象
在使用Docker时,您使用镜像、容器、卷、网络等对象。
镜像
Docker镜像是只读模板,其中包含创建Docker容器的指令。可以从Docker Hub上获取Docker镜像并使用,或者您可以向基本镜像添加其他指令来创建新的和修改过的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卷与yaoweibin容器。
docker run -d --name yaoweibin -v geekvolume:/app nginx:latest
网络
Docker网络是所有隔离容器之间通信的通道。 Docker中有五种主要的网络驱动程序:
- 桥接:这是容器的默认网络驱动程序。当您的应用程序在独立容器上运行时,即多个容器与同一Docker主机通信时,使用此网络。
- 主机:此驱动程序消除了Docker容器和Docker主机之间的网络隔离。当您不需要主机和容器之间的任何网络隔离时使用。
- 覆盖:此网络使Swarm服务能够相互通信。当容器在不同的Docker主机上运行时,或者当Swarm服务由多个应用程序组成时,使用此网络。
- 无:此驱动程序禁用所有网络。
- macvlan:此驱动程序为容器分配mac地址,使它们看起来像物理设备。通过它们的mac地址在容器之间路由流量。当您希望容器看起来像物理设备时使用此网络,例如在迁移VM设置时。
结论
我希望这让您对Docker架构及其基本组件有所了解。在Docker周围导航以了解更多信息,并且如果有兴趣进行实践培训,可以查看此链接_4。