Docker DesktopをWindows 10 HomeにインストールしてWSLからdockerコマンドを実行する。

# 結論

~~インストール・起動は問題ないですが、WSL2からdockerコマンドが使えない場合は、
現状は以下の設定を  `~/.bashrc` などの設定ファイルに追記しておきましょう。~~

【2021年1月25日追記】
Docker Desktop 3.1.0 ではWSL2 Ubuntu側に `/usr/bin/docker -> /mnt/wsl/docker-desktop/cli-tools/usr/bin/docker*` のシンボリックリンクが張られるようになったので、以下の設定は不要になりました。

```bash:~/.bashrc
alias docker='docker.exe'
alias docker-compose='docker-compose.exe'
```

# 前提

- Windows 10 Home
- WSL2 Ubuntu (他のDistroでもおそらく同じ)

# WSL2環境のセットアップ

WSL2環境の準備については、以下の記事を参考にすると良いと思います。

- [WSL2 + VScodeでWindowsから一瞬でDockerコンテナ内に引き篭もれる開発環境を整えたかった](https://qiita.com/iridon0920/items/005a9224343413b74f78)


# Docker Desktop をインストール

2020/03/20 の時点ではWSL2自体が正式版ではないので、Docker DesktopもStableではなくEdgeチャンネルを使うことになります。
(2020/05頃にはおそらくWSL2もDocker Desktopも正式版が来るはず！)

以下の記事にEdgeチャンネルのDocker Desktopのダウンロードリンクが貼られているので、そちらからダウンロードします。

- [Docker Desktop for Windows Home is here!](https://www.docker.com/blog/docker-desktop-for-windows-home-is-here/)

(Docker Desktop Edge 2.2.2.0) となっているところです。

以下の公式のDocker Desktop for Windowsの提供ページから Edgeチャンネルのものをダウンロードしても大丈夫です。

- https://hub.docker.com/editions/community/docker-ce-desktop-windows

インストール作業は、特になにか設定等は必要なく、デフォルトのままインストールすれば問題なく入りました。

# WSLからdockerコマンドを実行する

そのままインストールしただけだと、WSL2 から `docker` とコマンドを打ってもダメでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193814/2df55189-5780-7d34-1d1f-610862f4833e.png)

`docker.exe` はWindows側にインストールされていて、コマンドプロンプトやPowerShellから問題なく動きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193814/248d0a1c-ba3b-8e76-b0ba-6e427d31a235.png)

それをWSL2からも実行したらどうなるか試してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193814/4fe67647-f8ac-a858-fc4e-5d5fd7e00bfa.png)

うん。動きます。


試しにnginxを起動してみましょう。

```sh
docker.exe run --rm -p 80:80 nginx
```

Windows セキュリティの重要な警告 ダイアログが表示されるので、`アクセスを許可する` を選択します。

この状態で `docker ps` を実行してみましょう。

WSL2側からも、Windows側からも、どちらも同じDocker Daemonに繋ぎにいっていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193814/8cc585f4-c389-2e2e-b727-298c9b693fe7.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193814/ddcf9d79-03a8-4acf-fbe2-bad18af81639.png)

nginx はWindows側で起動しているので、ブラウザで `http://localhost:80` にアクセスするとDockerで起動したnginxコンテナに繋がります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193814/41c11eba-5fa0-9583-df16-c1d220972d50.png)

WSL2からもlocalhostでWindows側にアクセス可能なので、問題なくnginxコンテナに繋がります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193814/aabb43b5-5594-c0a6-e658-453f2b176f0a.png)

# エイリアスの設定

Windows 10 HomeにDocker Desktopをインストールして、WSL2からdockerを使用するのが問題なさそうだとわかりましたが、`docker.exe` とするのは面倒なので、エイリアスを設定しておきます。

```bash:~/.bashrc
alias docker='docker.exe'
alias docker-compose='docker-compose.exe'
```

これで他の環境やコマンドのサンプル通りに `docker` だけでコマンドが使えるようになります。
また、`docker-compose` についても、 `docker-comopose.exe` でインストールされているので、こちらにもエイリアスを設定しておきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193814/4ecf7cda-9a68-07f5-49dd-6ca0968f12d6.png)


# 補足

試したWindowsの環境は、次のようなコマンドで一度dockerを導入したことがあるので、もしかしたらそれがWSL2側にdockerコマンドがすんなり入らない原因かもしれません。
インストール済みの場合は `apt remove` で除去しておきましょう。

```
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose
 -y
```