不使用Docker Desktop的前提下,使用Docker的方法
概述
本文将介绍在不使用Docker Desktop for Windows的情况下,将”docker.com的Docker(Docker Engine)”安装到WSL2环境的步骤。
本文只针对Windows操作系统,不涉及Mac。
通过实施本文的内容,可以实现以下事项。
-
- docker.com の Docker が WSL2 環境にインストールされ、WSL2 のコマンドラインで docker compose コマンドなどが使用できるようになります。
-
- 起動したコンテナに対して Windows の VSCode からアタッチして、コンテナ内のリソースやソースコードを操作することが可能になります。
- WSL2 が起動するタイミングで docker サービスが自動的に起動するようになります。
以下一些事情無法執行。
-
- Windows の Powershell などから docker コマンドを実行することはできません。
kubectl コマンドは使えません。(別途インストールが必要になりますが未検証です。)
Docker Desktop for Windows にあった GUI による操作はできなくなります。
Docker Desktop for Windows の Extensions は使用できなくなります。
卸载 Docker Desktop
如果已经安装了Docker Desktop for Windows或者替代的Rancher Desktop之类的软件,请先卸载它们。
确认WSL2的安装状态
确认Windows的版本
请查看 [系统] > [详细信息],确认 Windows 的版本为22H2。同时确认其为 Home/Pro/Enterprise 版本之一。
如果不是 22H2,则更新 Windows 为 22H2。
确认WSL2的状态
有两种WSL2版本可供选择,分别是“内置版”和“商店版”。
为了完成本文所述的内容,需要安装“商店版”的WSL2。
您可以使用wsl –version命令来确定已安装的WSL2版本。
另外,我们还要确认安装了“Store版”后,通过 wsl -l -v 命令确认Ubuntu版本是否为“版本2”,且标有“默认(以*开头)”。
PS C:\Users\tadashi.oya> wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
(...省略...)
确认「商店版本」
如果使用”wsl –version”命令显示版本信息,则表示已经安装了”Store版本”的WSL2。
请继续进入下一节。
PS C:\Users\tadashi.oya> wsl --version
WSL バージョン: 1.1.6.0
カーネル バージョン: 5.15.90.1
WSLg バージョン: 1.0.50
MSRDC バージョン: 1.2.3770
Direct3D バージョン: 1.608.2-61064218
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows バージョン: 10.0.19045.2846
如果是”收件箱版本”的情况
如果在运行 wsl –version 命令时显示帮助信息,则表示正在运行“内置版”WSL2。
PS C:\Users\tadashi.oya> wsl --version
コマンド ライン オプションが無効です: --version
Copyright (c) Microsoft Corporation. All rights reserved.
使用法: wsl.exe [Argument] [Options...] [CommandLine]
(...省略...)
--unregister <Distro>
ディストリビューションの登録を解除し、ルートファイルシステムを削除します。
在这种情况下,您可以通过运行”wsl –update”命令来安装商店版。
PS C:\Users\tadashi.oya> wsl --update
请确认通过运行wsl –version命令是否安装了“商店版”,然后继续下一节。
如果既没有安装商店版本也没有安装收件箱版本,请进行安装。
在本作者的环境中,无论是“Store版”还是“Inbox版”,都未安装wsl –version等命令的执行结果。我无法确认版本信息或帮助消息,可能会输出某种错误提示。
通过使用管理员权限的PowerShell等工具,执行wsl –install命令即可安装WSL2存储版和Linux发行版Ubuntu。
可以查阅以下的官方文档。
-
- https://learn.microsoft.com/ja-jp/windows/wsl/basic-commands
- https://learn.microsoft.com/ja-jp/windows/wsl/install
启用systemd
要求安装「商店版」的 WSL2。
创建/etc/wsl.conf
创建/etc/wsl.conf文件。
您可以选择使用vi或nano手动创建,或者通过复制并粘贴以下内容sudo cat >/etc/wsl.conf <<[EOF]至[EOF]来创建。
PS C:\Users\tadashi.oya> ubuntu
tadashi@DESKTOP-CRHC3IF:~$ sudo cat >/etc/wsl.conf <<[EOF]
[boot]
systemd=true
[EOF]
tadashi@DESKTOP-CRHC3IF:~$ cat /etc/wsl.conf # 中身を確認する
[boot]
systemd=true
如果能创建/etc/wsl.conf文件,则使用wsl –shutdown命令重新启动WSL2。
PS C:\Users\tadashi.oya> wsl --shutdown
确认systemd已启用。
使用”systemctl status”命令来确认启动状态是否显示在列表中。
PS C:\Users\tadashi.oya> ubuntu
tadashi@DESKTOP-CRHC3IF:~$ systemctl status
● DESKTOP-CRHC3IF
State: degraded
Jobs: 0 queued
Failed: 3 units
Since: Fri 2023-04-14 21:50:31 JST; 10s ago
CGroup: /
├─user.slice
│ └─user-1000.slice
│ ├─user@1000.service
│ │ └─init.scope
│ │ ├─891 /lib/systemd/systemd --user
│ │ └─892 (sd-pam)
(...省略...)
启用systemd后,systemd本身会被启用,但会显示状态为degraded或Failed:3 units等。
在不同的环境中,关于失败的数量可能会有所不同。
即使出现了 Failed 的情况,也可以继续进行 Docker 安装,但如果有顾虑的话,可以进行处理,将状态设置为 running,Failed 单元数为 0。
处理 systemd 的失败
在不同的环境下,造成失败的原因各不相同。以下是一个示例。
使用 systemctl –failed 命令,将列出失败的服务。
tadashi@DESKTOP-CRHC3IF:~$ systemctl --failed
UNIT LOAD ACTIVE SUB DESCRIPTION
● ssh.service loaded failed failed OpenBSD Secure Shell server
● systemd-remount-fs.service loaded failed failed Remount Root and Kernel File Systems
● multipathd.socket loaded failed failed multipathd control socket
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
3 loaded units listed.
ssh服务
因为不使用SSH服务,所以我们会将其禁用。
tadashi@DESKTOP-CRHC3IF:~$ sudo systemctl disable ssh.service
Synchronizing state of ssh.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable ssh
Removed /etc/systemd/system/sshd.service.
Removed /etc/systemd/system/multi-user.target.wants/ssh.service.
例2:多路径守护程序。
由于不使用 multipathd,因此将其禁用。
被显示为错误的是 multipathd.socket,但要停止的是 multipathd.service。
tadashi@DESKTOP-CRHC3IF:~$ sudo systemctl disable multipathd.service
Removed /etc/systemd/system/multipath-tools.service.
Removed /etc/systemd/system/sysinit.target.wants/multipathd.service.
Removed /etc/systemd/system/sockets.target.wants/multipathd.socket.
例3:systemd-remount-fs.service 升级到最新版本提示
如果您在终端中使用 systemctl status 命令,您可以确认 systemd-remount-fs.service 的状态。
tadashi@DESKTOP-CRHC3IF:~$ systemctl status systemd-remount-fs.service
● systemd-remount-fs.service - Remount Root and Kernel File Systems
Loaded: loaded (/lib/systemd/system/systemd-remount-fs.service; enabled-runtime; vendor preset: enabled)
Active: failed (Result: exit-code) since Wed 2022-11-30 21:55:55 JST; 15min ago
Docs: man:systemd-remount-fs.service(8)
https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
Process: 60 ExecStart=/lib/systemd/systemd-remount-fs (code=exited, status=1/FAILURE)
Main PID: 60 (code=exited, status=1/FAILURE)
Nov 30 21:55:55 DESKTOP-CRHC3IF systemd-remount-fs[66]: mount: /: can't find LABEL=cloudimg-rootfs.
Warning: journal has been rotated since unit was started, output may be incomplete.
我会用汉语原生地重新表达这个句子,只提供一个选项:
这样表示。
Nov 30 21:55:55 DESKTOP-CRHC3IF systemd-remount-fs[66]: mount: /: can't find LABEL=cloudimg-rootfs.
因此,由于无法找到 LABEL,所以将使用 e2label 命令为其添加 LABEL。
tadashi@DESKTOP-CRHC3IF:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
(...省略...)
/dev/sdc 263112772 2830428 246844188 2% /
(...省略...)
tadashi@DESKTOP-CRHC3IF:~$ sudo e2label /dev/sdc cloudimg-rootfs
确认 systemd 的故障已经解决。
在关闭wsl后,使用systemctl status命令来确认状态为”running”或”Failed: 0 units”。
PS C:\Users\tadashi.oya> wsl --shutdown
PS C:\Users\tadashi.oya> ubuntu
tadashi@DESKTOP-CRHC3IF:~$ systemctl status
● DESKTOP-CRHC3IF
State: running
Jobs: 0 queued
Failed: 0 units
(...省略...)
安装Docker引擎
按照官方文档的指示,安装docker.com上的Docker(Docker Engine)。
安装Docker Engine主体
执行“使用apt存储库安装” 在公式文档中的步骤。
使用apt源安装
章节的结构不容易辨认,
从软件包安装
直到之前是“使用apt存储库安装”。
让普通用户能够运行 Docker
执行”以非root用户身份管理Docker”的公式文档。
使用非root用户管理Docker
创建docker组。
将你的用户添加到docker组中。
注销并重新登录,以重新评估你的组成员身份。
验证你是否可以无需sudo运行docker命令。
只需要一个选择,以下是对其本地中国汉语的释义:
给出了4个步骤,但请在“安装Docker Engine核心”时进行操作。
创建一个名为docker的用户组。
应该已经完成了。检查/etc/group文件是否添加了docker组。
tadashi@DESKTOP-CRHC3IF:~$ grep docker /etc/group
docker:x:1001:tadashi
确认已经添加了Docker组后,执行从“2. Add your user…”到“4. Verify…”的步骤。
要在 VSCode 中连接到容器,可以:
需要在 VSCode 连接到 WSL2 的状态下执行附加到容器的操作。
如果VSCode连接到WSL2
当VSCode左下角(绿色显示区域下的齿轮图标)处于”WSL:Ubuntu”状态时,可以附加到容器。
如果 VSCode 没有连接到 WSL2(出现错误的情况下)
如果在VSCode的左下角(綠色顯示區域下方的齒輪圖標)顯示”沒有任何連接”,即使容器已經啟動,也無法找到。
这是因为 Windows 无法在 WSL2 中检测到容器的启动状态。
Ubuntu软件包更新
建议在每天工作开始的时候执行 apt-get update 和 apt-get upgrade 命令来更新 Ubuntu。
以下是在没有可更新的软件包的情况下:
tadashi@DESKTOP-CRHC3IF:~$ sudo apt-get update
[sudo] password for tadashi:
Hit:1 https://download.docker.com/linux/ubuntu focal InRelease
Hit:2 http://archive.ubuntu.com/ubuntu focal InRelease
Get:3 http://archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
Get:4 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB]
Get:5 http://archive.ubuntu.com/ubuntu focal-backports InRelease [108 kB]
Fetched 336 kB in 3s (130 kB/s)
Reading package lists... Done
tadashi@DESKTOP-CRHC3IF:~$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.