在Windows 10上运行Linux及Windows容器

本文讲的是在Windows 10上运行Linux及Windows容器【编者的话】DockerCon 2016上Docker官方发布了Docker for Windows的公开测试版本,在这一版本里,添加了对在Windows 10上运行Windows容器(包括nanoserver和servercore)、Linux容器以及两者并存的支持,本文作者就这一话题为我们展示了一些具体的实例操作并进一步分析了背后的运行机制。

在西雅图举办的DockerCon 2016上,Docker官方发布了Docker Windows的公开测试版本。在这一版本里,你能够以一种非常简便的方式在安装了Hyper-V的Windows 10专业版上通过Docker运行Linux容器。在一段时间内这里会同时存在一个稳定版本以及一个测试版本渠道以获取新的版本。

并且,微软已经将容器功能添加到了Windows 10的年度更新补丁里。通过一些安装步骤,你便能在你的Windows 10机器上运行Windows Hyper-V容器。

但是这里面可能存在点小疑问,那便是这两种安装方式对应启动的是哪类容器。而且,在不做任何调整的情况下你将无法并排运行两个Docker引擎。

由于两个安装版本使用的是同一个默认的命名通道//./pipe/docker_engine,这会导致其中的一个引擎启动失败。

统领一切的Beta 26

从Docker Windows Beta 26测试版本起,这里有一个更简单的方法来解决这个矛盾。你只需要通过MSI安装器装上Docker Windows版即可。在Docker的托盘图标上会有一个新的菜单选项支持在Linux及Windows容器间切换。

正如你在视频里所看到的那样,你不用再通过更改环境变量或是利用Docker客户端的-H参数来和其他的Docker引擎通信。

如果你下载了Docker Windows测试版或是你在安装过程中切换到了测试频道,那么不妨亲身体验一下。

如果你之前还没有激活容器功能的话该安装器将会帮你激活它。为了添加这项特性,需要重启一次才能生效。

现在你可以轻松地通过点击托盘图标里的菜单栏来完成切换。

这里也提供了一个命令行工具来切换引擎。你可以打开一个PowerShell窗口然后键入:

& 'C:\Program Files\Docker\Docker\DockerCli.exe' -SwitchDaemon

这样它便完成了从Linux切换到Windows,反之亦然。注意按照上面展示的那样键入参数,它是大小写敏感的。

用代理来解围

但是,如何才能做到切换工作进行过程中无需Docker客户端改用其他的命名通道或是套接字呢?

答案便是,Docker会运行一个代理进程 com.docker.proxy.exe,它会监听默认的命名通道//./pipe/docker_engine

如果你是从Linux切换到Windows,那么Windows Docker引擎dockerd.exe将会启动并监听在另外的命名通道//./pipe/docker_engine_windows,然后发起一个新的代理进程重定向到它。

探寻本质

为了探寻从Linux切换到Windows容器的过程中究竟发生了什么,我安装了sysinternals进程监控工具。通过进程树功能,你可以看到一个时间线,每个已启动或者已退出的进程都会有对应的绿色条。

下面这张截图展示了切换前后的进程情况。大概在绿色条的中间部分我就已经完成了切换。

和MobyLinuxVM通信的com.docker.proxy.exe(列表里的dockerd.exe),正如深绿色条高亮展示的那样已然退出。

dockerd.exe,即Windows Docker引擎启动了,并且它还发起了一个新的和Windows Docker引擎通信的com.docker.proxy.exe(dockerd.exe下面)。

因此,在切换后你仍然可以用docker.exe客户端或者是集成在你喜爱的编辑器或IDE里的Docker插件,而无需作任何环境上的改动。

并行运转两个容器世界

代理进程只是切换了连接到的Docker引擎而已。在这样一个切换动作完成后实际上Linux和Windows两个Docker引擎均在运行。

运行一个Linux Web服务器

在体验之前我们首先得切换回Linux容器。现在我们可以在80端口上运行默认的nginx web容器:

docker run -p 80:80 -d nginx

然后再切换到Windows容器:

