2024年,在 Windows 上通过二进制文件安装 Docker Engine
在 Docker 的官网文档《Install Docker Engine》中,列出了不同操作系统下安装 Docker Engine 的方式。对于 Windows 系统,推荐的方式是安装 Docker Desktop。但是要注意,Docker Desktop 是一个商业软件,对于大型企业,需要购买授权协议(Commercial use of Docker Desktop in larger enterprises (more than 250 employees OR more than $10 million USD in annual revenue) requires a paid subscription)。现在是 2024年,在 Windows 上安装 Docker 的另一种方式是通过二进制文件中安装。
官方文档 🔗
Docker的官网的《Install Docker Engine from binaries》 一文介绍了从二进制文件中安装Docker的方法,其中的《Install server and client binaries on Windows》小节介绍了在 Windows 上的安装方法。
特别注意 🔗
官网文档提到:
Binary packages on Windows include both dockerd.exe and docker.exe. On Windows, these binaries only provide the ability to run native Windows containers (not Linux containers).
也就是说,在 Windows 上通过二进制文件安装的 Docker,只能运行 Windows 容器,不能运行 Linux 容器。当尝试拉取 Linux 容器时,会遇到如下问题:
> docker pull --platform linux python:3.12.8-slim
3.12.8-slim: Pulling from library/python
no matching manifest for linux/amd64 10.0.22621 in the manifest list entries
安装步骤 🔗
按照官网的文档,即可轻松完成安装。但是要真正使用起来了,还是需要一些其他的配置,以下进行了记录。
解压二进制文件并注册服务 🔗
首先下载最版版本的二进制文件的压缩包。这个压缩包里其实只有2个文件: dockerd.exe
和 docker.exe
。它们分别是 Docker 的服务器程序和客户端程序。以 Administrator 打开 Powershell 窗口,然后参考文档,解压和安装服务:
PS C:\> Expand-Archive /path/to/<FILE>.zip -DestinationPath $Env:ProgramFiles
PS C:\> &$Env:ProgramFiles\Docker\dockerd --register-service
PS C:\> Start-Service docker
此时即可使用 docker.exe
与 Docker Daemon 交互,需要注意:只能以 Administrator 的身份与之交互。
下一个步骤就是使用 docker
命令验证安装是否成功了。不幸的是,目前在国内无法之间访问 Docker Hub,因此不能直接通过运行容器的方式进行验证。如果不同直接访问拉取 Docker Hub上的镜像,那么需要一些魔法。
设置 Docker Daemon 的代理(可选) 🔗
如果当前有可连接到Docker Hub的服务器,那么可设置 Docker Daemon 的代理服务器以拉取镜像。官方文档见《Daemon proxy configuration》。具体如下:
- 以 Administrator 打开
C:\ProgramData\docker
文件夹,在该文件夹中创建文件daemon.json
。 - 在
daemon.json
中设置代理服务器并保存。内容可参考文档中的示例:{ "proxies": { "http-proxy": "http://proxy.example.com:3128", "https-proxy": "https://proxy.example.com:3129", "no-proxy": "*.test.example.com,.example.org,127.0.0.0/8" } }
- 重启 docker 服务。可在 Powershell 中执行:
PS C:\> Restart-Service docker
- 运行
docker info
查看代理是否设置成功。
验证 docker 是否安装成功 🔗
依然在 Powershell 窗口中进行验证:
PS C:\> &$Env:ProgramFiles\Docker\docker run hello-world:nanoserver
将 docker
添加到系统路径中 🔗
如果每次运行 docker.exe
的全路经来执行 docker
命令,那也太麻烦了。为此,可将 docker.exec
所在的文件夹,添加到系统路径中。修改系统路径的方式有多种,可以在图形界面修改,也可以通过脚本修改。
通过命令行提示符脚本修改系统路径 🔗
- 以 Administrator 打开命令行提示符(Command Prompt)。
- 使用
echo
打印当前的系统路径的值,并复制备份。以便在下面设置过程中出错时,可以轻松恢复:echo %path%
- 通过
setx
设置系统路径:setx /M path "%path%;C:\Program Files\docker\"
- 再次查看系统路径,确保其中包含了
docker.exe
所在的文件夹:echo %path%
重启 Powershell 或者命令提示符,然后执行 docker info
。如果没有报错信息,说明 docker.exe
已经在系统路径中了。
使用其他工具连接 Docker Engine 🔗
既然没有安装 Docker Desktop,那么只能通过命令行来查看和管理 Docker了。除了 docker.exe
之外,还有一些第三的工具,比如 moncho/dry 就是一个命令行下的 Docker 管理工具。需要注意的是,此时可能需要设置 DOCKER_HOST
环境变量的值为npipe:////./pipe/docker_engine
。
使用 moncho/dry
连接 Docker Engine API 🔗
经过测试,在命令中直接运行 dry.exe
无法连接 Docker Engine API。错误信息为:
level=info msg="Dry could not start: create Docker client: protocol not available"
参考 dry 文档中的 Usage
,它很可能连接的是 Docker 主机是 unix:///var/run/docker.sock
。这显然是不正确的。参考 Docker 文档中的 《How do I connect to the remote Docker Engine API?》,需要指定 Docker 主机为 npipe:////./pipe/docker_engine
。即使用如下命令连接 Docker Engine API:
.\dry.exe -H npipe:////./pipe/docker_engine
安装其他工具 🔗
使用二进制文件安装的 Docker Engine,并不包含 buildx
和 docker-compose
,因此需要自行安装。为了使用方便,可将它们放在 C:\Program Files\docker\
目录下。
buildx 🔗
安装方法见代码仓库 docker/buildx。
Docker Compose 🔗
见 Docker 的文档《Install Compose standalone》。
结尾 🔗
通过以上的方法,即在 Windows 上运行 Docker。使用这种方式后,不会收到版本更新的提示,那么就需要自己留心了。