我已经在 Windows 10 上安装了 Docker Desktop 和 Ubuntu 20.04 [Microsoft Store],并且发现我有三个发行版 [如下],但我想摆脱docker-desktop
和docker-desktop-data
,因为我不需要那么多,而且只想用于Ubuntu-20.04
我的 Docker 实验:
PS $ wsl -l -v
NAME STATE VERSION
Ubuntu-20.04 Running 2
docker-desktop-data Running 2
docker-desktop Running 2
- 我知道
docker-desktop-data
它包含镜像并docker-desktop
包含 Docker 基础设施,但我仍然不清楚,也感到困惑
我该如何删除它们以及我需要它们吗?
答案1
我昨天在 Stack Overflow 的评论中提到了这一点,但现在我有机会尝试一下,并且它按预期运行......
Docker Engine 将在单个 WSL2 实例中正常运行(但有一个已知警告,请参阅下面的解决方法),这听起来正是您真正想要的。
Docker Desktop 确实在基础 Docker Engine 上提供了一些附加功能:
- 它可以在多个 WSL2 实例之间共享
- 它可以从 PowerShell 和 CMD 运行
- 它提供了容器和卷的 GUI 仪表板
- 它可以处理自动升级(尽管有些人可能认为这不一定是一个优势)
- 这是一种便捷的方法,可以自动为您处理下面所有其他的内容。
如果您不需要这些功能,那么:
- 备份现有 Docker Desktop 安装中的所有卷和映像
- 卸载 Docker Desktop(两个引用的
docker-desktop.*
实例将被删除) - 可选但建议:重新启动 Windows,或者至少
wsl --shutdown
- 按照以下说明在 Ubuntu 实例中安装 Docker Engine正常指令。为了回答这个问题,请使用“从包安装”,现在只需执行步骤 1 和 2。该
docker run
示例还无法运行。 - 正常的 Docker 包安装将尝试启动守护进程,但这在 WSL 上不起作用,因为没有运行级别、启动脚本、systemd 等概念。您需要通过手动启动它
sudo service docker start
。 - 现在您可以运行该示例
sudo docker run --rm hello-world
(为什么 Docker 文档中没有这个--rm
内容,我不明白)。然后使用 清理它sudo docker rmi hello-world
(在我看来,这也应该是文档的一部分)。 - 继续执行安装后步骤,以允许您的普通用户无需安装即可运行 Docker
sudo
。
之后,Docker 文档中的下一步是使其能够在启动时运行。这在 WSL 上不起作用,因为没有“启动”的概念。因此,您需要一种替代方法来确保引擎在 WSL 中运行。当然,sudo service docker start
当您需要它时,它可以只是一本手册。或者,如果您愿意,您可以将以下内容添加到您的~/.bashrc
:
wsl.exe -u root -e sh -c "service docker status || service docker start"
还有其他方法,但这只是一个例子。
答案2
我该如何删除它们?我需要它们吗?
如果删除它们,则会破坏您的 Docker 配置。
现在我想摆脱这两个。我不需要那么多。
实际上你需要它们两者。Docker 自己已经解释了它们存在的原因:
新的 WSL 后端设计与此非常接近,不同之处在于我们不在 VM 中运行 LinuxKit 发行版,而是在容器中运行。
这将为您创建 2 个 WSL 发行版:
Docker-desktop,我将其称为引导发行版
Docker-desktop-data,我将其称为数据存储发行版
从高层次的角度来看,引导发行版基本上取代了 Hyper-V,而数据存储发行版取代了我们之前附加到 VM 的 VHD。
答案3
我该如何删除它们以及我需要它们吗?
如果您喜欢 Docker Desktop 真正使不同发行版能够相互通信的集成优势,那么您不应该删除它。
docker 桌面数据,docker 桌面 disto 是 Docker Desktop 架构的一部分。
这三篇文章总结得很好。