基于示例理解Docker架构
Docker描述
Docker是一个开源的容器管理平台,免费使用,并提供各种工具和实用程序来开发、测试和部署应用程序。您可以构建打包的、隔离的和平台无关的容器,其中包含所有库和依赖项。这将使创建和分发应用程序变得简单。
Docker平台
Docker平台提供工具和实用程序,用于在称为容器的隔离和容器化环境中打包、构建和运行软件应用程序。Docker架构的安全性和隔离性使您可以做到这一点。
Docker包含许多用于管理容器生命周期的工具。
您可以在易于包含的预构建环境中构建您的应用程序。
您甚至可以将应用程序的不同组件部署到不同的容器中,并允许它们使用Docker网络进行通信和数据交换。
该特定容器充当应用程序的独立单元,用于测试和分发。
应用程序启动并运行后,您可以使用该容器或作为编排的服务快速将其部署到生产环境。
无论您的主机是云服务、虚拟机、裸机服务器还是Linux工作站,容器都提供相同服务。
Docker的工作流程
了解有效的持续集成构建的组件至关重要。为确保我们的开发和构建过程顺利进行,请执行以下步骤:
Docker通过客户端-服务器架构执行其所有功能。Docker架构包含三个主要部分,如下所示:
- Docker守护进程(服务器)
- REST API(Docker引擎)
- Docker CLI(客户端)
这些元素共同实现客户端和服务器之间的通信。您将分别观察到这些。
容器守护进程
守护进程是一个持久的后端进程,它管理所有Docker对象,包括镜像、容器、卷和网络。它监视Docker API以获取包含指令的请求,处理这些请求并采取适当的操作。
RESTful Docker API
API充当服务器和客户端之间的中介。客户端应用程序使用它与服务器(守护进程)通信。只有HTTP客户端才能使用REST API。
Docker客户端
Docker客户端用于与Docker守护进程通信。它可以像命令行界面一样简单。要构建和管理Docker对象,您可以直接从命令行(客户端)向服务器发出简单的指令。
Docker架构
构成Docker架构的四个基本组件如下:
Docker守护进程或服务器
Docker命令行界面或客户端
Docker注册表
Docker对象:
镜像
容器
网络
存储
Docker守护进程
Docker守护进程,通常称为“dockerd”,持续监听Docker API请求。创建和管理Docker对象(如容器、卷、镜像和网络)只是它用于执行的一些劳动密集型操作。同一主机或不同主机上的其他守护进程可以与Docker守护进程通信。例如,在群集环境中,主机上的守护进程可以与其他节点上的守护进程协作以完成任务。
Docker CLI
Docker用户可以使用简单的HTTP客户端(如命令行)与Docker通信。当用户运行Docker命令(如Docker run)时,CLI通过REST API将此请求发送到dockerd。此外,Docker CLI支持多守护进程通信。
Docker注册表
官方Docker注册表Dockerhub拥有多个官方镜像仓库。仓库包含一组由Docker标签区分的类似Docker镜像。Dockerhub用户可以访问大量的官方和供应商特定的镜像。其中一些是Nginx、Apache、Python、Java、Mongo、Node、MySQL、Ubuntu、Fedora、Centos等等。
您甚至可以使用Docker push命令在Dockerhub内部设置私有仓库并存储您自己的Docker镜像。Docker允许您使用名为“registry”的镜像在您自己的系统上构建您自己的私有Docker注册表。启动与registry镜像连接的容器后,您可以使用Docker push命令将镜像推送到此私有注册表。
Docker对象
Docker用户通常与Docker对象交互,例如镜像、容器、卷、插件、网络等等。您将在下面快速了解每个对象。
Docker镜像 - Docker镜像是由许多文件层构建的只读模板。Docker镜像可以使用简单的文本文件Dockerfile创建,该文件提供创建Docker镜像的指令。第一个命令是FROM命令,它可以从任何Docker注册表检索基本镜像。然后使用几个指令在生成此基本镜像层后建立容器环境。每个指令都会在之前的指令之上创建一个额外的层。
Docker容器 - Docker容器是隔离的、封装的、打包的和受保护的应用程序环境,其中包含运行应用程序所需的所有软件包、库和依赖项。例如,如果您使用Ubuntu镜像构建容器,您将可以访问隔离的Ubuntu环境。您还可以访问Ubuntu环境的bash并从中发出命令。
网络 - 您可以设置一个安全的通道,以便群集中的所有隔离容器都可以通信和共享数据或信息。为此,您可以使用各种网络驱动程序和插件。任何Docker网络群集的通信都建立在Docker网络之上。Docker网络驱动程序主要分为五类:
主机驱动程序 - 如果您不需要Docker主机系统和网络上的容器之间进行任何网络隔离,请使用主机驱动程序。
桥接驱动程序 - 在同一主机系统上运行多个应用程序时,通常使用桥接网络驱动程序,它是默认网络驱动程序。
Overlay驱动程序 - 使用Docker swarm模式在同一网络上的不同主机上运行容器时,您可以使用overlay网络驱动程序。它允许在运行各种多容器应用程序组件的不同群集服务之间进行通信。
Macvlan - macvlan驱动程序将mac地址分配给网络中的每个容器。因此,每个容器都可以充当独立的物理主机。mac地址用于将流量引导到正确的容器。这在VM设置迁移等情况下非常有用。
无 - 只能使用None网络驱动程序关闭网络服务。
存储 - 离开容器后,您在容器中拥有的任何数据和进度都会消失。需要永久性存储解决方案来防止这种情况。为了通信、保存和备份您的重要数据,Docker提供了一些持久性存储选项。这些包括:
卷 - 您可以使用主机计算机上的文件夹作为卷挂载到Docker容器内。这些位于主机机的文件系统中,位于容器的写时复制机制之外。您可以使用许多Docker命令来创建、管理、列出和删除卷。
卷容器 - 您可以将卷挂载到另一个特定容器。
目录挂载 - 可以将主机计算机上的本地目录挂载到容器。对于卷,目录必须位于主机机的卷文件夹内才能被挂载。相反,使用目录挂载时,您可以快速将服务器上的任何目录作为源进行挂载。
存储插件 - 通过将它们与主机存储映射,存储插件允许您连接到任何外部存储平台,例如阵列、设备等。
结论
在本文中,您了解了Docker在容器化领域的重要性及其架构。您还了解了构成Docker架构的主要组件,例如Docker守护进程、Docker CLI和REST API。您还学习了如何通过使用Docker对象(包括镜像、卷、网络和容器)充分利用容器化。