Windows安装Docker

3,722 阅读8分钟

Docker为我们在服务器上部署应用程序提供了很大的便利,并使得我们能够更好地管理我们部署的应用程序以及一些中间件等等。

不过我们通常在Windows上面进行开发的时候,也需要在本地安装数据库、部分中间件等等,安装多了也很麻烦,或者是开虚拟机模拟一个服务器,这导致了很大的性能开销。

因此,在Windows电脑上面安装Docker,并在本地也将开发调试用的数据库、中间件等容器化管理,是一个非常好的选择。

1,安装WSL2内核

通常Docker Desktop可以使用WSL2或者Hyper-V作为其核心以运行容器,不过官方更加推荐使用WSL2,因为性能更好,因此在安装Docker Desktop之前,最好是先安装一下WSL2内核。

如果之前安装过WSL并使用过子系统,这一步可以跳过。

在安装WSL2内核之前,记得先去主板BIOS设置中开启CPU虚拟化功能(Intel主板是VT,AMD主板是SVM),否则会导致安装失败或者内核启动失败,这里就不再赘述如何开启了,非常简单的,大家自行查阅即可。

然后在Windows中打开cmd或者其它终端,输入WSL2的安装命令:

wsl --install --no-distribution

可见我们安装时加上了--no-distribution参数,表示仅安装内核而不安装任何发行版文件,因为Docker Desktop只是依赖于WSL2内核,不需要任何发行版文件。

等待安装完成后,会提示你重启:

1.png

重启电脑,WSL2内核就安装完成了!

如果说执行上述安装命令时,报错没有--no-distribution选项并输出了很多帮助提示信息,说明你已经安装过WSL2内核了,不需要再重复安装,直接进行下一步安装Docker Desktop即可。

2,安装Docker Desktop

进入官方下载页面,下载Windows版的:

image.png

image-20241110142322350

然后安装,安装时将这两个选项都勾选上:

1.png

等待安装完成:

2.png

第一次安装会提示要重启,点击安装完成界面的Close and restart按钮重启电脑。

重启完成电脑后,Docker Desktop就会自动开启,第一次使用会弹出同意协议的窗口,点击Accept按钮即可,然后进入主界面会显示正在启动Docker Engine,初次启动会要一点时间,耐心等待即可。

3,一些设置

打开Docker Desktop后,点击右上角齿轮图标即可进入设置。

image.png

(1) 开机自启等常用配置

General选项卡中,勾选下图第一个选项Start Docker Desktop when you sign in to your computer,即可开机自启动,推荐打开开机自启动,这样一开机就可以访问我们一些容器的服务:

image-20241110142511316

在这个页面,还有下列配置建议设定:

  • Add the *.docker.internal names to the host's /etc/hosts file 在Hosts文件中配置*.docker.internal域名映射,建议勾选,这样容器内部就可以通过host.docker.internal域名访问到宿主机了,更多信息查看官方文档
  • Open Desktop Dashboard when Docker Desktop starts 每次启动Docker就弹出主面板,建议取消勾选,需要用的时候再在任务栏打开更好
  • Send usage statistics 发送错误报告,可以取消勾选

(2) 国内镜像源配置

拉取镜像通常速度很慢,因为镜像仓库位于国外,这时我们配置一下DockerProxy加速代理即可。

进入Docker Engine选项卡,可见右侧JSON内容就是配置文件:

image.png

在里面添加一个镜像源字段:

"registry-mirrors": ["https://dockerproxy.net"]

最终如下:

image-20250403150556541

注意registry-mirrors的位置!

目前网络上许多教程推荐使用阿里云Docker镜像加速,虽然阿里云Docker镜像速度还不错,但是其镜像缓存更新速度非常慢,缓存内容滞后非常多,导致我们拉取latest镜像的时候发现不是最新版本,甚至比最新版老很多,如果不介意使用的软件版本可以使用阿里云镜像。

此外,如果无法使用镜像,Docker Desktop也会自动检测系统代理。

(3) 自动更新设置

Software updates选项卡中,可以手动检查更新,并且设定是否允许自动检查和下载更新:

image.png

最后,点击右下角Apply & restart按钮即可保存配置。

4,使用docker命令

到此,我们就可以正常使用Docker了!打开命令行或者cmd,即可在里面使用docker命令。

如果仍然提示命令不存在,则将下列路径加入Path环境变量:

C:\Program Files\Docker\Docker\resources\bin

这里命令和在Linux上是一模一样的。这里大家就可以试试去创建一个MySQL镜像运行在本地电脑上并自己连接了!还有其它数据库、中间件等都可以在本地容器化管理,容器端口映射出来后访问127.0.0.1的对应端口,即可访问到对应容器。

5,访问数据卷

