WSL2 on Dockerをやってみたくなった。
前提とゴール
前提
- WSL2導入済み
- 考えるのが面倒なのでデフォルトWSLがUbuntu20系であること
ゴール
- Windows起動とともにDockerデーモンの起動は求めない
- 面倒なのでsudoしないでdockerの操作をしたい
- WSLでシェルに入ったらせめて自動起動させたい
- Windows側からDockerのクライアントを使って操作しようとか考えない(Volume問題あるので)
- VSCodeでいい感じに使えるようにする
大まかな流れ
やってみよう
Distrodのインストール
DistrodはSystemdが動かない、WSLのためのツールでWSL上でSystemdが動作するようになります。
ただし、Windowsと連携はしないのでWSL起動すると動作をはじめる形のようです。
実際にはWindowsの設定を変更することでWindowsと同時に起動するようにできるようですが、そちらの設定は行いません。
インストールはWSL上で行い、公式通りに行うと下記の通りです。
一点だけcd ~をして自身のホームディレクトリで実行するようにしています
また最後の行でDistrodを有効にします
cd ~
curl -L -O "https://raw.githubusercontent.com/nullpo-head/wsl-distrod/main/install.sh"
chmod +x install.sh
sudo ./install.sh install
sudo /opt/distrod/bin/distrod enable
一旦WSLから抜けて、Powershell上でWSLを一旦停止します。
(次回起動後から有効になります)
wsl -t "Ubuntu-20.04"
wsl -l -v を実行すると停止しているのがわかります。
Docker Engineのインストール
公式の手順をずらずら~と並べるとこんな感じです。
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
ここまでくればインストール完了していますので sudo docker run hello-world を行い動作確認をします
Docker系のコマンドでsudoつけなくて済むようにします
ただしセキュリティ的にはあんまりよろしくないってどこかで見た記憶がありますので、各々の責任でよろしくお願いいたします。
sudo gpasswd -a $USER docker
一旦WSLから抜けて、入りなおせばdockerコマンドはsudoなしで動作するようになります
Docker Compose (V2)のインストール
なんか時代はV2らしいのでそちらをインストールします。
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
あとは docker compose versionとかやって動作すればOKです。
VSCodeでいい感じに使えるようにする
WindowsでDockerコマンドは使えませんが、VSCodeのRemoteContainer機能の設定でWSL側のdockerを使うという素晴らしい機能があります。
下記の画像のあたりです。この辺を編集してみるといいかもしれません。
あ、ポートフォワードの話
Windowsの自分のホームディレクトリに .wslconfig というファイル名で下記のような内容でファイルを作成するとよいかもしれません。
Dockerとかでポートを開いたとき、localhostでアクセスできるようになります
[wsl2]
localhostForwarding=true
最後に
DockerDesktopなくても何とかなるもんですねぇというか、VSCodeのRemoteContainer機能には脱帽です。まさか直接WSLのDockerを操作してくれるとは思いませんでした。
これでWindowsにDockerコマンドがなくてすみました。
参考にしたサイトなど
色々検索して色々お世話になりました。抜けもありますけどこの辺参照しております。
どうでもいいこと
WSL2のインストールでWSL2対応のカーネルをダウンロードしてインストールするように書いてあるBLOGとかよく当たったのですが、今は
wsl --update
で更新できませんかね?
あと
カーネルの自動更新を受け取るには、 Windows Update の設定を有効にしてください:' Windowsの更新に、その他のMicrosoftの製品 の更新情報を受け取る'。
て表示されてたので自動更新にもできそうです。
Discussion