Windows上的Linux容器
翻译自:https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/linux-containers
Linux容器占整个容器生态系统的很大比例,是开发人员体验和生产环境的基础。但是,由于容器与容器主机共享内核,因此不能直接在Windows上运行Linux容器。这是虚拟化的发展方向。
现在可以使用Docker for Windows和Hyper-V这两种方法运行Linux容器:
- 在完整的Linux VM(虚拟机)中运行Linux容器 - Docker在Windows上的通用做法。
- 使用Hyper-V隔离(LCOW)运行Linux容器- 这是Docker for Windows中的新选项。
本文概述了每种方法的工作原理,提供了何时选择哪种解决方案,分享工作进展。
Moby VM 中的Linux容器
要在Linux VM中运行Linux容器,请按照Docker的入门指南中的说明进行操作。
Docker已经能够在Windows桌面上运行Linux容器,因为它是在2016年首次发布(在Hyper-V隔离或LCOW可用之前),使用在Hyper-V上运行的基于LinuxKit的虚拟机。
在此模型中,Docker Client在Windows桌面上运行,但在Linux VM上调用Docker守护程序(Docker Daemon)。

在此模型中,所有Linux容器共享一个基于Linux的容器主机并且所有Linux容器:
彼此和Moby VM共享内核,但不与Windows主机共享。
与Linux上运行的Linux容器具有一致的存储和网络属性(因为它们在Linux VM上运行)。
这也意味着Linux容器主机(Moby VM)需要运行Docker守护程序和所有Docker守护程序的依赖项。
要查看您是否正在使用Moby VM运行,请使用Hyper-V Manager UI或在管理员权限的PowerShell窗口中运行Get-VM,检查运行 Moby VM
具有Hyper-V隔离的Linux容器
要尝试LCOW(Linux container on windows),请按照此入门指南中的Linux容器说明进行操作
具有Hyper-V隔离功能的Linux容器在优化的Linux VM中运行每个Linux容器(LCOW),并且只有由操作系统来运行容器。与Moby VM方法相比,每个LCOW都有自己的内核和自己的VM沙箱。它们也是由Windows上的Docker直接管理的。

仔细研究一下Moby VM方法和LCOW之间的容器管理有何不同,在LCOW模型中,容器管理保留在Windows上,每个LCOW管理都通过GRPC和containerd进行。这意味着用于LCOW的Linux发行版容器可以拥有更小的体积。目前,我们正在使用LinuxKit来优化发行版容器的使用,但其他项目如Kata也正在构建类似的高度调整的Linux发行版(Clear Linux)。
以下是每个LCOW的详细信息:

