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