在没有 Docker Desktop 的 WSL 2 中安装 Docker

原文 Install Docker in WSL 2 without Docker Desktop

它非常快,只需要几行 shell 脚本。也不需要在 WSL 2 中运行 systemd。

快速跳转: 演示视频

更喜欢视频?这是YouTube上此提示的录制版本。除了介绍以下步骤外,它还涵盖了“为什么”以及这样做的利弊。

这篇文章介绍了如何在 Ubuntu 20.04 和 22.04 上执行此操作,但它应该适用于任何支持运行 Docker 的发行版。我说“应该”是因为我没有亲自尝试过每个发行版,但没有任何迹象表明它不适用于其他发行版。

你将获得与 Docker Desktop 相同的便利性,例如能够在您选择的 Windows 浏览器中访问您在 Docker 中运行的任何 Web 服务,因为此功能是 WSL 2 的本机功能。卷的速度也快如闪电(可与原生 Linux 相媲美)。localhost

如果选择使用 KinD 或任何其他允许在没有 Docker Desktop 的情况下运行 Kubernetes 群集的工具,则还可以选择直接在 WSL 2 中运行 Kubernetes。

步骤 1:卸载 Docker Desktop

由于我们直接在 WSL 2 中安装 Docker,因此无需安装 Docker Desktop 即可完成此操作。

如果以前安装了 Docker Desktop,则可能还需要删除 Docker 添加到 WSL 2 的一些符号链接。

在我的机器上,它在我的 WSL 2 实例中添加了以下 2 个文件:~/.docker

lrwxrwxrwx  1 nick nick   30 Sep 16  2020 contexts -> /c/Users/Nick/.docker/contexts
lrwxrwxrwx  1 nick nick   35 Aug 21 17:24 features.json -> /c/Users/Nick/.docker/features.json

卸载 Docker Desktop 不会删除这些 Windows 路径,因此从技术上讲,事情仍然可以工作,但如果您稍后删除它们,当您尝试在 WSL 2 中运行大多数 Docker 命令时,您最终会收到错误,因为符号链接没有目标。Docker endpoint for "default" not found

步骤 2:在 WSL 2 中安装 Docker/Docker Compose v2

这是基于 Ubuntu 和 Debian 的发行版的精简版本:

# Install Docker, you can ignore the warning from Docker about using WSL
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# Add your user to the Docker group
sudo usermod -aG docker $USER

# Sanity check that both tools were installed successfully
docker --version
docker compose version

# Using Ubuntu 22.04 or Debian 10+? You need to do 1 extra step for iptables
# compatibility, you'll want to choose option (1) to use iptables-legacy from
# the prompt that'll come up when running the command below.
#
# You'll likely need to reboot Windows or at least restart WSL after applying
# this, otherwise networking inside of your containers won't work.
sudo update-alternatives --config iptables

如果您使用的是不同的发行版,则非常相似。Docker 提供了上述步骤的文档。这些步骤来自官方 Linux 安装指南:

步骤 3:确保 Docker 服务在 WSL 2 中运行

在撰写本文时,默认情况下,systemd 不会在 WSL 2 中启动。

我们不需要它,但如果你决定使用较新版本的 WSL 2 启用 systemd,则可以跳过整个步骤!

您所要做的就是将其放入 、.zprofile 或等效文件中:~/.profile

if grep -q "microsoft" /proc/version > /dev/null 2>&1; then
    if service docker status 2>&1 | grep -q "is not running"; then
        wsl.exe --distribution "${WSL_DISTRO_NAME}" --user root \
            --exec /usr/sbin/service docker start > /dev/null 2>&1
    fi
fi

这里的想法是,如果 Docker 服务尚未运行,它将启动。第一次运行时,它会挂起您的终端几秒钟。但是,即使您下次打开终端时关闭它,它也会立即打开,因为 Docker 已经在运行。关闭终端不会停止 Docker,只有重新启动 Windows 或完全关闭 WSL 才会停止。

您可以运行以查看 Docker 守护程序正在运行:ps aux | grep docker

root  8899  ...  /usr/bin/dockerd -p /var/run/docker.pid
root  8908  ... containerd --config /var/run/docker/containerd/containerd.toml --log-level info

打开新终端后,您现在应该能够在没有 .顺便说一句,如果你想更深入地探索使用 Docker 的示例,我在 GitHub 上有一堆开源 Web 应用程序示例docker run hello-world``sudo

提醒一下,WSL 2 仍然存在磁盘空间和内存未回收的问题。无论有没有 Docker Desktop,这都是一个问题。这篇文章介绍了如何控制内存和磁盘空间。

此外,如果您来自 Docker Desktop,并且想要调查磁盘上的映像和卷,则可以在 .您需要成为 root 用户。这是 Docker 在 Linux 上保存文件的默认位置。cd /var/lib/docker

演示视频

时间 戳
  • 0:22 – 通过此设置,一切都运行顺利
  • 0:53 – 为什么我最终从 Docker Desktop 切换
  • 3:18 – 切换与 Docker 桌面许可证成本无关
  • 3:56 – 为什么您可能希望继续使用 Docker 桌面
  • 6:01 – 如果需要,您仍然可以在本地运行 Kubernetes 集群
  • 7:09 – 遵循 Docker Linux 安装指南
  • 8:25 – 将 WSL 2 用户添加到 Docker 组以在不使用 sudo 的情况下运行 Docker
  • 9:44 – 使用 Docker 插件安装 Docker Compose v2
  • 10:44 – 现在我们需要在 WSL 2 中运行 Docker 服务
  • 11:19 – 一小段 shell 脚本以确保 Docker 启动
  • 15:43 – 如何在 WSL 2 中运行 Docker?

你像这样运行Docker吗?请在下面的评论中告诉我!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值