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,参见下图:
此外,需要启用“适用于 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