WSL2でSystemDを動かしてUbuntuでDesktopなしDocker開発環境準備
みんな大好きDocker Desktop
関連記事:
前回この記事を書いた
WSLが公式にSystemDをサポートするらしい
面白いニュースだったので、
あまりやらない速報記事を書いたのだが、
(・ω・) ・・・やってみるか
と思い立ったので、
まだリリースされてないWSL最新版を使って実際に動かしてみる。
Insider Programならdevアップデートで使えるはず。
題材にはみんな大好きDocker Desktopを使わないWSL Dockerを使う。
ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪
------------------- ↓ 本題はここから ↓-------------------
windowsとwslをアップデート
build 25206 にしておいた。
wsl --version
WSL バージョン: 0.67.6.0
カーネル バージョン: 5.15.62.1
おk
Ubuntuのインストール
Sytemdにすでに対応しているUbuntu-22.04ではなく、
Ubuntu-20.04を別途用意。
wsl --install Ubuntu-20.04
Ubuntu 20.04 LTS は既にインストールされています。
Ubuntu 20.04 LTS を開始しています...
Ubuntuのコンソールでユーザーパスワードを作成および最新状態にしておく。
sudo apt update && sudo apt upgrade -y
SystemD確認
設定前状態確認
ps axuw
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 2412 1668 ? Sl 21:19 0:00 /init
root 47 0.0 0.0 2428 108 ? Ss 21:19 0:00 /init
PID1に /init
が鎮座している
wsl.confの設定
wslの設定ファイルを追加
windows側ではなくゲストOS側に設定するようだ。
[boot]
systemd=true
windowsに戻ってwslを再起動、
再度wslを起動
wsl --shutdown
wsl -d Ubuntu-20.04
設定後状態確認
さて、どんな感じかな。
ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 21:31 ? 00:00:00 /lib/systemd/systemd --unit=graphical.target
root 2 1 0 21:31 ? 00:00:00 /init
root 51 1 0 21:31 ? 00:00:00 /lib/systemd/systemd-journald
(・o・) いっぱい起動してた
PID1にはsystemdが居座っている。
Docker Engineのインストール
ここからは通常のdockerインストール。
手順に従って普通に入れてみる
Linux版のDocker Desktopを入れるのではなく、
Docker Engineを入れるので間違えないように
https://docs.docker.com/engine/install/ubuntu/
dockerリポジトリの登録
まずはdocerリポジトリを登録。
インストール済みのものはついでに削除
sudo apt-get remove docker docker.io containerd runc
sudo apt-get install ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Docker Engineのインストール
dockerリポジトリを登録できたので、
そこからdockerをインストール
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin net-tools
aptで入れてるので特にsystemctlコマンドを使う必要は無いはず。
試しにservice状態を確認すると
sudo service --status-all
[ - ] apparmor
・・・
[ + ] dbus
[ + ] docker
ちゃんと登録されてる。
起動確認
これで最新版がインストールできたはず。
では起動してみる
sudo service docker start
sudo docker run hello-world
・・・
Hello from Docker!
sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 12 months ago 13.3kB
rootfullモードで動作確認完了
sudo usermod -aG docker $USER
sudo service docker restart
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 12 months ago 13.3kB
rootlessモードで動作確認完了
再々起動で動作確認
ではwsl再起動して状態を確認する
exit
wsl --shutdown
wsl -d Ubuntu-20.04
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 12 months ago 13.3kB
(・∀・)動いてる!
これでwsl起動すればdockerバックエンドが起動した状態になってる。
------------------- ↓ 後書きはここから ↓-------------------
sysetmdが起動するのは時間が掛かるので、
常時使用するOSがあればWindows起動時にブートしておく方が良いかもしれない。
(手順は知らないけど)
既存のOSには使えるのか?
結論を言えばちゃんと動く。
distrodでは動かなかったArchでもwsl.confを弄るだけで動くのは楽で良い。
Discussion