前言

在开始介绍具体操作之前,需要向各位不熟悉容器技术的Windows平台下管理员和开发者做一个基础概念的普及。而且在阅读微软的官方文档之前,推荐阅读Docker官方的概览文档。因为微软的文档中主要提及了Windows Containers的一些特有概念,而容器技术本身的概念并没有被着重介绍。因此仅阅读微软现有文档并不能完整的了解容器技术。这里也推荐阅读由Elton Stoneman编著的Docker on Windows一书来对Windows平台上的容器技术有一个详细的了解。

当然容器技术并不是孤立存在的,它和编排调度系统通力合作,助力应用程序的微服务化改造。在Mark大神的Containers: Docker, Windows and Trends一文中介绍了整个故事的前因后果。

题外话

上文中的Mark大神是谁?

简单来说呢,他是Microsoft Azure现任CTO。一个有个人维基百科页面的男人。一个踢爆索尼大法Rootkit丑闻的男人。一个给DOS写NTFS驱动的男人。

.vxd后缀文件见过没?CIH听过么?都没有? 年轻真好。)

本文也尽量通过简洁的语言让各位对容器技术有一个快速且基础的了解。

名词解释

Docker Engine

Docker Enginer是一个包含客户端和服务器的应用。主要包含以下组件:

  • 后台服务
  • REST API
  • 基于命令行的客户端

其中后台服务在Windows客户端中服务名是Docker Engine,Windows服务器中的服务名是Docker,如果需要重启Dokcer服务来让配置生效的话,还请注意使用正确的服务名。

REST API则比较好理解,这是目前主流的对资源进行抽象和管理的方式。

默认情况下Docker为我们提供了基于命令行的名为docker的客户端,实际使用中也可以使用其它编程语言自行开发客户端或者脚本来管理Docker。比如下面就是一个使用Python客户端的例子。具体可以阅读官方SDK文档

clipboard.png

这些组件的关系可以使用Docker官方文档中的一张图来解释。

img02

镜像(Images)

镜像是包含容器创建指令的只读模板。形象点的例子就是在超市中批量贩售的空整理箱,整理箱有大有小,对应着基础的操作系统镜像也是有大有小的。至于用户拿整理箱放什么东西就看用户自己的需求了。有的用户在整理箱里装好自己开发的设备后再次贩售。这个第一次预装了设备的“整理箱”就是常见的各种官方镜像,比如MySQL, Postgres, Redis。

容器(Containers)

容器是运行起来的镜像。对应之前解释镜像时使用的例子,就是正在使用的整理箱。这个正在使用的整理箱已经连接上了其它设备,里面的装备参数也进行了调整。当任务完成后,整个整理箱便被还原成初始状态,如果没有特别标记的话,之前设置好的所有参数也丢失了。

仓库(Registries)

仓库是保存镜像的设施。有公共仓库和私有仓库的区别。对应之前的例子,就是超市和特供商店的区别。默认情况下,当执行拉取操作时,Docker会从Docker Hub拉取用户指定的镜像。Docker Hub可以通过浏览器访问。这里有一点需要注意,Docker访问仓库时使用的时HTTPS协议,如果用户搭建的仓库没有配置证书,则需要在非安全仓库中添加相关仓库地址。

架构

最终将上述名词串起来之后,整体使用流程如下:

  1. 从公有仓库拉取基础镜像
  2. 编写Dockerfile,通过build指令构建镜像
  3. 通过run指令运行镜像,并确认容器工作正常
  4. 如果镜像需要分享到Docker Hub上,则可以通过push指令推送。如果需要导入到离线环境,则可以使用save指令。

以下这张图则来自Docker官网。
img03

总结

正如文章标题所说的,本文只是例举了Windows Containers中和Linux Containers中相同的部分,还没有涉及Windows Containers的网路及存储部分,这两个部分的内容将在后续详细讨论,尽情期待。


追寻云的痕迹
301 声望6 粉丝