容器101:Docker基础

Docker如此受欢迎的一个原因是它提供了“一次开发,随处运行”的承诺.Docker提供了一种将应用程序及其运行时依赖性打包到单个容器中的简单方法。它还提供了一个运行时抽象,使容器能够跨不同版本的Linux内核运行。

使用Docker,开发人员可以在他或她的工作站上创建容器化应用程序,然后轻松地将容器部署到任何支持Docker的服务器。无论是在云端还是在本地,都无需为服务器环境重新测试或重新调整容器。此外,Docker还提供软件共享和分发机制,允许开发人员和运营团队轻松共享和重用容器内容。这种分发机制与跨机器的可移植性相结合,有助于说明Docker在运营团队和开发人员中的受欢迎程度。  

【组件】图像层不变,容器层变。

Docker既是开发工具又是运行时环境。要了解Docker,我们必须首先了解Docker容器映像的概念。容器始终以图像开头,并被视为该图像的实例化。图像是容器在运行时应该是什么的静态规范,包括容器内的应用程序代码和运行时配置设置。Docker镜像包含只读层,这意味着一旦创建了图像,它就永远不会被修改。

图1显示了容器图像的示例。此图像描绘了具有Apache安装的Ubuntu映像。该图像由三个基本Ubuntu图层和一个更新图层组成,顶部有一个Apache图层和一个自定义文件图层。

 

图1:Docker图像层。

运行Docker容器是图像的实例化。从相同图像派生的容器在其应用程序代码和运行时依赖性方面彼此相同。但与只读的图像不同,运行容器包括在只读内容之上的可写层(容器层)。运行时更改(包括对数据和文件的任何写入和更新)都保存在容器层中。因此,共享相同底层图像的多个并发运行容器可具有实质上不同的容器层。

删除正在运行的容器时,可写容器层也将被删除,并且不会保留。保持更改的唯一方法是docker commit在删除容器之前执行显式命令。执行a时docker commit正在运行的容器内容(包括可写层)将写入新的容器映像并存储到磁盘中。这成为与实例化容器的图像不同的新图像。

使用此显式docker commit命令,可以创建一组连续的离散Docker镜像,每个镜像都构建在上一个图像之上。此外,Docker使用写时复制策略来最小化共享相同基本组件的容器和映像的存储空间。这有助于优化存储空间并最小化容器启动时间。

图2描绘了图像和正在运行的容器之间的区别。请注意,每个正在运行的容器可以具有不同的可写层

 

图2:Docker镜像和运行Docker容器。

除了图像概念之外,Docker还有一些与传统Linux容器不同的特定组件。(守护进程、CLI命令等)

  • Docker守护进程。Docker守护程序也称为Docker引擎,是容器和Linux内核之间的薄层。Docker守护程序是管理应用程序容器的持久运行时环境。无论底层操作系统如何,任何Docker容器都可以在任何启用了Docker-daemon的服务器上运行。
  • Dockerfile。开发人员使用Dockerfiles构建容器映像,然后成为运行容器的基础。Dockerfile是一个文本文档,包含组装容器映像所需的所有配置信息和命令。使用Dockerfile,Docker守护程序可以自动构建容器映像。此过程极大地简化了容器创建的步骤。

更具体地说,在Dockerfile中,首先指定构建过程开始的基本映像。然后指定一系列命令,之后可以构建新的容器映像。

  • Docker命令行界面工具。Docker提供了一组CLI命令,用于管理基于图像的容器的生命周期。Docker命令跨越开发功能,例如构建,导出和标记,以及运行时功能,如运行,删除,启动和停止容器等。

您可以针对特定的Docker守护程序或注册表执行Docker命令。例如,如果执行该docker -ps命令,Docker将返回在守护程序上运行的容器列表

【内容分发】私有注册表到公共注册表

除了运行时环境和容器格式之外,Docker还提供了一种软件分发机制,通常称为注册表,可以方便容器内容的发现和分发

注册表的概念对Docker的成功至关重要,因为它提供了一组用于打包,发送,存储,发现和重用容器内容的实用程序。Docker公司运行一个名为Docker Hub的公共免费注册表。

  • 注册。Docker注册表是发布和存储容器图像的地方。注册表可以是远程的,也可以是内部的。它可以是公共的,因此每个人都可以使用它,或者私有,仅限于组织或一组用户。Docker注册表附带了一组通用API,允许用户构建,发布,搜索,下载和管理容器映像。
  • Docker Hub。Docker Hub是一个由Docker管理的基于云的公共容器注册表。Docker Hub提供图像发现,分发和协作工作流支持。此外,Docker Hub还有一组经过Docker认证的官方图像。这些是来自已知软件发行商的图像,例如Canonical,Red Hat和MongoDB。您可以使用这些官方图像作为构建自己的图像或应用程序的基础。

图3描绘了一个工作流,其中用户构造图像并将其上载到注册表。其他用户可以从注册表中提取映像以生成生产容器,并将它们部署到Docker主机,无论它们在哪里。

 【不变性】

猜你喜欢

转载自www.cnblogs.com/immiao0319/p/10347739.html