云计算的主流容器平台Docker架构分析

  • 来源:网络
  • 更新日期:2020-05-29

摘要:Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

首先我们先了解一下什么是容器。如果需要通俗的描述容器的话,我觉得容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样。我们现在所说的容器存放的东西可能更偏向于应用比如网站、程序甚至是系统环境。假如以现实举例,真实的物理机相当于一栋楼的一户人家有独立花园有独立地基,虚拟机相当于一栋楼包含多套房,一套房一户人家,共享地基,共享花园但有独立卫生间、厨房和宽带,容器相当于一套房隔成多个小隔间,每个小隔间住一个租户,共享花园、地基还共享卫生间、厨房和宽带。

在传统的部署模式下,如果有非常多的服务器,运维工程师需要在每一台服务器上进行相当复杂的操作才能够完成部署。安装->配置->部署。但是Docker的出现颠覆了这种传统的模式。我们看一下,Docker只需要把整个开发环境打包成一个docker image,也就是Docker镜像给运维团队,而运维团队直接运行就可以了,整个过程就变成打包、传送、运行即可,非常的简单。因为Docker镜像包含了所有的环境依赖关系,可以保证开发与生产环境一致,对于开发和运维工作,Docker技术可以让开发和运维豁免很多预想之外的工作和相互推脱。此外,容器可以重复运行在任何地方,简单化了运维人员的工作 。 Docker的这种在安全、可重复的环境中可移植,跨平台的快速部署软件的方式也方便做持续集成,所以说Docker出现拉开了基于云计算平台发布产品方式的变革序幕,是运维人员的解放,广受开发者和运维人员的欢迎。

目前主流的云服务器平台亚马逊AWS、微软Azure 、阿里云、腾讯云都支持Docker容器服务。

Docker 包括三个基本概念:

镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

容器与镜像的关系类似于面向对象编程中的对象与类。

Docker 镜像(Images)

Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。

Docker 容器(Container)

容器是独立运行的一个或一组应用,是镜像运行时的实体。

Docker 客户端(Client)

Docker 客户端通过命令行或者其他工具使用 Docker SDK 与 Docker 的守护进程通信。

Docker 主机(Host)

一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。

Docker Registry

Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜 像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指 定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

Docker Machine

Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

新网箭头云服务器