& 'C:\Program Files\Docker\Docker\DockerCli.exe' -SwitchDaemon

现在,让我们跑一些Windows容器吧。但是首先我们还得试试看Linux容器是否仍然还在运行,并且服务是否是可以访问的:

start http://localhost  

通过这个start命令你可以打开Edge浏览器访问一个运行在Linux容器里的Nginx自带的欢迎页面。

是的,这个Linux容器一直在跑着。

构建一个Windows Web容器

在Windows 10上你~~只能运行Nanoserver容器。而这里并没有针对Nanoserver的IIS docker镜像~~。重大更新:你可以在Windows 10上运行Nanoserver以及windowsservercore容器。

但是为了演示nanoserver容器是如何的简单,我将仍然使用下面这个例子来做讲解。那么,我们现在来创建一个属于自己的小型Node.js Web服务器。首先,我们编写一个简单的web服务应用:

notepad app.js

app.js文件里键入如下代码作为一个迷你web服务然后保存该文件。

var http = require('http');  
var port = 81;

function handleRequest(req, res) {  
res.end('Hello from Windows container, path = ' + req.url);
}

var server = http.createServer(handleRequest);
server.listen(port); 

现在我们来为这个应用构建一个Windows Docker镜像。我们另外打开一个编辑器然后通过如下命令创建Dockerfile

notepad Dockerfile

键入下面的代码作为Dockerfile的内容。正如你所能看到的那样,只有FROM这一行和典型的Linux Dockerfile不太一样。它使用的是一个来自Docker Hub的Windows基础镜像。

FROM stefanscherer/node-windows:6.7.0-nano

COPY app.js app.js

CMD [ "node", "app.js" ] 

保存该文件然后通过如下熟悉的命令来构建Docker镜像:

docker build -t webserver .  

通过如下命令将Windows web服务跑在一个Docker容器里:

docker run -p 81:81 -d webserver  

这时候你无法直接通过127.0.0.1连接到容器。但是可以使用容器的IP地址去访问。我们需要容器的ID或者名字,可以通过如下命令列出当前正在运行的容器:

docker ps  

然后打开浏览器输入对应容器的IP地址:

start http://$(docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" grave_thompson):81  

此外,从宿主机到容器的端口转发使得你在其他机器上也可以通过81端口访问Web服务。

是的,Windows容器也在处理请求了。

结论

新版的Docker Windows测试版把两个容器世界结合在了一起,并且简化了Linux和Windows Docker镜像的构建,使得一台Windows 10机器对于两者而言均可算是一个不错的开发平台。

并且在切换到所需的Docker引擎时稍微注意一下便能发现,Linux和Windows容器可以同时在两侧运行。

原文链接:run-linux-and-windows-containers-on-windows-10(翻译:吴佳兴)

原文发布时间为:2016-10-15

本文作者:吴佳兴

本文来自合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:在Windows 10上运行Linux及Windows容器

时间: 2025-01-02 21:00:26

在Windows 10上运行Linux及Windows容器的相关文章

Bashware攻击:在Windows系统上运行Linux恶意软件

本文讲的是Bashware攻击:在Windows系统上运行Linux恶意软件, 近日,据外媒报道称,安全专家最新发现了一种惊人的攻击技术,名为"Bashware"攻击,利用该技术,攻击者可以隐藏恶意软件,即便是主流的安全产品(包括下一代防病毒软件.防勒索软件等)也无法检测出. 2016年3月,微软公司宣布将Windows Subsystem for Linux(简称WSL,指适用于Linux的Windows子系统)作为一项Beta特性添加至2016年8月发布的Windows 10周年更

黑客教你如何在Windows上运行Linux桌面应用程序

当微软将把Ubuntu引入Windows 10的消息传出时,官方的理由是它只是针对将Bash移植到Windows之中.笔者曾经预言,Linux Bash是伟大的,我们很快就会看到"人们试图将包括桌面在内的所有Linux用户空间程序移植到Windows之上." 在Windows Subsystem for Linux(WSL)发布的几天之后,黑客们就将Linux图形程序运行在了Windows Ubuntu之中. 方法很简单,安装了WSL和Ubuntu之后,你要做的第一件事就是为Windo

