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/](https://docs.docker.com/docker-for-windows/wsl/)

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

> **Download**
>
> Download [Docker Desktop Stable 2.3.0.2](https://hub.docker.com/editions/community/docker-ce-desktop-windows/) 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してインストールする。

```powershell
wsl -l -v
```
docker-desktop-dataとdocker-desktopが増えてる。

```powershell
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入れる為のリポジトリの追加し、ちゃんと入ったか確認

```bash
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](https://centos.pkgs.org/8/docker-ce-stable-x86_64/)に無かったので、[CentOS 7 / Docker CE Stable x86_64](https://centos.pkgs.org/7/docker-ce-stable-x86_64/)から。

```bash
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の起動

```bash
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`する。


```bash
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](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`を指定するのが面倒なので設定しておく

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

# 参考

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

+ [https://qiita.com/SHIRANO/items/ebd007ba148b4651a5df](https://qiita.com/SHIRANO/items/ebd007ba148b4651a5df)

+ https://qiita.com/tettsu__/items/85c96850d187e4386c24
+ [https://qiita.com/neight0903/items/695f8547b41d2ba9e9c0](https://qiita.com/neight0903/items/695f8547b41d2ba9e9c0)