docker for windows (Docker Desktop WSL 2 backend)導入メモ


wsl2とdockerについて

wsl2は完全なlinuxなので普通にlinuxにdockerを入れる手順を試してみましたが、どうやらwsl2ではまだ(?)systemdが使えないらしくdockerを起動しようとしたところで詰みました。

完全なlinuxといいつつもそういった制限はあるみたいです。

だからDocker Desktopが必要なのですね。ということでdocker for windows(Docker Desktop WSL2 backend)の導入メモです。

Docker Desktop WSL 2 backend

install

  • Docker Desktop

https://docs.docker.com/docker-for-windows/wsl/

上記の手順通りに進めていきます。

Download

Download Docker Desktop Stable 2.3.0.2 or a later release.

このリンク先のGet Docker Desktop for Windows (stable)からDocker Desktop Installer.exeをDLしてインストールする。

wsl -l -v

docker-desktop-dataとdocker-desktopが増えてる。

docker version
docker run hello-world
docker ps -a

hello-worldのimageが増えてる。

vscodeに「Remote – WSL」を入れる

Visual Studio Codeの拡張「Remote – WSL」を入れるとwsl2内で直接vscodeが動かせて便利らしいので入れる。

wsl2上でcode .でvscodeが開くようになる。

centos8にdockerを入れる

systemdは動かないけど、docker for windowsのdockerデーモンを共用するとwsl2内でdockerが使えるようになるらしい。

install

centos8からyumじゃなくてdnfになっている。とりあえずupdate。

dnf - y update

docker入れる為のリポジトリの追加し、ちゃんと入ったか確認

dnf install 'dnf-command(config-manager)' # dnf config-managerコマンドを使えるようにする
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
repolist

dockerをインストール
CentOS 8 / Docker CE Stable x86_64に無かったので、CentOS 7 / Docker CE Stable x86_64から。

dnf -y install wget
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
dnf -y install containerd.io-1.2.6-3.3.el7.x86_64.rpm
dnf -y install docker-ce docker-ce-cli 

dockerの起動

systemctl start docker

System has not been booted with systemd as init system (PID 1). Can't operate.

ぐぐってみると、WSL 2 ではまだsystemdが使えないらしい。

Docker Desktopのデーモン共用

Docker DesktopのSettings>GeneralのExpose daemon on tcp://localhost:2375 without TLSにチェックを入れてApply & Restartする。

docker -H tcp://localhost:2375 ps -a

Cannot connect to the Docker daemon at tcp://localhost:2375. Is the docker daemon running?

dockerデーモンが動いてないと言われる...。

https://forums.docker.com/t/wsl-and-docker-for-windows-cannot-connect-to-the-docker-daemon-at-tcp-localhost-2375-is-the-docker-daemon-running/63571/10

同じ問題を抱えてる人が結構いるみたいなのでバグ...?
普通に動いてる人もいるみたいだし、私も再起動とかしてると動いたりまた動かなくなったりする。
よく分からないのでまた調べて解決したら追記します。

以下は、動いた場合にするTODO
毎回 -H tcp://localhost:2375を指定するのが面倒なので設定しておく

echo "export DOCKER_HOST=tcp://localhost:2375" >> ~/.bashrc && source ~/.bashrc

参考

以下を参考にさせていただきました。