想在Windows 10中运行openSUSE?请参照此安装方法

最近几个 Windows 10 编译版本中带来了一套完整的.基于 Ubuntu 的 Bash Shell,以便开发者们可以直接在 Windows 桌面上运行 Linux 软件或命令,它就是"Bash on Ubuntu on Windows".虽然没有正式宣布,但动手能力强的人们也已经找到了在 Windows 10 中运行 openSUSE 和 SUSE Linux 企业版操作系统的方法. 感兴趣的网友可以直接在 Windows 10 开始菜单上访问它. SUSE 高级产品经理 Han

教你如何在Windows 10上安装Windows Media Center

微软已经在Windows 10平台上放弃了Windows Media Center,声称由于"使用量不断下降"将不再继续提供.随后这家软件巨头发布了DVD Player,但是这款应用售价高昂不说且功能非常基础.如果你怀念Windows Media Center且类似于Kodi等替代解决方案无法达到你的需求,那么你可以使用下面这个比较繁琐的方式在Windows 10上安装Windows Media Center. 首先是下载应用文件.My Digital Lift论坛提供了安装包,用户可

Windows Azure上支持Linux虚拟机

大家好.我很荣幸写写关于Windows http://www.aliyun.com/zixun/aggregation/13357.html">Azure的工程师们让我们的合作伙伴和客户能在Windows Azure上运行和管理Linux工作负载所做的工作. 现在你可能听到,预览版的新虚拟机当前的能力可以让Linux虚拟机像Windows Server一样在Windows Azure 上运行. 我们建设支持Linux的目标是为客户提供一流的体验.我们知道我们独自做不成,所以我们和很棒公司合

pyinstaller-使用pyInstaller打包后在windows平台上运行启动两个进程

问题描述 使用pyInstaller打包后在windows平台上运行启动两个进程 练习多进程使用了python的multiprocessing包,已经在if name=='__main__':下添加freeze_support(),在解释器上运行一切正常,代码中创建一个进程实际就是创建一个进程,但是在打包之后不一样 打包后的程序每当(在代码中)启动一个新进程的时候,例如ala=Process(target=startout, args=(seconds,name)) 会实际上启动两个进程,而al

MATLAB可以在windows azure上运行吗?

问题描述 MATLAB可以在windows azure上运行吗? 我计划把最近开发的应用移到windows azure上,现在我使用MATLAB做一些算法,我知道windows azure 现在还不支持编辑的MATLAB文件,不过,我想知道windows azure可以支持的确切的时间,这样方便我移植程序. 解决方案 您好, 貌似您需要使用Azure HPC Pack的功能去实现.但是到目前为止, 中国版Azure还未开放该功能.国际版Azure可以使用这个功能. 关于这个问题您可以参考Avka

《精解 Windows 10》——2.9 Windows应用商店

2.9 Windows应用商店 Windows应用商店是获取Modern应用程序的唯一途径.在Windows 10操作系统中,微软重新设计了Windows应用商店,使其显示和分类更加合理,并且增加了音乐.电影和电视剧下载服务.Windows应用商店将包括现有的65万个Windows和Windows Phone应用.4000万首Xbox Music音乐.40万部Xbox Video电影和电视剧.Windows 10操作系统正式发布之后,Windows应用商店还将支持下载安装PC游戏.桌面应用程序和

Windows 10技巧:如何在Windows Store中迅速寻找想要的书籍

今天Windows博客再发Windows 10技巧博文,指导Windows 10创作者更新用户如何在Windows Store中迅速寻找到想要的书籍.目前博文中所阐述的技巧仅限于美国地区,但相信将很快在国内地区上线.     现在Windows Store已经新增了Books(书籍)的一级条目,微软提供了丰富的书籍分类供消费者挑选.一旦用户从Windows Store中选购了心仪的图书,那么就可以使用Edge浏览器进行阅读. 在Edge浏览器中,用户能够通过字体尺寸.布局.主题等个性化设置来获得