1116_Windows Server2016 Containers初体验

Windows Server2016 Containers初体验

2017-08-10 07:52 计算机 /技术 /微软

当Windows Server2016开始有支持Containers后,认为只要把Windows Server 2016内的Container服务启动后,就可以立马来使用Docker这项技术,殊不知这是错误的,因为,这样做法只是让Windows Server2016有了Container功能,但是,要让它可以用Docker,还必须额外安装Docker模块才可以有办法开始使用Docker的技术,而在Windows Server 2016支持的Containers有分成Windows ServerContainersHyper-VContainers,下面采用的是Windows ServerContainers

安装Docker

建议在安装Docker之前,要把Windows Server 2016所有更新档都必须要更新,才不会有问题,然后,用Admin权限启动PowerShell,而第一个必须先安装Docker-MicrosoftPackageManagement套件,有了这个套件,才能去安装Docker的Package

安装Docker-Microsoft PackageManagement

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force

安装Docker Package

Install-Package -Name docker -ProviderName DockerMsftProvidere

都安装完毕后,必须重新启动计算机,让Docker服务启动,若是后续想要更新Docker,只要输入更新指令就可以

Install-Package -Name Docker -ProviderName DockerMsftProvider -Update -Force

以上三步骤就可以在Windows Server2016用Docker功能,若不确定是否可以用,只要输入docker info能查看Docker相关讯息就没问题了

安装Docker-Compose

Docker-Compose是让你可以快速布署或是启动Container的配置文件,如果是透过VS.Code去编辑Docker-Compose的yml档案,必须先在VS.Code内安装相关Docker-Compose套件,才可以开始编辑,但按照先前作法,已经可以在Windows Server2016使有Docker,不过,却没有Docker-Compose指令,因为,必须额外安装Docker-Compose套件,才有办法使用Docker-Compose指令,安装套件位置[https://github.com/docker/compose/releases],下载的文件名是会是这样docker-compose-Windows-x86_64.exe,也可以直接用PowserShell的指令安装套件

Invoke-WebRequest "https://github.com/docker/compose/releases/download/1.14.0/docker-compose-Windows-x86_64.exe" -UseBasicParsing-OutFile $Env:ProgramFilesdockerdocker-compose.exe

不过,若公司防火墙关系无法安装化,就是必须先把档案下载下来,并且,透过上面指令取代掉原本URL位置改成docker-compose-Windows-x86_64.exe档案的路径,就可以安装了

制作自己的Docker Image

我们会从Docker Store下载自己所需要的image建立Container,不过,从Store下载来的image只是原始的Source,有时候并不能符合我们实际需求,所以,还会额外把设定加入进去,但是,若是每次从Image建立Container,都还要重复设定一次,也很费工。如果这时候想要每次都直接用自己加工过的image,而不是原始的Source,必须花一点小方法来制作属于自己的image,在原本Docker指令中,是有支持Export功能,但是,在Windows Server 2016 Containers目前没有办法用这个指令。所以,我们必须利用Commit方式进行。

以SQL ServerContainer为例,我们可以先把Containers建立起来后,并放入自己系统的DB

docker run -it --name SQLTest -d -p 14331:1433 -e sa_password=XXXXX -e ACCEPT_EULA=Y -v c:DB:C:DB microsoft/mssql-server-windows-express:2016-sp1

这时候建立的DB Container就不会是原始的Source,且每次启动DB Container也不想要再还原一次DB到新的Container,这时候要把这个Container变成自己的image,以后只要启动自己的image就可以。

第一就是要先停掉Container,这个Container已经加入自己的DB

docker stop SQLTest

停掉Container后,用Commit方式建立新的image,这步骤通常会一点点时间

docker commit Container_ID microsoft/mssql-server-windows-express:SQLTest

如下图,这样在image List中,就多出刚刚建立的客制化image source了

如果想要把这image搬到其他地方使用呢?一种就是放入registry中,若现实不允许,就只能自己把image汇出档案啰

docker save -o "c:imageSQLTest.tar" microsoft/mssql-server-windows-express:SQLTest

通常这一步又要花费更久时间,反之要把档案汇入,则使用docker load,就可以建立一个自己情境的docker image

让Remote Container执行Docker-Compose

上面执行Docker方式,都是在Windows Server中下达Docker指令,但是,如果要透过另一台VM或是机器去呼叫远程的VM的Container,必须先做几个设定,首先,要更改远程机器的daemon.json档案,加入下面参数,并重启Docker(Restart-Servicedocker)

"hosts": ["tcp://0.0.0.0:2375", "npipe://"]

须注意就是远程机器的防火墙必须要开启2375Port,然后执行docker -H Remote IP:2375 info,就可以确认是否有通了,到了这部表示远程机器已经开放Port让你可以远距执行Docker指令,接下来就是执行.yml档案去建立Container,这次案例是建立好一个要启动SQL Container,在yaml的描述档的内容如下:

通常要执行这个yaml档案会是放在要执行Container机器上,而这次是要透过自己计算机去启动远程的Container,所以,必须把yaml档案放在自己计算机端,然后透过下面指令执行它

docker-compose -H Remote_IP -f docker-compose.yml up

就可以让启动远程的Container了。

END

关于作者

Edward.Kuo

架构不是设计出来,是迭代出来的;没有最完美架构,只有最适宜的架构

竹科打滚十多年,从RD到MIS扮演过不同的角色,在这些角色中学习在不同领域用不同观点看待软件开发流程,不仅喜爱技术,也探索各种产业的Knowhow与企业流程,在需求与技术中探寻合适的解决方案,思考一个适合的产业架构机制与设计,近来,研究企业开发中如何导入DevOps核心价制,DevOps会更适用于企业IT现状的合作方式。

猜你喜欢

转载自blog.csdn.net/Golden_soft/article/details/84134426