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)](https://download.docker.com/win/stable/Docker Desktop Installer.exe)から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デーモンが動いてないと言われる...。
同じ問題を抱えてる人が結構いるみたいなのでバグ...?
普通に動いてる人もいるみたいだし、私も再起動とかしてると動いたりまた動かなくなったりする。
よく分からないのでまた調べて解決したら追記します。
以下は、動いた場合にするTODO
毎回 -H tcp://localhost:2375
を指定するのが面倒なので設定しておく
echo "export DOCKER_HOST=tcp://localhost:2375" >> ~/.bashrc && source ~/.bashrc
参考
以下を参考にさせていただきました。