出品丨Docker公司(ID:docker-cn)
编译丨小东
每周一、三、五晚6点10分 与您不见不散
在2017年即将结束的时候,我们选出了读者们最喜欢的五篇文章。对于那些还没有在Windows上构建过Docker容器的朋友,我将为您推荐这篇可以帮助您在Windows上快速构建并且运行Docker容器的教程。
早些时候,微软宣布Windows Server 2016将会普及,以便可以在Windows上使用原生的Docker引擎运行容器。本文将详细介绍如何在Windows 10上运行Docker Windows Containers或使用Windows Server 2016 VM。在开始之前,您首先需要准备一个支持构建、运行Docker容器的Windows系统。
Windows 10周年纪念版更新
对于开发人员来说,Windows 10系统是运行Docker Windows容器的好地方,随着周年纪念版的更新,Windows 10 核心将添加对容器化的支持(它所缺少的仅仅是Windows原生的Docker引擎和一些镜像的基础层)。
在Windows上获取Docker引擎最简单的方法就是安装Docker for Windows。Docker for Windows过去仅设置了基于Linux的Docker开发环境,但现在它可以同时为Linux和Windows设置Docker开发环境。一旦安装完毕,Docker for Windows图标就可以在Linux和Windows容器之间进行切换了。
切换到Windows容器,进入下一节内容。
Windows Server 2016
Windows Server 2016就是要将Docker Windows容器部署到生产环境。对于那些计划开发大量Docker Windows容器的开发者来说,在Windows 10和Docker for Windows完美支持Windows容器之前,建立一个Windows Server 2016开发系统(例如在一个虚拟机上)是一件相当值得做的事情。下载一个免费版本,并将其安装在裸机上或那些运行Hyper-V、VirtualBox或拥有类似虚拟化技术的虚拟机上。使用Windows Server 2016运行虚拟机也是在macOS和较旧的Windows版本上运行Docker Windows容器开发的好方法。
一旦启动、登录并运行Windows Server 2016,Windows将提示您进行更新,更新后将直接为您安装Windows原生的Docker引擎(就是不再使用“Docker for Windows”了),在PowerShell中输入以下命令:
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force Install-Module -Name DockerMsftProvider -Force Install-Package -Name docker -ProviderName DockerMsftProvider -Force Restart-Computer -Force |
Docker引擎正在以Windows service的形式运行,监听默认的Docker命名管道。
# Open firewall port 2375 netsh advfirewall firewall add rule name="docker engine" dir=in action=allow protocol=TCP localport=2375 |
# Configure Docker daemon to listen on both pipe and TCP (replaces docker --register-service invocation above) Stop-Service docker dockerd --unregister-service dockerd -H npipe:// -H 0.0.0.0:2375 --register-service Start-Service docker |
现在可以通过设置DOCKER_HOST从虚拟机中使用Windows Server 2016 的Docker引擎了:
$env:DOCKER_HOST = "<ip-address-of-vm>:2375" |
运行Windows容器
首先,确保您的Docker正在运行中:
> docker version Client: Version: 1.12.1 API version: 1.24 Go version: go1.6.3 Git commit: 23cf638 Built: Thu Aug 18 17:32:24 2016 OS/Arch: windows/amd64 Experimental: true
Server: Version: 1.12.2-cs2-ws-beta API version: 1.25 Go version: go1.7.1 Git commit: 62d9ff9 Built: Fri Sep 23 20:50:29 2016 OS/Arch: windows/amd64 |
接下来,下载一个与评估构建兼容的基础镜像,重新标记它并进行测试运行:
docker pull microsoft/windowsservercore docker run microsoft/windowsservercore hostname 69c7de26ea48 |
构建和上传Windows容器镜像
将镜像推送到Docker Cloud需要一个Docker ID。在Docker Cloud上存储镜像是一种很好的习惯,可以为以后的用户保存构建,与同事共享基础镜像,或者创建构建管道通过Docker将应用程序从开发移植到生产。
Docker镜像通常是通过Dockerfile中的docker build来构建的,但是在这个示例中,我们将在PowerShell中实时创建一个镜像。
"FROM microsoft/windowsservercore `n CMD echo Hello World!" | docker build -t <docker-id>/windows-test-image |
测试镜像:
docker run <docker-id>/windows-test-image Hello World! |
用docker login登录,然后上传镜像:
docker push <docker-id>/windows-test-image |
储存在公共镜像库中的镜像可以被其他Docker用户下载使用。
在Windows上使用docker-compose
Docker Compose是开发多容器(由数据库、队列和Web前端组合的复杂容器)的好方式。
要在Windows Server 2016系统上使用Docker Compose进行开发,就需要安装Windows Server 2016(而在安装了Docker for Windows的Windows 10中则不需要再安装它了):
Invoke-WebRequest https://dl.bintray.com/docker-compose/master/docker-compose-Windows-x86_64.exe -UseBasicParsing -OutFile $env:ProgramFiles\docker\docker-compose.exe |
在Windows上试用Compose,请先克隆由SQL Server Express 2016数据库支持的ASP.NET Core MVC MusicStore应用程序的变量。在开始前,一个拥有正确标签的 microsoft/windowsservercore 镜像是必不可少的。
git clone https://github.com/friism/Musicstore ... cd Musicstore docker-compose -f .\docker-compose.windows.yml build ... docker-compose -f .\docker-compose.windows.yml up ... |
要从运行容器的主机上访问正在运行的应用程序(例如,在Windows 10上运行时,或者在运行Docker引擎的Windows Server 2016系统上打开浏览器),请使用容器IP和端口5000:
docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" musicstore_web_1 172.21.124.54 |
如果使用Windows Server 2016并从VM或主机外部访问,则只需使用VM或主机IP和端口5000即可。
总结
本文描述了如何在Windows 10和Windows Server 2016上构建和运行原生的Docker Windows Containers。要查看更多详情可以点击下列标题:
如果本文对你有帮助,欢迎分享到朋友圈!获取更多Docker实用技巧,扫描下图二维码!