前言

Docker 是一组平台即服务(PaaS) 产品,它使用操作系统级虚拟化以称为容器的包形式交付软件。托管容器的软件称为Docker Engine -- Wiki (Docker)

Docker 的最佳环境是Linux, 但在实际工作场景中,我们并不能总是渴求你的公司能给你一台Linux,如果恰巧你拿到的 Windows 还带有虚拟化的能力,那是最好不过的了,你可以使用基于 Hyper-V 的全功能的 Docker, 但如果你很不凑巧,既没有拿到Linux, 也没有得到 Windows 的虚拟化,那么本篇将帮助你在没有启用虚拟化的 Windows 中得到 90% 的 Docker 能力。

系统要求

只要你的操作系统版本高于以下系统,那么你就可以在你的环境中搭建 Docker

  • Windows Server 2016
  • Windows 10 20H2

系统的不同的发行版本例如 Standard Enterprise Datacenter Web Core only 都不会影响你部署Docker , 请尽情选择版本,在对Windows 进行最基本的配置之后,我们将全程使用 SSH Bash 操作, 不会再对系统进行更多的操作,所以桌面不是必须的

本篇示例基于 Windows Server 2022

Step 1 - 安装 Git

Git 的网站在这里,本文并不想做过多的解释。

https://git-scm.com/

下一步...

下一步......

下一步.........

恭喜你完成了 Git 的安装

Step 2 - 安装 OPEN SSH

安装

我们希望尽可能的实现于 Linux 下的 Docker 一致的体验,那么Powershell 自然不是我们的首选。使用 Powershell 执行下面这段命令为你的服务器启用 ssh 的能力

#安装 OpenSSH 客户端
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

#安装 OpenSSH 服务端
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# 启动 OpenSSH 服务
Start-Service sshd


# 将 OpenSSH 服务设置为开机启动
Set-Service -Name sshd -StartupType 'Automatic'

# 配置防火墙允许 22 端口的连接
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
    Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
    New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
    Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
}

file

默认情况下Windows的 openssh 服务端不允许 含有管理员权限的账户 通过常规方式添加连入的 SSH 公钥,你需要将你的公钥添加到 __PROGRAMDATA__/ssh/administrators_authorized_keys 文件中,如果你想去掉这个规则,需要注释 %programdata%\ssh\sshd_config 文件中的 Match Group administrators 内容

配置默认命令行程序

我们将之前安装的 Git Bash 设置为默认的SSH命令行工具

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\Git\bin\bash.exe" -PropertyType String -Force

Step 3 - 安装 Docker CE

安装 Docker 是这里面最简单的一步了,只需要简单执行它

注意,此安装脚本可能会重启你的电脑,请保存好资料再执行它

Invoke-WebRequest -UseBasicParsing "https://raw.githubusercontent.com/microsoft/Windows-Containers/Main/helpful_tools/Install-DockerCE/install-docker-ce.ps1" -o install-docker-ce.ps1
.\install-docker-ce.ps1

Hello, World!

现在我们可以直接使用 ssh 连接我们的 Windows. 来体验一下基于 Windows Continer 的 Docker

第一个 Image

docker run -d --name hello-world -it mcr.microsoft.com/windows/nanoserver:ltsc2022 cmd.exe

docker ps

file

芜湖~

结语

Docker 在 Windows 下已经走过了 9 年时间, 然而它仍然有不少值得注意的问题。

本文撰写时,我就遇到了一个有关于 Windows Continer 版本的 Docker 无法正确处理信号的问题

它导致我们在执行 docker stop [ContinerID] 时可能会杀掉你的程序而不触发正确的关机指令

虽然坑还有很多,期待我的下一篇内容