在Windows中挂载的数据卷,都是存放在WSL虚拟机中的。我们通过命令行看到的数据卷仍然是Linux路径格式:

image.png

不过我们仍然可以访问,所有的数据卷都存放在\\wsl.localhost\docker-desktop\mnt\docker-desktop-disk\data\docker\volumes路径下,把这个路径粘贴到此电脑(资源管理器)上面地址栏中回车即可:

image-20241110143108484

可以看到我们的具名数据卷,进入可以修改或者增加删除文件等等。

6,WSL2发行版集成

如果我们使用WSL2创建了本地的Linux环境,那么在自己的WSL2发行版中,我们也可以访问到在Windows上安装的Docker及其镜像容器等,无需单独再在WSL2发行版中安装配置Docker,只需开启WSL2集成即可。

进入设置界面,点击左侧栏Resources选项卡下的WSL integration,即可配置Docker的WSL2发行版集成:

image-20241110145716441

此时,你就可以进入你自己的WSL2发行版中,并通过docker命令访问到Windows上的Docker了!

7,数据管理

(1) 彻底清空所有镜像和容器数据

大家如果使用了很长时间的Docker Desktop会发现,即使删除了所有的镜像和容器,Docker的数据映像仍然会占用很大的空间,这是因为使用过程中产生的数据缓存仍然会存放在Docker Desktop的数据映像中无法删除。

事实上,Docker Desktop是基于WSL2的,它将Docker Engine本体与容器镜像等数据分开存放在两个位置:

  • Docker Engine本体:存放在名为docker-desktop的WSL2发行版中
  • 镜像、容器和数据卷等:存放在一个vhdx虚拟磁盘中,默认位于C:\Users\%username%\AppData\Local\Docker\wsl\disk\docker_data.vhdx

要想清空全部数据,先退出Docker Desktop,然后在命令行终端中执行下列命令移除发行版:

wsl --unregister docker-desktop

然后删除存放数据的vhdx虚拟磁盘文件(默认位于C:\Users\%username%\AppData\Local\Docker\wsl\disk\docker_data.vhdx):

image-20241110143622642

这样所有的Docker数据就被彻底删除了!再次启动Docker Desktop,程序会重新创建并初始化发行版与数据vhdx磁盘,不影响后续正常使用。

在旧版本的Docker Desktop中,使用docker-desktop发行版存放Docker Engine本体,使用docker-desktop-data发行版存放镜像、容器和数据卷等数据,也就是说旧版本的Docker Desktop会创建并使用两个WSL2发行版。

而在4.30版本及其后续的Docker Desktop中,只会创建docker-desktop这一个发行版存放Docker Engine本体,并将数据存放在了上述提到的vhdx虚拟磁盘中,不再使用单独的发行版存放数据,这个vhdx磁盘被挂载到了docker-desktop发行版中的/mnt/docker-desktop-disk目录下。

这一部分在Docker Desktop官方文档的最佳实践中有所提到:传送门

(2) 修改镜像和容器的存放位置

Docker Desktop默认情况下只能安装在C盘,并且其镜像和容器也是以vhdx虚拟磁盘映像的形式存放在C盘的,上述我们也提到了Docker Desktop将镜像、容器和数据卷等数据存放在了一个vhdx虚拟磁盘中。随着镜像和容器的数量增加,C盘的空间也会越来越不够用。

虽然暂时无法改变Docker Desktop的安装位置,但是我们仍然可以修改镜像和容器的位置的。

在设置页面中,找到左侧Resources选项卡,在Advanced选项中,即可修改镜像和容器存放位置:

image.png

修改后Docker Desktop会移动数据,移动过程会花费很长时间,需要耐心等待!完成修改后,docker-desktop发行版对应的虚拟磁盘以及存放数据的vhdx虚拟磁盘都会被移动到你指定的目录下。

8,代理服务器问题

Windows上,Docker Desktop会自动检测本机的代理配置并使用,目前没发现如何手动关闭。如果使用了代理服务器,可能在拉取镜像时出现下列错误导致失败:

Error response from daemon: failed to resolve reference "docker.io/library/redis:latest": failed to do request: Head "https://docker.com/v2/library/redis/manifests/latest?ns=docker.io": proxyconnect tcp: dial tcp xxx:xxx: connect: connection refused

这通常是由于Docker Desktop使用的是WSL2作为后台,而WSL2开启了网络镜像模式,导致本地地址解析出错导致。

先退出Docker Desktop,然后修改C:\Users\%username%\.wslconfig配置,将[wsl2]块下面的配置networkingMode=mirrored注释掉或者删掉即可:

image-20250403151128567

然后通过下列命令关闭WSL2服务:

wsl --shutdown

再次启动Docker Desktop,就可以拉取镜像了!