LoginSignup
5
1

More than 1 year has passed since last update.

Windows 11のWSL2(Ubuntu 22.04):systemd + docker環境構築

Last updated at Posted at 2022-07-13

1. はじめに

1.1. 動機

  • 新しくPC(windows 11)を導入しました。
  • これまでデュアルブートでWindowsとLinux(Ubuntu)を切り替えて使っていた運用していましたが、古いPCをLinux専用機にして、新しいPCはWindows主体でWSL2でLinuxで遊ぶ感じで使用しようと思います。
  • 本記事ですが、多くの記事を引用します(各種知見を適用、組み合わせております)。参考資料著者の皆様、誠にありがとうございます。

1.2. 開発環境

  • OS: Windows 11 Pro 21H2
  • CPU: Core(TM) i7-12700
  • RAM: 32GB
  • 利用ツール
    • PowerShell 5.1.22000.653
    • windows termilal 1.13.11432.0

1.3. 参考資料

No. URL 説明
[1] WSL2の Ubuntu 20.04 を 22.04 へアップグレードしてみた 2.2. Ubuntuを22.04にアップグレード で参照
[2] 【WSL2】Ubuntu22.04にアップグレードしたあとにやったこと 2.3. Ubuntu 22.04にアップグレードした後の設定 で参照
[3] WSL2 (Ubuntu 20.04 LTS) と Docker をセットアップしたときにやったこと 2.3. Ubuntu 22.04にアップグレードした後の設定 で参照
[4] Install Docker Engine on Ubuntu 2.4. Dockerインストール で参照

2. 構築

2.1. WSL2でUbuntu 20.04をインストール

  • Powershell を管理者モードで開きます。
  • wslコマンドを使ってインストールします。
    • wsl --list --onlineにて、インストール可能なディストリビューション一覧が表示される。ここでは、Ubuntuを選択する。(2022年7月時点では、Ubuntu 20.04がインストールされます。)
    • MS StoreにもUbuntuアプリがあるが、そちらはpathの自動変換がないようなので使用しません。
  • インストール中に、ユーザ名とパスワードの入力があるので、適当に済ませます。
PS > wsl --list --online
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl --install -d <Distro>' を使用してインストールします。

NAME            FRIENDLY NAME
Ubuntu          Ubuntu
Debian          Debian GNU/Linux
kali-linux      Kali Linux Rolling
openSUSE-42     openSUSE Leap 42
SLES-12         SUSE Linux Enterprise Server v12
Ubuntu-16.04    Ubuntu 16.04 LTS
Ubuntu-18.04    Ubuntu 18.04 LTS
Ubuntu-20.04    Ubuntu 20.04 LTS

PS > wsl --install -d Ubuntu
(インストールが始まる)

2.2. Ubuntuを22.04にアップグレード

  • インストールは参考資料[1]の通りです。
  • Ubuntu 22.04にアップデートする理由は、22.04から組み込まれるwsl-systemd(後述)を利用したいためです。
    • WSL2では、公式ではsystemdを使用できません。サービス起動にはserviceコマンドを利用しています。
    • でも、やはり馴染みのあるsystemdが使えると便利です。

2.3. Ubuntu 22.04にアップグレードした後の設定

  • iptables-legacyの設定は参考資料[2]の通りです。
  • wsl-systemdの設定は参考資料[2]の通りです。/etc/wsl.confの設定まで実施します。
  • systemdの自動起動サービスについては、参考資料[3]をもとに、以下のサービスを停止します。
$ sudo systemctl disable multipathd
$ sudo systemctl disable sshd
$ sudo systemctl disable systemd-remount-fs.service
$ sudo systemctl disable getty@tty1
$ sudo systemctl mask systemd-remount-fs.service
$ sudo systemctl mask systemd-udevd.service
$ sudo systemctl mask snapd.service
$ sudo systemctl disable snap.lxd.activate.service
  • windows termilalには、コマンドラインをC:\windows\system32\wsl.exe ~ -d Ubuntu /usr/libexec/nslogin /bin/bashに変更します。

windows-terminal-setting.png

2.4. Dockerインストール

  • 参考資料[4]の通りにインストールします。
  • dockerコマンドを通常ユーザで実行できるよう、sudo gpasswd $USER dockerでdockerグループを追加します。

3. 起動確認

  • 起動したときのプロセス稼働状態は以下の通りとなります。
    • このとき、必ずjournalctl -xeでジャーナルファイルを確認しましょう。予期せぬコアダンプをしている場合があります。
    • windows terminalのコマンドラインを変更しているので、terminalにログインするとsystemdがPID=1で起動したように見えます。
  • sudo systemctl status サービスを実行すると、systemdでサービスをコントロールできます。ここでの例では、docker.serviceの状態を確認しました。
$ ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  1 00:05 ?        00:00:00 /lib/systemd/systemd --unit=multi-user.target
root          42       1  0 00:05 ?        00:00:00 /lib/systemd/systemd-journald
root          82       1  0 00:05 ?        00:00:00 snapfuse /var/lib/snapd/snaps/core18_1705.snap /snap/core18/1705 -o
root          83       1  0 00:05 ?        00:00:00 snapfuse /var/lib/snapd/snaps/lxd_14804.snap /snap/lxd/14804 -o ro,n
root          84       1  0 00:05 ?        00:00:00 snapfuse /var/lib/snapd/snaps/snapd_7264.snap /snap/snapd/7264 -o ro
systemd+      92       1  0 00:05 ?        00:00:00 /lib/systemd/systemd-networkd
message+      95       1  0 00:05 ?        00:00:00 @dbus-daemon --system --address=systemd: --nofork --nopidfile --syst
root          97       1  0 00:05 ?        00:00:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root          98       1  0 00:05 ?        00:00:00 /usr/libexec/polkitd --no-debug
syslog        99       1  0 00:05 ?        00:00:00 /usr/sbin/rsyslogd -n -iNONE
root         100       1  0 00:05 ?        00:00:00 /lib/systemd/systemd-logind
systemd+     109       1  0 00:05 ?        00:00:00 /lib/systemd/systemd-resolved
root         110       1  0 00:05 ?        00:00:00 /usr/sbin/ModemManager
root         119       1  0 00:05 ?        00:00:00 /usr/sbin/cron -f -P
root         122       1  0 00:05 ?        00:00:00 /usr/bin/containerd
root         124       1  0 00:05 ?        00:00:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-s
root         128       1  0 00:05 tty1     00:00:00 /sbin/agetty -o -p -- \u --noclear --keep-baud console 115200,38400,
root         149       1  1 00:05 ?        00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.so
tomoten      306       0  0 00:05 pts/0    00:00:00 /bin/bash
tomoten      312     306  0 00:05 pts/0    00:00:00 ps -ef

$ sudo systemctl status docker.service
[sudo] password for tomoten:
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-07-14 00:05:33 JST; 5min ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 149 (dockerd)
      Tasks: 15
     Memory: 114.5M
     CGroup: /system.slice/docker.service
             └─149 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
(以下略)

4. おわりに

  • windows terminalからUbuntuを起動すると、体感2秒でUbuntuが使用できるようになるので、ちょっとした検証をしたいときに便利であるとわかりました。
    • systemdの多くの自動起動プロセスをdisableにしているのも効果的なようです。
  • Ubuntuが起動した状態でsystemdが使用可能な状態のため、仮想マシンに近い使用感で扱えるのが良いです。
5
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1