龙空技术网

在windows server下同时运行linux容器和windows容器

挨木涕 111

前言:

当前看官们对“docker中运行windows”可能比较重视,咱们都需要分析一些“docker中运行windows”的相关文章。那么小编同时在网上汇集了一些关于“docker中运行windows””的相关资讯,希望你们能喜欢,小伙伴们一起来了解一下吧!

我们经常在window10 或11上安装docker desktop来运行容器。但是您可能不知道,在windows server上微软为我们提供了免费的docker企业版,我们可以使用docker企业版无需使用虚拟化,运行Windows容器,也可以使用微软专门为容器开发的定制虚拟机来同时运行windows和linux容器。

1.在Windows下配置容器环境

什么是容器? 容器是一种松散隔离的环境,可用于生成和运行软件包。 这些软件包包括在任何计算环境中快速可靠地运行应用程序所需的代码和所有依赖项。 我们将这些包称为容器映像。 容器映像是我们用于分发应用程序的单位。

安装容器环境,打开powershell输入以下命令

Install-Module -Name DockerMsftProvider -Repository PSGallery –ForceInstall-Package -Name docker -ProviderName DockerMsftProviderRestart-Computer -Force

因为网络的原因,如果之前的命令失败的话,我们可以通过以下命令直接下载安装包,并放到指定的位置。

我们在原有安装命令后加入 -debug参数。在回答问题时选A或y

Install-Package -Name docker -ProviderName DockerMsftProvider -dubug

这里我们可以看到安装程序从哪里下载安装程序,并且放到哪里去。

C:\Users\ADMINI~1\AppData\Local\Temp\DockerMsftProvider\Docker-19-03-5.zip

目前最新版是20.10.9,下载地址是

|

我们可以挂迅雷的软件下载后放到C:\Users\ADMINI~1\AppData\Local\Temp\DockerMsftProvider\目录下

然后重新执行安装命令

如果是升级安装,可以加入 -force参数,即

Install-Package -Name docker -ProviderName DockerMsftProvider -dubug -force

windows系统会自动删除原有服务

如果是通过下载包来安装,需要在删除服务后,再次执行,记得取消 -force参数, force参数会强制下载安装包

Install-Package -Name docker -ProviderName DockerMsftProvider

安装完成后powershell

start-service docker

启动docker 服务

docker version

确认版本为docker企业版

可以看到同时支持win和linux存储

测试:

docker pull mcr.microsoft.com/windows/servercore:ltsc2019

使用docker:

隔离示例 创建容器 通过 Docker 管理 Hyper-V 隔离容器与管理进程隔离容器几乎完全相同。 若要通过 Docker 创建采用 Hyper-V 隔离的容器,请使用 --isolation 参数来设置 --isolation=hyperv。

docker run -it --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019

或者修改C:\ProgramData\docker\config\daemon.json,加入

{    "exec-opts":["isolation=hyperv"]}

若要通过 Docker 创建采用进程隔离的容器,请使用 --isolation 参数来设置 --isolation=process。

docker run -it --isolation=process mcr.microsoft.com/windows/servercore:ltsc2019 

2 .windows 平台运行linux 容器

启用实验性功能

C:\ProgramData\docker\config\daemon.json

{"experimental": true}

启用实验性功能powershell

Set-Content -Value "`{`"experimental`":true`}" -Path C:\ProgramData\docker\config\daemon.json

安装linux内核

 C:\> cd 'C:\Program Files\' C:\Program Files> mkdir "Linux Containers" C:\Program Files> cd '.\Linux Containers\' C:\Program Files\Linux Containers> curl -OutFile release.zip  C:\Program Files\Linux Containers> Expand-Archive -DestinationPath . .\release.zip

安装hyper-V (server)

Install-WindowsFeature Hyper-V –IncludeManagementTools –Restart

--platform linux

Error response from daemon: failed to start service utility VM (createreadwrite): kernel 'C:\Program Files\Linux Containers\kernel' not found

docker run -d -p 1688:1688 --name kms --restart=always --platform linux --isolation=hyperv teddysun/kms

Restart-Service docker

docker pull mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019

因为我们不一定每次都需要开启hyper-V,所以我们可以建立开启hyper-V的引导菜单,

1、以管理员权限运行

bcdedit /copy {current} /d "Windows 10 (开启 Hyper-V)"

随后会提示已经创建了另外一个启动菜单项,记下 { } 中的一串代码。

2、运行

bcdedit /set {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} hypervisorlaunchtype auto

命令,将上面的代码替换掉这里的红色XXX代码。

bcdedit /set hypervisorlaunchtype off

官方文档供参考:

配置

远程管理docker

隔离模式

{    "exec-opts":["isolation=hyperv"]}

容器图形管理

Deploy Portainer Server on a standalone WINDOWS Docker Host (running Windows Containers) – note must be Windows 1803 or newer.

$ docker volume create portainer_data$ docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart always -v \\.\pipe\docker_engine:\\.\pipe\docker_engine -v portainer_data:C:\data portainer/portainer

另外,目前windows admin center也已经支持了容器的图形化管理

以上是几年前在windows2016上实验使用docker的笔记,稍作修改。已经算是老技术了。目前在windows2019上依然可以使用。同时docker公司依然提供了最新版本的支持。仅供参考。

目前在windows上运行Linux容器的功能已经下放到win10,11。是通过docker desktop及WSL2 来实现,但是比起windows server上的docker ee版 来说,docker desktop存在诸多限制。如果您有Windows/linux混合容器要跑,或者在生产环境运行Windows容器,目前最佳环境还是windows server。之前的windows server作为k8s的work node,已经通过了CNCF的官方认证。而红帽等第三方厂家目前已经实现了在k8s上通过虚拟化来实现对windows应用的支持,到底是在k8s中运行windows节点来运行Windows应用,还是在k8s通过虚拟化来运行Windows应用,这个问题让我们拭目以待吧。

更新,由于目前业界都已经开始抛弃docker,微软也于2022年9月开始不再提供docker ee了。

在过渡到 containerd 期间,将继续支持在 AKS 和 AKS-HCI 中运行 Windows Server 容器的客户。微软的决定与Kubernetes 社区最近采取的行动一致,即放弃对 dockershim 的维护,这是 Kubernetes 通过容器运行时接口 (CRI) 保持运行时不可知的努力的一部分。2022 年 9 月末,微软将不再维护 DockerMsftProvider API,客户应前往Mirantis 站点进行安装。寻求 Microsoft 支持的客户在 2022 年 9 月之前仍然可以免费使用 Mirantis 服务,之后客户可以购买 Mirantis 的年度支持合同。客户可以选择使用来自开源Moby 项目的运行时运行他们的 Windows Server 容器。请注意,Moby 项目不为Mirantis Container Runtime 中的几个企业功能提供正式支持。

这也就是说,之前docker把docker ee出售给了Mirantis,在2022年9月之后,需要花钱购买相关服务了。或者转向containerd。或者转向开源Moby项目。

win10支持docker的blog

标签: #docker中运行windows