Windows10 または Windows11 で WSL2 を使って Docker を動かす方法。

今回は、 Docker Desktop を使わずに Windows で Docker 環境を構築してみました。
Windows10 または Windows11 で WSL2 をインストールして Docker を動かす方法を解説します。
どちらの OS も同じ手順でできます。

# WSL2 と Ubuntu のインストール
WSL2 と Ubuntu をインストールしていきます。

## WSL2 のインストール
PowerShell を管理者として起動し、下記のコマンドを実行します。

```powershell
wsl --install
```
![wsl_install.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212972/2d7fd3cf-58dd-cfdc-ac0c-b92704d148dc.png)

インストールが完了したら、画面の指示に従って再起動をします。
![wsl_installed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212972/061a8ed0-1da2-89cc-8d8d-9168fa761eab.png)


## Ubuntu のユーザー設定
画面の指示に従って、ユーザー名とパスワードを設定します。
![rapture_20230216094345.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212972/8384122f-e37d-b977-2eca-4945654a54b4.png)

## アップデート
アップデートを行います。
```bash
sudo apt update
sudo apt -y upgrade
sudo apt -y autoremove
```

# Docker
Docker 環境の構築をしていきます。

## 古いバージョンのアンインストール
古いバージョンの Docker を事前にアンインストールしておきます。
```bash
sudo apt remove docker docker-engine docker.io containerd runc
```
:::note info
上記のコマンド実行時にパッケージがどれもインストールされていないと表示されても問題ありません。
:::

## Docker Engine のインストール
今回は、 `apt` リポジトリからインストールを行います。

### パッケージのインストール
必要なパッケージをインストールします。
```bash
sudo apt install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
```

### GPG キーの追加
Docker 公式の GPG キーを追加します。
```bash
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
```

### リポジトリのセットアップ
リポジトリのセットアップを行います。
```bash
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```

### パッケージインデックスの更新
Docker Engine のインストール前にパッケージのインデックスを更新しておきます。
```bash
sudo apt update
```

### Docker Engine のインストール
今回は最新版の Docker Engine をインストールします。
```bash
sudo apt install \
    docker-ce \
    docker-ce-cli \
    containerd.io \
    docker-buildx-plugin \
    docker-compose-plugin
```

### Docker のバージョン確認
Docker のバージョンを表示して、 Docker Engine のインストールが成功しているか確認します。
バージョンが表示されれば問題ありません。
```bash
docker -v
```

### ユーザーを docker グループに追加
ユーザーを `docker` グループに追加します。
```bash
sudo usermod -aG docker <ユーザー名>
```

### Docker デーモンの起動
Docker デーモンを起動します。
```bash
sudo service docker start
```


# 補足
構築中に発生したトラブルや補足などを参考までに書き留めておきます。

## Hyper-V が有効になっていない場合
Hyper-V が有効になっていない場合は、PowerShell を管理者として起動し、下記のコマンドを実行します。

```powershell
DISM /Online /Enable-Feature /All /FeatureName:Microsoft-Hyper-V
```
![DISM_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212972/28275953-d5d7-9b9a-82ef-e029d6dbf38b.png)

インストールが完了したら、画面の指示に従って `y` ボタンを押下し、再起動します。
![DISM_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212972/67f2fa87-eca1-e6d8-27ee-1030e3c6084e.png)


## Cannot connect to the Docker daemon at ... と表示される場合
Docker デーモンが起動していないと、 Docker コマンド実行時に下記のような表示が出ます。
```bash
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
```

下記のコマンドで Docker デーモンを起動します。
```bash
sudo service docker start
```


## WSL2 のシャットダウン
PowerShell で下記のコマンドを実行することで、Ubuntu のシャットダウンができます。
```powershell
wsl --shutdown
```


## CPU やメモリの制限を行いたい場合
事前に WSL2 で起動しているすべての WSL2 ディストリビューションを停止しておきます。
```powershell
wsl --shutdown
```

次にファイルエクスプローラーで `%UserProfile%` を開き、 `.wslconfig` ファイルを作成します。
`.wslconfig` ファイルに各設定を記述します。
```.wslconfig
[wsl2]
processors=2
memory=4GB
```

設定項目が多岐にわたるため、詳細は下記を参照してください。

https://learn.microsoft.com/ja-jp/windows/wsl/wsl-config#configuration-setting-for-wslconfig


# Rancher Desktop
Rancher Desktop を利用して、 Docker コンテナを動かす方法を別の記事で公開しました。

https://qiita.com/IoriGunji/items/f2a86ffdc629b6edc549

# 参考文献
下記のサイトを参考にさせて頂きました。

https://docs.docker.com/engine/install/ubuntu/