Windows Server 2019下安装并运行WSL与Docker

Windows Server 2019下安装并运行WSL与Docker

Windows Server 2019系统下安装与运行Docker,与Windows 10下比较类似,可以按照微软的官方文档安装,也可以参考Windows 10系统下,直接安装ocker Desktop。在Windows系统下,可以选择使用Windows内核或者Linux内核,如果要使用Linux内核,还需要安装WSL。本文分别介绍了在Windows Server 2019系统下安装WSL(windows内置的Linux子系统)以及通过Docker的方法。

1. Windows Server 2019下安装与配置WSL

服务器版本的Windows没有内置微软商店,因此不能通过Windows商店下载的方法安装WSL,只能通过以下手动的方式。在安装Docker之前,需要启用系统的虚拟化支持功能,不同的电脑BIOS设置略有不同,同时,最好启用windows系统的虚拟机hyperV,参见下图:

启用hyperv
启用hyperv

此外,需要启用“适用于 Linux 的 Windows 子系统”可选功能并重启,然后才能在 Windows 上运行 Linux 发行版。

以管理员身份打开 PowerShell 并运行:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

1.1 下载发行版

根据微软官方文档下载需要的发行版文件。例如,Ubuntu 20.04。如果网络条件导致下载失败,也可关注维思自动化公众号并回复WSL获取下载链接。

以下载的wslubuntu2004文件为例,将该文件重命名为Ubuntu.appx以进行后续操作。

如果没有提前下载该文件,或者需要使用其他发行版,也可以使用以下powershell命令完成下载并将下载文件重命名为Ubuntu.appx。如果下载需要很长时间,请通过设置 $ProgressPreference = ‘SilentlyContinue’ 来关闭进度栏。

Invoke-WebRequest -Uri https://aka.ms/wslubuntu2004 -OutFile Ubuntu.appx -UseBasicParsing

1.2 手动安装WSL

下载了发行版后,导航到包含下载内容的文件夹,并在该目录中运行以下命令,其中 app-name 是 Linux 发行版 .appx 文件的名称。使用以下命令安装wsl发行版

Add-AppxPackage .\app_name.appx
#在本示例中,使用
Add-AppxPackage .\Ubuntu.appx

另一种安装方式。除了上述方式外,也可以手动安装与配置WSL,这在官方文档中也有说明。

#使用 PowerShell 提取 <DistributionName>.appx 包的内容:
Rename-Item .\Ubuntu.appx .\Ubuntu.zip
Expand-Archive .\Ubuntu.zip .\Ubuntu
#使用 PowerShell 将 Linux 发行版路径添加到 Windows 环境路径(在本例中为 C:\Users\Administrator\Ubuntu)
$userenv = [System.Environment]::GetEnvironmentVariable("Path", "User")
[System.Environment]::SetEnvironmentVariable("PATH", $userenv + ";C:\Users\Administrator\Ubuntu", "User")

现在,可以通过键入 .exe 从任何路径启动你的分发版。 例如: ubuntu.exe。也可以通过开始菜单的Ubuntu图标进入WSL,或者在命令行输入Bash命令进入,等等。可以参考WSL的相关文档。

第一次访问Windows系统下的Linux系统时,需要设置Linux系统的用户名和密码。

2. 按照微软官方文档安装并配置Docker

在安装并启用WSL后,可以按照微软官方文档安装并配置Docker。除了以下官方文档的方法,也可以直接下载Docker Desktop并安装启用,直接安装Docker Desktop应该更简单。

2.1 先决条件

Windows Server下的Docker,仅支持基于四种Windows镜像为基础构建容器,不支持基于Linux等系统构建镜像。要在 Windows Server 上运行容器,需要运行 Windows Server 2022、Windows Server(半年频道)、Windows Server 2019 或 Windows Server 2016 的物理服务器或虚拟机。

2.1 安装Docker

要在 Windows Server 上安装 Docker,可以使用由 Microsoft 发布的 OneGet 提供程序 PowerShell 模块(称为 DockerMicrosoftProvider)。 此提供程序启用 Windows 中的容器功能,并安装 Docker 引擎和客户端。 以管理员权限打开 PowerShell ,按照以下顺序操作安装Docker:

# 从 PowerShell 库安装 Docker-Microsoft PackageManagement 提供程序。
# 如果系统提示安装 NuGet 提供程序,还请键入 Y 进行安装。
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force

# 如果在打开 PowerShell 库时遇到错误,则可能需要将 PowerShell 客户端使用的 TLS 版本设置为 TLS 1.2。 为此,请运行以下命令:
# Set the TLS version used by the PowerShell client to TLS 1.2.
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;

#使用 PackageManagement PowerShell 模块安装最新版本的 Docker。
#PowerShell 询问是否信任包源“DockerDefault”时,键入 A 以继续进行安装。
Install-Package -Name docker -ProviderName DockerMsftProvider
#在安装完成后,请重启计算机。
Restart-Computer -Force

#如果希望稍后更新 Docker,请执行以下操作:

#使用以下命令检查安装的版本:
Get-Package -Name Docker -ProviderName DockerMsftProvider
# 使用以下命令查找当前版本:
Find-Package -Name Docker -ProviderName DockerMsftProvider
# 准备好升级后,运行以下命令:
Install-Package -Name Docker -ProviderName DockerMsftProvider -Update -Force
# 最后,运行以下命令以启动 Docker:
Start-Service Docker

2.3 Windows版本Docker配置文件

