前文我们介绍过在本地Windows10环境中,基于Hyper V容器的Docker使用。现在阿里云已经提供了Windows Server 2016支持,我们来亲自体验一下原生的Windows Server容器吧。
系列文章
第一篇 Docker的Windows容器初体验 第二篇 阿里云Windows Server 2016环境Docker试用 - 本文Windows Server容器与Linux容器非常类似,都是通过命名空间、资源控制等技术实现进程隔离。每个Windows Server容器都与宿主机共享同一个内核。与HyperV容器相比,它的启动速度更快、资源消耗更低。但是Hyper V容器可以借助虚拟化技术提供更好的隔离性。
注:由于微软的基础操作系统镜像在大陆下载非常缓慢,建议选择香港区域做实验。
首先我们创建一个Windows Server 2016,请选择型号III的规格,并选择“Windows Server 2016 数据中心版”操作系统镜像。由于Windows镜像都比较大,建议扩大系统盘容量。
因为我希望通过Windows Remote Desktop来访问ECS实例,需要在公网入方向开放RDP端口3389。其配置方法如下:
注:从安全角度出发,请按需配置需要对外暴露的端口。
可以访问 Docker Store 来查看安装Windows Server 2016操作系统的Docker Engine说明
在Windows Server的PowerShell中,执行如下命令安装Docker-Microsoft的包管理实现
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force再安装Docker Engine安装包
Install-Package -Name docker -ProviderName DockerMsftProvider完成之后,请执行下面命令重启服务器
Restart-Computer -Force重启完毕,我们就可以通过如下命令查看 Docker Engine 的状态了。
PS C:\Users\Administrator\test> docker version Client: Version: 17.03.0-ee-1 API version: 1.26 Go version: go1.7.5 Git commit: 9094a76 Built: Wed Mar 1 00:49:51 2017 OS/Arch: windows/amd64 Server: Version: 17.03.0-ee-1 API version: 1.26 (minimum version 1.24) Go version: go1.7.5 Git commit: 9094a76 Built: Wed Mar 1 00:49:51 2017 OS/Arch: windows/amd64 Experimental: false PS C:\Users\Administrator\test> docker info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 2 Server Version: 17.03.0-ee-1 Storage Driver: windowsfilter Windows: Logging Driver: json-file Plugins: Volume: local Network: l2bridge l2tunnel nat null overlay transparent Swarm: inactive Default Isolation: process Kernel Version: 10.0 14393 (14393.576.amd64fre.rs1_release_inmarket.161208-2252) Operating System: Windows Server 2016 Datacenter OSType: windows Architecture: x86_64 CPUs: 2 Total Memory: 8 GiB Name: iZe647ugnmkmq4Z ID: GMM4:K4QA:KYIC:6KFD:42KP:LKAJ:BNIY:QR7P:GHVH:MRCQ:PGDL:2ZKI Docker Root Dir: C:\ProgramData\docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false这里我们可以看到服务器端操作系统/架构(OS/Arch)为“windows/amd64”;而容器的“缺省隔离方式”(Default Isolation)为进程 “process”也就是Windows Server Container
注:如果ECS部署在国内Region,可以需要配置Docker Hub加速器。在香港和海外Region无需如下配置。
访问 https://cr.console.aliyun.com 获得加速器地址
在PowerShell中执行如下命令
C:\Windows\notepad.exe C:\ProgramData\docker\config\daemon.json编辑Docker Engine的配置文件,详细配置可以参见官方文档
{ "registry-mirrors": ["https://xxxx"] }重启Docker Engine
Restart-Service docker注:微软的系统镜像中的层文件并不保存在Docker Hub之上,在国内访问非常痛苦,即使配置了阿里云加速器也无法提升传输效率。可以通过docker save/load的方式加载操作系统基础镜像。
在测试目录创建如下Dockerfile文件,它会在微软IIS镜像的基础上,添加一个"index.html"
FROM microsoft/iis RUN echo "Hello World - Windows Container" > c:\inetpub\wwwroot\index.html构建Docker镜像,并命名为 "myiis"
docker build -t myiis .执行如下命令,启动
docker run -d -p 80:80 myiis
我们利用浏览器打开ECS主机的地址,就可以看见我们生成的网页了。 (注,需要在安全组配置中创建HTTP协议的公网入方向配置)
Docker从1.12版本之后提供了 isolation 参数,可以由用户选择不同的隔离机制
--isolation string Container isolation technology比如,在Windows环境可以用如下命令分别以 Windows Server Container 和 HyperV 的隔离方式执行 IIS
docker run --isolation=process -d microsoft/iis docker run --isolation=hyperv -d microsoft/iis阿里云环境中,Windows Server本身就是运行在虚拟化环境中,所以目前不支持 HyperV 的容器运行时。
由于Windows Server Container和操作系统共享内核所以它只能运行Windows操作系统镜像,而不能运行Linux的镜像。
在阿里云上利用Windows Server 2016和Docker技术可以敏捷地交付Windows应用,对于企业用户而言有着重要的意义。在之后的文章中,我们会逐渐介绍Windows容器的其他特性比如Swarm模式集群支持等。
阿里云容器服务也在计划提供对Windows容器的支持,了解更多容器服务内容,请访问 https://www.aliyun.com/product/containerservice