WSL2 の CentOS7 と Docker Desktop で作る快適なDocker環境


## はじめに
Windowsに慣れ親しんでいる人にとってはLinux系のCLIはなかなかとっつきにくいですよね。
Windows版の Docker Desktop に搭載されているWSL2統合機能を使えば、WindowsのGUIでコンテナの管理ができるのでいくらか扱いやすくなったので紹介します。

### 前提
+ Windows 10 Pro バージョン2004
+ CentOS7

### 手順
大まかな手順は以下の通り。

1. WSL2 に CentOS7 をインストール
2. CentOS7 に Docker をインストール
3. Windows10 に Docker Desktop をインストール
4. Docker Desktop で WSL2 統合設定


## 1. WSL2 に CentOS7 をインストール

### CentOS7 の入手
GitHubからCentOS7.zipをダウンロードする。
https://github.com/wsldl-pg/CentWSL/releases/tag/7.0.1907.3

### CentOS7 のインストール
ダウンロードしたファイルを以下の場所に解凍する。
C:\Users\username\AppData\Local\Packages

結果、以下のフォルダが作成され、フォルダに CentOS.exe が出力される。
C:\Users\username\AppData\Local\Packages\CentOS7

解凍されたCentOS7.exeを実行するとインストールされる。

### Windows Terminal をインストール
CentOS7 の操作用として、Windows Store からインストールする。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26796/b71f0dd3-69b0-4eff-a65c-0acc7a5bf8e7.png" width="500px">

### Windows Terminalから起動する
Windows Terminal を起動して新しいタブを開くと、リストに CentOS7 が追加されているのでクリックして起動することを確認する。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26796/c1bc5577-0402-7869-0f40-bfd7003bcd8d.png" width="300px">

### 起動時のディレクトリをrootのホームディレクトリに変更する
CentOS7 起動時のカレントディレクトリがWindows上のユーザのホームディレクトリになっていて不便なので、設定を開きrootのホームディレクトリに変更する。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26796/bdde28c1-ecc8-1462-8c59-b532f2a73bda.png" width="300px">

setting.json を任意のエディタで開き、CentOS7の設定箇所に startingDirectory の設定を追加する。

```json:setting.json
{
 "guid": "{a8202b0e-781a-5dab-98e2-e9d469a63619}",
 "hidden": false,
 "name": "CentOS7",
 "source": "Windows.Terminal.Wsl",
 "startingDirectory" : "//wsl$/CentOS7/root"
}
```

CentOS7を起動しなおして設定が反映されていることを確認。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26796/e4daa1d6-c129-d299-0dde-08ef4736741d.png" width="300px">


rootのパスワード設定は割愛。

## 2. CentOS7 に Docker をインストール
ここからは CentOS7 をCLIで操作する。
コマンドは４つだけなので頑張る。
各コマンドの詳細は [Docker公式サイト「Docker CE の入手（CentOS 向け）」](http://docs.docker.jp/engine/installation/linux/docker-ce/centos.html) を参照。

まず以下のコマンドで Software Collections を導入。

```bash
$ yum install -y centos-release-scl-rh
```

次に必要なパッケージをインストールする。

```bash
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
```

Dockerのレポジトリを追加する。

```bash
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
```

yumのパッケージインデックスを更新しておく。

```bash
$ sudo yum makecache fast
```

そして、CentOS用のDockerをインストールする。
（バージョン指定なしだとDockerが起動しなかったため、"centos"付バージョンをインストール）

```bash
$ sudo yum install -y docker-ce-18.03.1.ce-1.el7.centos
```

この状態でDockerを起動しようとしてもエラーになるが気にしないこと。

```bash
#今はまだ動かない
$ sudo systemctl start docker
Failed to get D-Bus connection: Operation not permitted
```


## 3. Windows10 に Docker Desktop をインストール
[Docker公式](http://docs.docker.jp/desktop/toc.html)を参照。


## 4. Docker Desktop でWSL2統合設定
Docker Desktopの設定画面を開き、 Resources -> WSL INTEGRATION と進む。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26796/434777fc-4fec-afbb-22aa-deae5ca777d0.png)

Enable integration with additional distros のところにある CentOS7 のトグルをONにする。
Apply & Restart ボタンを押す。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26796/f85d750a-bb4e-f9ef-ac76-2ff5494b527d.png" width="400px">

### 動作確認
CentOS7 から以下のコマンドを実行する。

```bash
$ docker run hello-world
```

hello-world のコンテナイメージがPullされてコンテナが起動し、"Hello form Docker!"と表示されていれば動作確認成功。

```
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:31b9c7d48790f0d8c50ab433d9c3b7e17666d6993084c002c2ff1ca09b96391d
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/
```

### Docker Desktopで確認
imageの一覧に"hello-world"が追加されており、CentOSと連動していることがわかる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26796/21325bb9-1f27-eafe-7969-9cf076e151c5.png)

### CentOS7から確認

もちろんCentOS上からも同じものが確認できる。

```bash
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
httpd               2.4                 dd85cdbb9987        5 weeks ago         138MB
alpine/git          latest              94f8849864da        3 months ago        28.4MB
hello-world         latest              bf756fb1ae65        12 months ago       13.3kB
```

以上で終わり。
Docker Desktopからコンテナ状態をみたりRUNしたりコンソールにアクセスしたりしてください。

どこかの誰かのお役に立てれば幸いです。

# 参考記事
[WSLでCentOS7をインストールする](https://qiita.com/ShikiSouma/items/8a47082e0067e102c5c4)