在 Windows 上配置 Docker 引擎的首选方法是使用配置文件。 可以在“C:\ProgramData\Docker\config\daemon.json” 中找到配置文件。 如果该文件不存在,可以创建它。如果使用的是Docker Desktop,在配置中的Docker Engine选项下可以直接配置。

在国内使用Docker时,由于网络条件原因,需要修改仓库地址为国内镜像,否则可能无法下载镜像或者速度过慢,因此,在daemon.json中最重要的配置如下,下文使用的是Docker的阿里云镜像。阿里云镜像针对每个用户提供了不同的前缀地址,需要在阿里云上面注册一个账号,然后点击控制台——>产品与服务——>容器镜像服务。 此时会弹出开通容器镜像服务通知并要求提供密码,这个密码自己设置好,用于以后登录docker客户端使用。这个时候已经得到加速器地址了,这个加速器地址是私人的,只能自己使用。

{
     "registry-mirrors": [
    "https://<你的专有前缀>.mirror.aliyuncs.com"
  ]
}

该配置文件的其他可选参数如下:

{
    "authorization-plugins": [],
    "dns": [],
    "dns-opts": [],
    "dns-search": [],
    "exec-opts": [],
    "storage-driver": "",
    "storage-opts": [],
    "labels": [],
    "log-driver": "",
    "mtu": 0,
    "pidfile": "",
    "data-root": "",
    "cluster-store": "",
    "cluster-advertise": "",
    "debug": true,
    "hosts": [],
    "log-level": "",
    "tlsverify": true,
    "tlscacert": "",
    "tlscert": "",
    "tlskey": "",
    "group": "",
    "default-ulimits": {},
    "bridge": "",
    "fixed-cidr": "",
    "raw-logs": false,
    "registry-mirrors": [],
    "insecure-registries": [],
    "disable-legacy-registry": false
}

3. Windows系统下选择Docker核心

3.1 Docker核心选择

Windows版本的Docker可以选择基于Windows核心或者Linux核心,在Docker图标上点右键,弹出菜单中可以选择Switch to Windows containers或者Switch to Linux containers来切换Linux核心与Windows核心。当选择Linux核心时,与Linux和Max下使用Docker很接近。单选择Windows核心时,则只能基于Windows基础容器映像创建映像,见下节。

3.2 Windows基础容器映像

Windows 提供了四个容器基础映像,用户可以基于它们进行构建。 每个基础映像都是 Windows 或 Windows Server 操作系统的一种不同类型,其磁盘占用量不同,并带有一组不同的 Windows API。

Windows Server只能下载与安装和主机版本相匹配的Docker基础镜像,这是因为Windows版本的Docker采用了与主机相同的内核。参见将容器主机版本与容器映像版本相匹配

2.4.1 查看操作系统版本

可以采用以下两种方式查看当前操作系统的版本。

#方法 1:在版本 1709 中引入的 cmd 提示符和 ver 命令现在会返回修订版详细信息。
#仅在命令行适用
#返回:Microsoft Windows [Version 10.0.16299.125]
C:\>ver

#方法 2:查询下面的注册表项:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion
#在命令行
C:\>reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion" /v BuildLabEx
#在PowerShell下
PS C:\Users\Administrator> (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\').BuildLabEx
14393.321.amd64fre.rs1_release_inmarket.161004-2338

### 2.4.2 基础映像比较
Windows 容器基础映像本身由 Microsoft 容器注册表 (MCR) mcr.microsoft.com 提供。 这就是针对 Windows 容器基础映像的拉取命令如下所示的原因。

如何选择用作构建基础的合适基础映像? 对大多数用户而言,Windows Server Core 和 Nanoserver 将是最适合使用的映像。 下面简要介绍了每个基础映像:

  • Nano Server 是用于新应用程序开发的超轻型 Windows 产品/服务。
  • Server Core 中等大小,是“提升和迁移”Windows Server 应用的不错选项。
  • Windows 是最大的映像,并且对工作负载具有完整的 Windows API 支持。
  • Windows Server 比 Windows 映像略小,具有完整的 Windows API 支持,并允许你使用更多服务器功能。

2.4.3 选择要使用的容器版本

查询到操作系统内核后,在拉取与使用Docker容器基础镜像时,必须选择对应的版本。例如,操作系统为10.0.17763.2458时,查询DockerHub上上述四个基础镜像的Tag标志,可以看出,Tag 1809或者10.0.17763.2458都有对应的映像,可以采用以下命令拉取,或者在DockerFile中作为基础映像配置。

#以下命令分别对应拉取Tag标签为1809版本的四个不同基础映像
docker pull mcr.microsoft.com/windows/nanoserver:1809
docker pull mcr.microsoft.com/windows/servercore:1809
docker pull mcr.microsoft.com/windows/server/insider:1809
docker pull mcr.microsoft.com/windows:1809

以下命令用于在DockerFile中指定不同基础映像。

FROM mcr.microsoft.com/windows/nanoserver:1809
FROM mcr.microsoft.com/windows/nanoserver:1809-KB4493509
FROM mcr.microsoft.com/windows/nanoserver:10.0.17763.437
FROM mcr.microsoft.com/windows/servercore:ltsc2019

参考文档

微软Windows上的容器官方文档
微软WSL官方文档
Docker官方文档

作者
魏智勇(John)
加入讨论

此站点使用 Akismet 来减少垃圾评论。了解我们如何处理您的评论数据

魏智勇(John)

站长,80后,创业者,擅长工业自动化与信息化技术,熟悉各种PLC,组态软件,熟悉计算机技术,熟悉LabVIEW、C,C#,JavaScript程序设计技术。