要查看您是否正在运行LCOW,请导航至 C:\Program Files\Linux Containers 。如果Docker配置为使用LCOW,那么这里将包含一些文件,其中包含在每个Hyper-V容器中运行的最小LinuxKit发行版。请注意,优化的VM组件小于100 MB,远小于Moby VM中的LinuxKit映像。
工作进展
LCOW正在积极发展中。跟踪GitHub上 Moby项目的持续进展
绑定 mounts
docker run -v ...绑定卷并将文件存储在Windows NTFS文件系统上,因此POSIX操作需要进行一些转换。某些文件系统操作当前已部分或未实现,这可能会导致某些应用程序不兼容。
这些操作当前不适用于装入卷:
- MkNod
- XAttrWalk
- XAttrCreate
- Lock
- Getlock
- Auth
- Flush
- INotify
还有一些尚未完全改善:
- GetAttr - Nlink计数始终报告为2
- Open - 仅实现ReadWrite,WriteOnly和ReadOnly
这些应用程序都需要卷映射,无法正常启动或运行。
- MySQL
- PostgreSQL
- WordPress
- Jenkins
- MariaDB
- RabbitMQ
额外的信息
LinuxKit LCOW-kernel plus build instructions
何时使用Moby VM vs LCOW
何时使用Moby VM
现在,我们建议将Moby VM方法运行Linux容器给以下人员:
想要一个稳定的容器环境。这是Docker for Windows默认的。
运行Windows或Linux容器,但很少同时运行。
Linux容器之间有复杂或自定义的网络要求。
Linux容器之间不需要内核隔离(Hyper-V隔离)。
何时使用LCOW
现在,我们向以下人士推荐LCOW:
- 想要测试我们的最新技术。
- 同时运行Windows和Linux容器。
- Linux容器之间需要内核隔离(Hyper-V隔离)。
我们考虑的其他选择
当我们研究在Windows上运行Linux容器的方法时,我们考虑了WSL。最终,我们选择了基于虚拟化的方法,以便Windows上的Linux容器与Linux上的Linux容器保持一致。使用Hyper-V还可以使LCOW更安全。我们可能会在将来重新评估,但目前,LCOW将继续使用Hyper-V。
如果您有想法,请通过GitHub或UserVoice发送反馈。我们特别感谢您对您希望看到的具体体验的反馈。
译者 PS:今天是情人节,,单身狗在写博客 >.<
Windows上的Linux容器的更多相关文章
- 如何实现在Windows上运行Linux程序,附示例代码
微软在去年发布了Bash On Windows, 这项技术允许在Windows上运行Linux程序, 我相信已经有很多文章解释过Bash On Windows的原理, 而今天的这篇文章将会讲解如何自己 ...
- 在Windows上运行Linux
在Windows上运行Linux 之前了解过一些适用于linux的Windows子系统,最近又听人提起,于是在自己的Windows 10专业版上安装了一个Ubuntu.运行起来还真方便,以后在wind ...
- Windows上模拟Linux环境的软件Cygwin
Windows上模拟Linux环境的软件Cygwin 2010-10-11 15:19 我要评论(0) 字号:T|T Cygwin是一个用于在Windows上 模拟Linux环境的软件.它可 ...
- WSL(Windows上的Linux子系统)
WSL(Windows上的Linux子系统) WSL,Windows Subsystem for Linux,就是之前的Bash on [Ubuntu on] Windows(嗯,微软改名部KPI++ ...
- 【数据库开发】在Windows上和Linux上配置MySQL的过程
[数据库开发]在Windows上和Linux上配置MySQL的过程 标签(空格分隔): [编程开发] 首先是在Windows上尝试用QT进行MySQL数据库开发,结果总出现driver不能load的错 ...
- 手把手教windows上安装linux虚拟机及环境配置
目录 版本说明 安装虚拟机 典型方式安装(推荐小白,带有图形界面,助于学习,但占用空间大) 自定义方式安装(推荐老司机) 创建快照 克隆虚拟机 windows上安装linux虚拟机不管是对于新人还是老 ...
- 关于WSL(Windows上的Linux子系统)的介绍
WSL,Windows Subsystem for Linux,就是之前的Bash on [Ubuntu on] Windows(嗯,微软改名部KPI++ 首先要说一句,其实Windows 10在一周 ...
- 如何通过命令或脚本方式在Windows上访问linux系统
很多情况下,我们需要在Windows上写脚本,创建计划任务程序,这个过程中可能需要访问linux系统,执行脚本或者上传下载文件.并且我们也不想在Windows上安装什么东西.那最好的办法就是使用put ...
- 关于WSL(Windows上的Linux子系统)的简单介绍及安装
WSL,Windows Subsystem for Linux,就是之前的Bash on [Ubuntu on] Windows(嗯,微软改名部KPI++),在wsl环境下我们可以运行一些Linux程 ...
随机推荐
- F#周报2019年第27期
新闻 介绍Femto--使用Fable绑定的自动化npm包解决方案 Babel 7.5.0发布,包含动态导入与F#管道 iOS 13预览版发布 视频及幻灯片 Fabulous--F#用于跨平台移动应用 ...
- concat的应用
今天遇到一个问题,有一张车辆信息表,一张车辆品牌表,他们之间的品牌进行关联, 但是车辆信息表中品牌的名称较长,而品牌表名称较短.例如:车辆表:东风标致:品牌表:标致. 为了达到两种表的“模糊关联”. ...
- SpringMvc整合hibernate
之前用的比较多的是Mybatis,最近应客户要求准备hibernate的技术,给我最深的感触就是,能用mybatis尽量用mybatis,和hibernate相比优秀了不是一点半点,hibernate ...
- 详解rel 属性及noflow
rel属性的意思是指: 当前页和指向页的关系. 而 rev 属性则指定从目标文档到源文档的关系.百度目前支持: rel='noflow'属性. rel属性的意思是指: 当前页和指向页的关系. < ...
- 搭建Spring Initializr服务器
前言 按照网上很多教程,出错特别多.首先是GitHub和maven仓库的网络环境比较差,踩了很多坑:其次是SpringInitializr更新迭代几个版本,0.7.0我也没能弄成功.索性就用了旧版本0 ...
- 自己实现IOC容器,java代码实现简易版IOC容器,IOC容器实现的步骤分解
一.需求 实现一个简易的IOC容器,管理Bean,从IOC容器的BeanFactory中获取实例,从而取代自己new实例的做法. 二.实现步骤分析 三.具体代码实现 自定义注解类 MyComponen ...
- 学习2:总结# 1.while # 2.字符串格式化 # 3.运算符 # 4.编码初始
目录 1.while循环 -- 死循环 2.字符串格式化: 3.运算符 4.编码 1.while循环 -- 死循环 while 条件: 循环体 打断死循环: break -- 终止当前循环 改变条件 ...
- Java的Hook线程及捕获线程执行异常
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.f ...
- BI之路学习笔记2--SSIS/ETL设计练习三:《DB->定期生成excel表》
上次笔记记到,用sql任务给参数赋值,映射到变量,然后把数据流任务放到序列容器中进行执行,可以定期生成excel, 现在的问题是: 在EXCEL目标编辑过程中,必须选定某一个特定的excel目标,这样 ...
- Maven(一)Maven 的概念和安装
Maven 的概念和安装 Maven 是什么 首先 Maven 肯定是一个造福人类的好东西,它可以省去我们构建项目中引入 jar 包时的麻烦,还有利于项目的模块化开发等等等好处.在如今项目中大体都是使 ...