WSL2環境構築からdockerセットアップまで

## Virtualization Technology有効化
##### システムメニューより、`タスクマネージャー`を開く（Windowsキー + x）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1742664/625ead67-286e-4718-acf5-a6f46e100a47.png)

##### 有効化されているか確認する。  
パフォーマンスタブの`仮想化`が`有効`であること
![タスク マネージャー 2021-08-25 23.05.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1742664/3c5ae852-d0df-cbaa-de60-b6ca7c9af0b2.png)

有効化されていない場合、BIOSの設定を変更する

## WSL有効化
##### システムメニューより、PowerShellを管理者権限で起動（Windowsキー + x）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1742664/c02ff724-8226-8289-7023-47a705d84e48.png)

##### Linux用Windowsサブシステム、仮想マシンプラットフォーム有効化

```powershell
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
```

完了後、再起動

Linux用Windowsサブシステム、仮想マシンプラットフォームのチェックがONになっている。  
ファイル名を指定して実行に`OptionalFeatures.exe`を入力して、Windowsの機能の有効化または無効化画面を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1742664/58a196b5-de94-788b-4565-70dfcf977aac.png)

### Linux Kernel Update Packageインストール
##### アップデートプログラムをダウンロード  

1. [ダウンロード](https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi)

2. ファイル（wsl_update_x64.msi）を実行し、インストール

### WSLのバージョンを2に変更
##### システムメニューより、PowerShellを起動（Windowsキー + x）
```powershell
wsl --set-default-version 2
```

## Ubuntu20.04 LTSインストール  
Microsoft Storeより、`Ubuntu20.04 LTS`をインストールする。

##### Microsoft Storeを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1742664/40bd6e99-f9a0-5c39-d94a-80387de777e7.png)

##### Ubuntuを検索し、`Ubuntu 20.04 LTS`を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1742664/26ed45c1-5da2-0679-3321-720658c92b18.png)

##### インストール 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1742664/a0ac353c-eb4f-1caa-e5fb-0f68e157973d.png)

##### Ubuntu 起動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1742664/462d1b1b-fe1e-7902-c00e-0c92e0cb43dc.png)

##### ユーザー、パスワードを設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1742664/10980441-1267-f7f2-e71c-c30bbb6f2712.png)

##### データの取得先を日本に変更

```
sudo sed -i -e 's%http://.*.ubuntu.com%http://ftp.jaist.ac.jp/pub/Linux%g' /etc/apt/sources.list
```

##### パッケージアップデート

```
sudo apt update && sudo apt upgrade -y
```

##### DNS変更

`/etc/systemd/resolved.conf`に追記

```
sudo sed -i -e 's/#DNS=/DNS=8.8.8.8/' /etc/systemd/resolved.conf
```

##### sudoのパスワード入力なし

```
sudo visudo
```

```
<自分のユーザ名> ALL=NOPASSWD: ALL
```

## dockerインストール
##### docker公式 GPG公開鍵 インストール

```
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
```

##### aptのリポジトリにDockerのリポジトリを追加

```
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
```

##### docker-ce (Community Edition) インストール

```
sudo apt update && sudo apt install -y docker-ce
```

##### cgroupfs-mountインストール
```
sudo apt-get install cgroupfs-mount
```

##### docker自動起動

```
sudo systemctl enable docker
```

##### docker-compose インストール

```
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
```

##### WSL起動時にdockerデーモンを起動

Windows上の任意の場所に、以下のシェルスクリプトを作成する。
改行コードは`LF`とする。

```
#!/bin/sh
sudo cgroupfs-mount
sudo usermod -aG docker $USER
sudo service docker start
```

ファイル名を指定して実行に`Taskschd.msc`を入力して、タスクスケジューラーを開く

- タスクを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1742664/466e9815-9ddc-6249-b011-9ba80be0f65d.png)

- 全般タブ  

|設定項目|設定値|備考|
|--|--|--|
|名前|wsl2 docker|名前は任意|
|最上位の特権で実行する|チェックON|必須|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1742664/c7024826-eb36-7822-a670-a5d411b4ce60.png)

- トリガータブ  
新規ボタンにより登録画面を表示する

|設定項目|設定値|備考|
|--|--|--|
|タスクの開始|ログオン時||
|設定|特定のユーザー||


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1742664/94c5cc07-523c-8ecd-9b7f-a7e24414130b.png)

- 操作タブ  

新規ボタンにより登録画面を表示する

|設定項目|設定値|備考|
|--|--|--|
|プログラム/スクリプト|wsl.exe||
|引数の追加|/mnt/c/作成したパス|WSL(Linux)形式で指定|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1742664/023da262-9c84-71c8-a245-3b2f3f3013df.png)

- 条件タブ

|設定項目|設定値|備考|
|--|--|--|
|コンピュータをAC電源に使用している場合のみタスクを開始する|チェックOFF||

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1742664/fa503f44-8ecd-6773-7fd8-47bad1198bbf.png)

- 設定タブ

|設定項目|設定値|備考|
|--|--|--|
|タスクが失敗した場合の再起動の間隔|チェックON||

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1742664/a326b7ca-49ae-4cf5-e36e-e0b12ca78115.png)

##### 再起動

ログイン後、Ubuntuを起動し、dockerサービス起動確認

```
service docker status
```
`* Docker is running`と出力されればOK

##### sudoなしでdockerコマンドを実行する

```
# dockerグループがなければ作る
sudo groupadd docker

# 現行ユーザをdockerグループに所属させる
sudo gpasswd -a $USER docker

# dockerデーモンを再起動する (CentOS7の場合)
sudo systemctl restart docker

# exitして再ログインすると反映される。
exit
```

[参考](https://qiita.com/DQNEO/items/da5df074c48b012152ee)

## 参考
- https://docs.microsoft.com/en-us/windows/wsl/install-win10
- https://qiita.com/shukawam/items/baf094afec308f79575a#%E5%90%84%E7%A8%AE%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A
- https://zenn.dev/o2z/articles/d1162bbeb5a5a2
- https://qiita.com/shukawam/items/baf094afec308f79575a#docker-%E3%83%87%E3%83%BC%E3%83%A2%E3%83%B3%E3%81%AE%E8%B5%B7%E5%8B%95