Windows10のubuntu18.04LTS環境でDockerを使えるようにする(WSL2+ホームディレクトリ変更+SSH接続)

# 環境
* Windows10 Home
* バージョン1903 (OSビルド 18362.295)

# 背景
* クラウドサービスを使ってサーバー構築するときにローカルでテストしたい
* サーバー構築するときにDockerを使うのでローカルでDockerを使えるようにしたい
* Windows10 HomeでDockerを入れるのは非常に大変なのでWSL2を使う

# 今回やること
1. WSL2（Windows Subsystem for Linux2）を使ってubuntu18.04LTS環境を構築
2. windows環境からファイルを操作できるようにホームディレクトリを変更する
3. Dockerを使えるようにする
4. SSHで接続できるようにする
5. suコマンドを使えるようにする

# 環境構築手順
## 1. WSL2（Windows Subsystem for Linux2）を使ってubuntu18.04LTS環境を構築

### WSLでubuntu18.04LTS環境を構築

手順①「スタートボタン」を右クリック
手順②「アプリと機能」をクリック
手順③「プログラムと機能」をクリック
手順④「Windowsの機能の有効化または無効化」をクリック
手順⑤「Windows Subsystem for Linux」をクリック

![図1.png](https://qiita-image-store.s3.amazonaws.com/0/122979/4f1447b4-c6e2-d292-2c85-da62d0d57ec8.png)

手順⑥「microsoft store」を起動

![図3.png](https://qiita-image-store.s3.amazonaws.com/0/122979/fb1f607c-fd50-6f16-65b3-7a6a6d23ce04.png)

手順⑦「ubuntu」を検索
手順⑧ 18.04LTSを選択してインストール
手順⑨ 初回起動で「ユーザ名」と「パスワード」を入力する

![図4.png](https://qiita-image-store.s3.amazonaws.com/0/122979/de8e203e-6f7a-b077-cc7a-bea18ce4d187.png)

### OSビルドを18917以上にする

手順① 「設定 > 更新とセキュリティ > Windows Insider Program」で「開始する」を押す
手順② Insiderの設定でスローにする
手順③ 再起動をする
手順④ Windows Updateをする
手順⑤ 再起動をする
手順⑥ 「Ctrl+R」で「winver」と入力し、OSビルドが18917以上かどうか確認する

### WSLをWSL2に変更する

手順① 管理者権限でPowerShellを起動して以下コマンドを実行する

```bash
> Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

Path          :
Online        : True
RestartNeeded : False
```

手順② 管理者権限で再起動する

手順③ バージョンの確認

```bash
> wsl -l -v

  NAME            STATE           VERSION
* Ubuntu-18.04    Running         1
```

手順④ バージョンの変更

```bash
> wsl --set-version Ubuntu-18.04 2

変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
変換が完了しました。
```

手順⑤ バージョンの確認

```bash
> wsl -l -v

  NAME            STATE           VERSION
* Ubuntu-18.04    Running         2
```

## 2. windows環境からファイルを操作できるようにホームディレクトリを変更する
### なぜ必要？
windows環境からubuntu環境にアクセスする方法はあるが、windows環境からubuntu環境配下で何か変更してしまうとubuntu環境が壊れてしまう。
ubuntu環境にはwindows環境の固定ドライブがマウントされている。
「C:」ドライブなら「/mnt/c」でubuntu環境からwindows環境へアクセスできる。
そこで、ubuntu環境での作業をwindows環境下で行うことでwindows環境から操作できるようにする

### 今回の例
* windowsのDocumentsに「ubuntu」というディレクトリを作成し、そこを新ホームディレクトリとする
* `<username1>` :  **windows** のユーザ名
    * デスクトップまでのパスの例だと以下部分
    * `C:\Users\<username1>\Desktop`
* `<username2>` :  **ubuntu** のユーザ名（初回起動時に設定した名前）

### 手順
手順① ubuntuを起動して、デフォルトのホームディレクトリにあるファイル(設定ファイル)をwindows環境の新ホームディレクトリに移動する

```
$ cd
$ cp -p .* /mnt/c/Users/<username1>/Documents/ubuntu/
```

手順② 設定ファイルを開く

```
$ sudo vim /etc/passwd
```

手順③ 記載内容の変更

※変更前

```
<username2>:x:1000:1000:,,,:/home/<username2>:/bin/bash
```

※変更後

```
<username2>:x:1000:1000:,,,:/mnt/c/Users/<username1>/Documents/ubuntu:/bin/bash
```

手順④ ubuntuを再起動


## 3. Dockerを使えるようにする

手順① ubuntuを起動してDockerをインストール

```bash
$ sudo apt-get update
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
$ sudo apt-get install docker-ce
$ sudo usermod -aG docker $USER
$ sudo /etc/init.d/docker start
```

手順② docker-composeをインストール

```bash
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
```
※ubuntuを再起動する

手順③ windows起動時にdockerを自動起動するように設定する
以下ファイルを作成する。
※passwordはubunt初回起動時に設定したパスワード

```{startdocker.bat}
@echo off
C:\Windows\System32\bash.exe -c "echo '<password>' | sudo -S /etc/init.d/docker start"
```

手順④ このファイルをwindowsのスタートアップフォルダに置く。

```
C:\Users\<username1>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
```


## 4. SSHで接続できるようにする
### なぜ必要？
正直なくても問題ないが、リモートサーバーに接続しているターミナルエミュレーターと同様に操作できるようにするため

### 手順
手順① ubuntu環境でopenssh-serverを立ち上げる
2018/07/16時点では既にインストールされているopenssh-serverをそのまま使うとエラーになるので、一度アンインストールする

```
$ sudo apt-get remove --purge openssh-server
$ sudo apt-get update --fix-missing
$ sudo apt-get install openssh-server
$ sudo service ssh start
```

手順② windows起動時にsshを自動起動するように設定する
以下ファイルを作成する。
※passwordはubunt初回起動時に設定したパスワード

```{startssh.bat}
@echo off
C:\Windows\System32\bash.exe -c "echo '<password>' | sudo -S /etc/init.d/ssh start"
```

手順③ このファイルをwindowsのスタートアップフォルダに置く。

```
C:\Users\<username1>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
```

## 5. suコマンドを使えるようにする
初期設定状態だとrootユーザに変更するためのパスワードが設定されていない。
初期設定で設定したユーザのパスワードでrootユーザに変更することもできるが、rootユーザのパスワードも設定しておく。

手順① ubuntuを起動して初期設定したユーザのパスワードでrootユーザに変更

```
$ sudo su -
```

手順② rootユーザのパスワード設定
※上記コマンドでrootユーザに変更した後で設定する

```
passwd
```

今後は `su -` で設定したパスワードを入力するとrootユーザにログインできる


## 各種ライブラリのインストール

```bash
$ su -
$ apt-get -y update && apt-get -y upgrade && apt-get install -y \
  build-essential make \
	&& apt-get clean \
	&& rm -rf /var/lib/apt/lists/*
```

# 参考
- http://www.atmarkit.co.jp/ait/articles/1608/08/news039.html
- https://rcmdnk.com/blog/2018/04/27/computer-windows-network/
- http://anton0825.hatenablog.com/entry/2016/02/15/000000