🐳
WSL2の中にDockerをインストールする
はじめに
Docker for Windowsを使わずに、純UbuntuにDockerを入れるような感じでWSL2(Ubuntu20.04)にDockerを入れる手順です。
今までDocker for Windowsを使っていましたが、イメージの保存先を変えてもCドライブ固定になってしまう現象が起きていました。
どうしたもんかいの状態でしたが、別ドライブに移動したWSLの中にDockerをインストールすれば、イメージの保存先を変えることと同じだ!とある日ようやく気づいたのでメモしておきます。
ちなみに保存先を変えたい主な理由は、Cドライブの容量削減です(250GBしかないので…)
環境
- Windows 10
- バージョン:21H2(OSビルド 19044.2604)
- WSL2
- Ubuntu 20.04
- WSLのバージョン:1.1.3.0
後述するsystemd
を使ってDockerを起動させたい場合、WSLのバージョンが0.67.6
以上必要なので注意
インストール
インストール方法は公式を参考にしつつ、
こちらでsystemdを使って起動させるところなどを補完するとよいと思います。
以下、自分が実行したコマンドです。
install method
# 古いDockerが入っているかもしれないのでアンインストール
sudo apt remove docker docker-engine docker.io containerd runc
# 準備
sudo apt update
sudo apt install \
ca-certificates \
curl \
gnupg \
lsb-release
sudo mkdir -m 0755 -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インストール
sudo apt update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Dockerグループに参加
sudo usermod -aG docker $USER
Dockerデーモンの起動
バージョン0.67.6以降のWSLを使っている場合、systemdを使って起動できます。
その場合、WSL内のwsl.conf
ファイルに以下を追記する。
/etc/wsl.conf
[boot]
systemd=true
wsl --shutdown
してWSLを再起動。
docker --version
を実行してエラーが出なければ無事起動できている。
❯ docker --version
Docker version 23.0.1, build a5ee5b1
0.67.6以下の場合、service
コマンドを使うことで起動できる(先のリンクに手順あり)。
動作確認
hello-worldしてみます。
docker run hello-world
無事動作しました。
❯ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:ffb13da98453e0f04d33a6eee5bb8e46ee50d08ebe17735fc0779d0349e889e9
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
最後に
WSLのメモリをもっと増やせばいいかもしれませんが、なんとなく重い気がします(現状8GB割り当て)
Docker for Windowsでイメージの保存先が変えれるようになったら出戻りします😇
Discussion