LCOW —— 单一Docker引擎下可同时运行Linux和Window容器啦!

2018-01-27 10:27:35来源:http://dockone.io/article/3299作者:DockOne人点击

分享

【编者的话】本文来自微软的技术专家Stefan Scherer,主要介绍了LCOW这一新功能将给Windows 10 带来哪些变化,这对基于Windows 10的开发、调试都意义非凡。本文作者还结合具体的实例,为我们演示了这一系列变化带来的诸多便利。


就在上周,Docker官方的master分支上新增了 LCOW (Linux Containers on Windows )功能。启用这项功能,即可在单一的Docker引擎下,同时运行Linux和Windows容器。


下面赶紧跟小编一起,看看Windows 10 将会发生哪些变化?



可以用Docker命令 docker ps ,列出所有正在运行的Linux或Windows容器。
在容器和主机之间通过存储卷共享数据。
容器之间可以通过容器网络互相通信。
通过将端口映射到主机,实现本地访问。但目前,它还只是Windows 10 1803 版预览体验计划(Windows Insider)的一项功能。
运行Linux容器

现在,你需要指定 --platform 来拉取Linux镜像。如果拉取的是一个既有Linux又有Windows的多重架构的镜像,同样需要指定该选项。


docker pull --platform linux alpine


镜像拉取完毕即可运行,无需指定 --platform 选项。


docker run alpine uname -a


另外,Windows上运行Linux容器需要一台小型的Hyper-V虚拟机。同时,LinuxKit项目提供了LCOW的镜像,请参照: https://github.com/linuxkit/lcow 。


共享存储

接下来我们看一下,如何用一种简单的方式,实现不同平台容器间的数据共享。


方法是把Linux和Windows容器,绑定到同一个存储卷。


下面的例子中,Linux和Windows容器通过主机的一个共享文件夹,实现数据共享。


首先,在Windows 10 上新建一个文件夹。


cd /

enter code here mkdir host`


启动Linux容器

在Windows 10 主机上启动一个Linux容器,并且将主机上的共享文件夹挂载到该容器的 /test 文件夹。


docker run -it -v C:/host:/test alpine sh


我们在 /test 文件夹下,新建一个名为hello-from-linux.txt的文件。


uname -a > test/hello-from-linux.txt


启动Windows容器

在Windows 10 主机上启动一个Windows容器,并且将主机上的共享文件夹挂载到该容器的 C:/test 文件夹。


docker run -i -v C:/host:C:/test microsoft/nanoserver:1709 cmd


我们在 C:/test 文件夹下,新建一个名为hello-from-windows.txt的文件。


ver > test/hello-from-windows.txt


测试结果

上述两个容器中新建的文件,都保存在Windows 10 主机的共享文件夹。


PS C:> dir host


Directory: C:/host


Mode LastWriteTime Length Name


---- ------------- ------ ----


-a---- 1/21/2018 4:32 AM 85 hello-from-linux.txt


-a---- 1/21/2018 4:33 AM 46 hello-from-windows.txt


在开发过程中,如果需要共享配置文件或代码的话,这实在是太方便了有木有~


混合编排

值得一提的是,使用Docker Compose还可混合编排容器。下面是一个混合编排Linux和Window web服务器的例子。


version: "3.2"


services:


web1:


image: nginx


volumes:


- type: bind


source: C:/host


target: /test


ports:


- 80:80


web2:


image: stefanscherer/hello-dresden:0.0.3-windows-1709


volumes:


- type: bind


source: C:/host


target: C:/test


ports:


- 81:3000


networks:


default:


external:


name: nat


你也可以思考一下,如何编排一个Linux数据库和Windows前端,反过来也一样。


如何搭建你的LCOW测试环境

如果你想试着玩一下LCOW,建议使用Windows 10 1709 虚拟机.


Azure

我在微软Azure上用Windows 10 1709 虚拟机测试过LCOW。你可以选择具有嵌套式hypervisor的V3 机器以便运行Hyper-V容器。


容器和Hyper-V

首先,启用容器和Hyper-V功能:


Enable-WindowsOptionalFeature -Online -FeatureName containers -All -NoRestart


Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All -NoRestart


LinuxKit

然后,为你的LCOW安装一个LinuxKit镜像。下面是我下载的最新版LinuxKit,你也可以自行从 linuxkit/lcow 下载.


Invoke-WebRequest -OutFile "$env:TEMP/linuxkit-lcow.zip" " https://23-111085629-gh.circle ... ot%3B


Expand-Archive -Path "$env:TEMP/linuxkit-lcow.zip" -DestinationPath "$env:ProgramFiles/Linux Containers" -Force


创建Docker

现在,你可以下载并安装Docker引擎了。


Invoke-WebRequest -OutFile "$env:TEMP/docker-master.zip" " https://master.dockerproject.c ... ot%3B


Expand-Archive -Path "$env:TEMP/docker-master.zip" -DestinationPath $env:ProgramFiles -Force


接下来,安装Docker service并打开实验功能。


. $env:ProgramFiles/docker/dockerd.exe --register-service --experimental


紧接着,配置PATH以便使用Docker CLI。


[Environment]::SetEnvironmentVariable("Path", $env:Path ";$($env:ProgramFiles)/docker", [EnvironmentVariableTarget]::Machine)


恭喜你!现在可以重启机器了。重启过程中会自动更新容器和Hyper-V的配置。如果一切顺利,重启完后Docker engine应该已经起来并处于运行状态了,这时你可以在PowerShell终端使用Docker CLI。


本地的Vagrant环境

如果你的 Vagrant 安装了Hyper-V或VMware,那就更方便了。只需几个命令,就可轻松搭建本地测试环境。


你只需要从我的GitHub下载包含LCOW环境的docker-windows-box,执行以下命令就可以了。


git clone https://github.com/StefanScher ... s-box


cd docker-windows-box


cd lcow


vagrant up


如果你的Windows 10 虚拟机上没有Vagrant base box,系统会自动下载安装。如果已经下载了,则只进行安装。


总结


未来几个月,随着这些Docker新功能加入到Windows,Windows 10 无疑将成为2018年最具吸引力的开发者平台。


想象一下,你用 docker-compose.yml 编排Linux和Windows容器,从Visual Studio Code实时调试你的应用程序,等等。。。


如果您喜欢这篇文章,请分享给您的朋友。如果想了解Windows容器的最新情况,请关注原文作者的推特 @stefscherer 。


原文链接: A sneak peek at LCOW (翻译:Tiny Guo)


微信扫一扫

第七城市微信公众平台