手记

Docker 架构原来如此简单

什么是Docker? Docker官网的解释是:Docker is a platform for developers and sysadmins to develop, deploy, and run applications with containers.

从字面上看,Docker实际可以帮助开发人员或者运维人员来快速,高质量的部署,运行应用程序。

Docker的主要特点是:
A. 灵活性,即使是最复杂的系统也可以容器化
B. 轻量级,容器之间共享主机内核
C. 可互换, 动态更新和升级
D. 可移植性, 本地build,部署到云,在任何地方Run
E. 弹性伸缩,可增加和自动分发容器副本
F. 堆栈化,可以动态,垂直的堆栈化服务。

Docker 有两个特殊的概念,container即容器,image即镜像。
那么容器和镜像的区别是什么呢?

镜像: 是一个可执行包,包含运行应用程序所需的所有内容——代码、运行时、库、环境变量和配置文件。
容器是镜像的运行时实例。可以使用docker ps 查看正在运行的容器列表。

说到这里,有开发人员就会说了,那Docker有什么用?我现在部署在虚拟机上不是很好么,为什么要用Docker?

首先,我们需要比较下Docker容器和虚拟机的区别:
容器在Linux本地运行,并且和其他的容器共享主机的内核。不占用多余的资源,是轻量级的。

相比之下,虚拟机是运行一个完整的Guest操作系统,通过一个管理程序hypervisor 来虚拟访问主机资源,通常,vm提供的环境资源比大多数应用程序所需的资源多。

上图:

其次,Docker能干什么呢?
A. 快速、一致地交付应用程序
Docker允许开发人员使用提供应用程序和服务的本地容器在标准化环境中工作,从而简化了开发生命周期。容器非常适合持续集成和持续交付(CI/CD)工作流。

示例场景:
开发人员在本地编写代码,并使用Docker容器与同事共享工作。
他们使用Docker将应用程序推进到测试环境中,并执行自动化和手动测试。
当开发人员发现BUG时,他们可以在开发环境中修复它们,并将它们重新部署到测试环境中进行测试和验证。
测试完成后,向客户提供升级就像将更新后的镜像推送到生产环境一样简单。

B. 响应式部署和扩展

Docker的基于容器的平台支持高度可移植的工作负载。Docker容器可以运行在开发人员的本地笔记本电脑上、数据中心的物理或虚拟机上、云提供商上或多种环境中。
Docker的可移植性和轻量级特性还使得动态管理工作负载变得非常容易,可以根据业务需求在几乎实时的情况下扩展或分解应用程序和服务。

C. 在相同的硬件上运行更多的工作负载

Docker是轻量级和快速的。它为基于管理程序的虚拟机提供了一种可行的、具有成本效益的替代方案,因此您可以使用更多的计算能力来实现业务目标。Docker非常适合高密度环境和中小型部署,在这些环境中,您需要用更少的资源做更多的事情。

总之,一句话,简单啊,运维人员基本啥也别干了,开发人员开发,测试好的包,直接就可以和线上系统对接了,没有准备线上环境,trial测试,这些操作了。另外一点就是成本啊,现在Docker可以更充分的利用资源啊。

好了,说了这么多,Docker的架构登场:
Docker 是Client-Server架构。


从图中可以看到,Server是一个守护进程(dockerd 命令),主要做building, running, and distributing 容器。
Rest API, 提供可以操作的接口。
Client,通过Rest API执行相应的交互。(docker命令)。
Client和server可以在同一机器,也可以在不同机器。

The Docker daemon(Server)

监听API请求,管理Docker对象,如镜像,容器,网络。Server可以和其他的Server交互管理Docker服务。

The Docker client

和Docker Server交互,一个Client可以和多个Server交互。

Docker registries

Docker注册中心存储Docker镜像。
Docker Hub是任何人都可以使用的公共注册中心,默认情况下,Docker会在Docker Hub上查找镜像。
我们可以建立自己的私有注册中心。

使用docker pull或docker run命令时,将从配置的注册表中提取所需的镜像。当您使用docker push命令时,镜像将被推送到您配置的注册中心中。

Docker objects

images镜像, containers容器, networks网络, volumes, plugins插件, and other objects

镜像,

这里再介绍一下,镜像是一个只读模板,其中带有创建容器说明,通常,一个镜像是基于其他的镜像的,我们可以自己建一个镜像,也可以使用其他人创建并发布在注册中心的镜像。

要构建自己的映像,需要使用简单的语法创建Dockerfile,用于定义创建映像并运行它所需的步骤。Dockerfile中的每条指令都在图像中创建一个层。当您更改Dockerfile并重新生成图像时,只会重新生成那些已更改的层。这也是Docker是轻量级的原因。

容器

容器是映像的可运行实例。您可以使用Docker API或CLI创建、启动、停止、移动或删除容器。您可以将一个容器连接到一个或多个网络,为其附加存储,甚至根据其当前状态创建一个新映像。
默认情况下,容器与其他容器及其主机相对隔离。您可以控制容器的网络、存储或其他底层子系统与其他容器或主机的隔离程度。

容器是由它的映像以及在创建或启动它时提供给它的任何配置选项定义的。当删除容器时,对其状态的任何未存储在持久存储中的更改都将消失。

服务Services

服务可以扩展在多个Docker server中,以集群的方式工作。集群中每个节点都是一个Docker Server,服务允许我们定义所需的状态,例如在任何给定时间必须可用的服务副本的数量。默认情况下,服务是跨所有工作节点负载均衡的。

4人推荐
随时随地看视频
慕课网APP