<返回更多

Docker架构概述

2020-04-04    
加入收藏

了解最常用的开发技术之一背后的基础组件和系统的基础

Docker架构概述

Image source: Docker Logos and Photos

如果您最近来到了一个美好的容器世界,或者您已经来过一段时间,那么了解可以协同工作以提供Docker巨大好处的基础系统和元素可能不是一个坏主意。

了解基础

镜像还是容器?

首先是第一件事。 具有基本术语的明确知识从未伤害任何人。 镜像和容器似乎是等效的术语-它们不是同一回事吗? 我的意思是,我都使用它们将我的应用程序投放到某些服务器,PaaS或其他任何服务器上。

好,是的,但实际上没有

可以根据软件开发将容器描述为镜像实例。 该语句有一些含义:

· 可以从同一镜像中生成无限数量的容器。

· 镜像内部的资源将出现在其所有生成的容器中。 哪种资源? 任何:文件,服务,二进制文件,cron作业等。

· 删除容器后,其所有内容都将丢失。 稍后,我们将学习如何处理数据持久性。

实际的镜像容器差异

我们了解到,容器就是某种镜像实例。 了解基本区别就足够了。 但是要提高我们的Docker技能,我们需要更深入地了解镜像概念。

镜像是一叠图层。 那是一层呢? 一层是相对于上一层的一组差异。 Dockerfile是定义如何构建镜像的文件。 该文件中的每条指令代表镜像的一层。 层被缓存以更快地构建镜像,因此良好的Dockerfile实现确实可以使构建时间和镜像大小有所不同。

Docker架构概述

Image layers as explained by docs.docker.com

这是真正的交易。 生成容器时,我们将获取镜像的图层堆栈,并在顶部(容器层)上生成一个可写层。 容器生命周期中生成的所有更改都将写入此层。 因此,删除容器时,容器层数据将丢失。

Docker架构概述

Multiple containers from the same image, docs.docker.com

Docker架构101

Docker引擎

您是否尝试安装Docker? 您可能已经注意到,不仅需要安装Docker,还需要安装dockerd。

那是因为Docker是一个客户端服务器应用程序。 您必须同时拥有这两个部分才能在计算机上运行Docker应用程序。 此客户端-服务器串联称为docker引擎。

docker客户端只是一个CLI工具,用于针对REST API发出请求,该REST API负责与docker守护程序或dockerd进行交互。 dockerd将处理操作系统以确保容器的正确行为。

Docker架构概述

Docker engine as explained by docs.docker.com

 

等等,您是否说了有关客户端服务器的内容? 这是否意味着我可以向远程Docker守护程序抛出请求? 好了,您现在可能已经意识到诸如Kubernetes,OpenShift和Docker Swarm之类的编排服务是如何工作的。

大图景

现在我们对Docker的主要元素有了清晰的了解,它们如何协同工作?

每当在Docker客户端中创建请求时,该请求都会发送到Docker守护程序,它将执行所需的操作。

让我们以运行redis容器为例。 我们通过运行docker run redis指令来实现这一点。

Docker架构概述

Docker architecture, docs.docker.com

首先,我们的计算机将向已配置的Docker主机API发出请求,该API将与Docker守护程序进行交互。

至此,守护程序知道其必须执行的操作。 它将在主机注册表上查找redis镜像。 如果不存在,则会进行一次新查找,这次将针对已配置的镜像注册表(Docker Hub,ECR,ACR,GCR等)进行搜索并提取(下载)。 然后,它将基于下载的生成一个容器。

 

其他主要Docker零件

持久性问题

如果由于某种原因,我们的postgres容器崩溃了,并且无法再次启动,则我们可能需要移除该容器并运行另一个容器。 但是,如前所述,容器层数据将丢失,我们不想丢失所有数据,是吗?

为持久性问题提供的两个解决方案是卷和绑定安装。 通过这两者,我们可以将正在运行的容器的文件系统持久保存到主机中。

一方面,卷将数据存储在主机中,只有dockerd可以修改此文件系统。 这是通常存储数据的首选方式。

另一方面,使用绑定安装,我们不仅可以将目录安装到容器中,还可以将具体文件安装到容器中。 另外,绑定安装允许安装任何主机目录或文件。 这意味着我们可以从主机将数据插入到容器中。 对于配置文件而言,这是巨大的。

Docker架构概述

Different data storage provided by Docker, docs.docker.com

第三种数据挂载模式tmps,在linux主机中使用,用于持久存储我们不想在容器层或主机文件系统中写入的数据(例如密钥)。 此数据保留在主机内存中。

为什么我的容器无法ping通google

也许您想在与世界隔绝的计算机中运行惊人的Web应用程序。 但是,这并不是Docker的主要用例,因此网络在编排Docker容器时起着重要的作用。

Docker提供了将不同类型的网络驱动程序附加到运行中的容器的可能性,从而实现了容器与另一个容器,Docker主机和/或Internet之间的连接。

Docker架构概述

Example of a bridge network provided by docs.docker.com

由于容器本身并不需要真正的网络知识,因此我们将在本主题中另辟piece径。

 

去玩吧!

现在,您应该对不同的Docker资源如何协同工作有一个更清晰的认识。 您现在应该至少能够理解"容器世界"中讨论的大多数概念的表面。

我邀请您进行自己的研究,以更深入地研究这些主题,并构建和部署您的容器化应用。 这里有一些想法:

· 尝试不同的卷/网络模式。

· 测试层缓存与无缓存的构建时间。

· 尝试多步骤构建。

· 沉迷于出色的docker-compose。

 

(本文翻译自Víctor Suárez Fernández的文章《An Overview of Docker Architecture》,参考:https://medium.com/better-programming/an-overview-to-docker-architecture-15407c482c52)

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>