Windows環境(WSL2)で外付けSSD上にDocker環境を構築する手順

# 概要

本記事では、Windows PC環境で外付けSSDにDockerを導入した手順を紹介しております。
良ければぜひ参考にしていただけましたら幸いです。

# 実行環境と前提条件
|実行環境|
|:-|
|Windows 10 21H1 (OSビルド 19043)|

|前提条件|
|:-|
|・Windows 10 バージョン 2004 以降 (ビルド 19041 以降) または Windows 11 |
|・4GB以上のRAM|
|・第２レベルアドレス変換(SLAT)を備えた６４ビットプロセッサ|
|・BIOSレベルのハードウェア仮想化サポートが有効|
|・Hyper-Vが有効|

# 手順
### 1.	Windowsの関連機能を有効化
	
1. 左下の検索窓から「Windows 機能」などで検索し、「Windowsの機能の有効化または無効化」を選択します。　
　	![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1872129/87369c6f-1100-10c2-33ac-c859d7436701.png)
2. 「Linux用Windowsサブシステム」「Windowsハイパーバイザープラットフォーム」「仮想マシンプラットフォーム」にチェックを入れ有効化します。
 　 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1872129/3cacd954-5e94-704c-1b2d-6c214dfa9e29.png)
再起動を求めるウインドウが表示されるので、再起動します。

### 2.	Linux kernelをインストール

[こちら](https://docs.microsoft.com/ja-jp/windows/wsl/install#install)によると、入っていない場合はコマンドプロンプトから`wsi –install`でインストールできるようです。
私は1.の後に再起動した段階で既にインストールされていたため、特に必要ありませんでした。
ディストリビューション名を指定してインストールする場合は以下の通り進めることができます。

1. `wsl –list -o`でインストールできるディスリビューションを確認します。
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1872129/108b706e-fa07-5536-327c-7d5e64e3b78d.png)
2. 上記結果を元に、`wsi --install -d [有効なディストリビューション名]`でインストールを実行します。
以下の画面が表示されます。(画面はUbuntu 20.04 LTSの例)
:::note info
※ディストリビューションを変更する場合も同じコマンドを実行します。
:::
![図4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1872129/f4c97ddd-66d7-8c7b-2bab-d3478da4af2f.png)
3. 以下のような画面が起動するので、新規でユーザー名とパスワードを決定し入力していきます。
パスワードは二回入力する必要があります。<br>(パスワードは表示されず、カーソルも動きませんが入力されています。)
![図5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1872129/bc8a5380-cdd4-6b6a-0350-e41d12b97bf7.png)
4. 以下のような画面が表示されればlinuxがインストールできていると思われます。(Ubuntu 20.04 LTSの場合)
![図6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1872129/03ddbc59-3699-0451-dbd9-067f7c5f0c88.png)

### 3.	Docker Desktop for Windowsをインストール
1. [Docker hubのページ](https://hub.docker.com/editions/community/docker-ce-desktop-windows)から「Get Docker Desktop」をクリックします。
![図7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1872129/86d8d29a-a51c-70a1-e011-dc49b3953c82.png)
2. ダウンロードしたDocker Desktop Installer.exeを実行します。
![図8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1872129/4bf16a55-1a39-2d12-cbbe-5b22c249c4c4.png)
3. 右下のOkをクリックするとWSL2に必要なWindows componentsがインストールされます。
![図9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1872129/fcb9a65b-fca3-a4a5-8be1-f663bab283b4.png)
4. インストールが終わると、以下のような画面になります。
以下の画面で「Close and log out」をクリックすることでWindowsからログアウトしてインストールが完了します。
ログアウトすると実行中のプログラムは終了されます。ウェブブラウザも閉じるのでご注意ください。
![図10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1872129/b86c4eb0-c41a-abdf-b6f2-1594766feb49.png)

5. 規約が更新されていた場合は以下が表示されるようですので、「I accept the terms」にチェックを入れ「Accept」をクリックします。
![図11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1872129/cce711a3-7f8e-7ad1-a832-b3bb5fc91449.png)
6. 以下のようなウインドウが表示されるので、画面表示に沿って進めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1872129/9bd3a215-aec2-1fa6-41e7-86eed81ec192.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1872129/90667ed3-92df-8276-5f80-ec0f344f3828.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1872129/597fad13-a444-2f42-a34d-8301be6c988b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1872129/6fa43fea-2cef-31c5-80ba-354b0f9385b3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1872129/a39f9276-5ec6-956b-46a1-37e69af7f87a.png)

7. 最終的に以下のようにDockerアカウントを作成する必要があるので、事前に作成しておくか表示のリンクからページを開いて作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1872129/37fdeb15-0e7a-969e-c877-64baa011f276.png)

以降は`docker push`でイメージをアップロードすることで、他の利用者と環境を共有することができます。

**以下メッセージが表示される場合：**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1872129/159af2d0-1408-7979-3f63-be89f3236d99.png)

以下の状況に応じて、対応をしてみて下さい。

**[kernelがインストールされていない]**
上記2.の手順を進めていた場合、linux kernelはインストールされていると思われます。<br>もしもインストールの手順を実施していない場合は、メッセージウインドウを残したまま、上記2.の手順に沿ってkernelをインストールします。<br>
**[既にインストールされている]**
[表示のリンク先](https://docs.microsoft.com/ja-jp/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package)の手順に従って、更新プログラムをダウンロードします。
ダウンロードしたmsiファイル(wsl_update_x64.msi等)を実行し、以下の画面に沿って更新を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1872129/1e8fa3ad-5ca5-0712-f95b-372edea798e1.png)

上記いずれかを実行した後に、メッセージウインドウの「Restart」をクリックしてDockerを再起動することで解決すると思われます。

### 4.	Dockerの外付けSSDへの移動
以下の手順でUbuntu、docker-desktop、docker-desktop-dataを外付けSSD(Dドライブ)に移動させます。

**事前準備：**
`mkdir`等でDドライブに移動先のフォルダを作成しておきます。(今回はwslというフォルダを作成します。)

**1.	Docker Desktop停止**
&emsp;画面右下等のタスクトレイに表示されているDocker Desktopアイコンを右クリックし、Quit Docker Desktopを選んで終了します。
&emsp;![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1872129/54e11d5f-1244-e483-1d30-5f10412be500.png)

**2. WSL停止**

::: note warn
以降コマンドプロンプトやpowershellを使いますが、管理者権限で実行してください。管理者権限でない場合、import時にエラーが発生する可能性があります。
:::
&emsp;コマンドプロンプト等から`wsl -l -v`を実行して稼働状態を確認し、`wsl –shutdown`でWSLを停止します。

**3. ディストリビューションのエクスポート**
&emsp;`wsl –export <ディストリビューション名> <作成ファイル名.tar>`でtarファイルにエクスポートします。
```
例：
wsl --export Ubuntu D:\wsl\Ubuntu20.04.tar
wsl --export docker-desktop D:\wsl\docker-desktop.tar
wsl --export docker-desktop-data D:\wsl\docker-desktop-data.tar
```
**4. 既存のディストリビューションの削除**
&emsp;`wsl –unregister <ディストリビューション名>`で、指定したディストリビューションを削除します。

:::note warn
ext4.vhdxが削除されるのでご注意ください
:::

```言語:
例：
wsl –-unregister Ubuntu
wsl –-unregister docker-desktop
wsl –-unregister docker-desktop-data
wsl –-unregister Ubuntu-20.04
```
念のため`cd /D D:\wsl`等でexport先のDドライブに移動します。<br>
**5. ディストリビューションのインポート**
```言語:
wsl --import Ubuntu20.04 D:\wsl\Ubuntu20.04 D:\wsl\Ubuntu20.04.tar
wsl --import D:\wsl\docker-desktop D:\wsl\docker-desktop D:\wsl\docker-desktop.tar
wsl --import D:\wsl\docker-desktop-data D:\wsl\docker-desktop-data D:\wsl\docker-desktop-data.tar
```
&emsp;管理者権限で実行していない場合、import実行時に「パラメーターが間違っています」というエラーが出力されることがあります。これは、コマンドプロンプトを管理者権限以外で開いて一連のコマンドを実行した等の原因が考えられます。<br>
&emsp;私も同様の原因で上記エラーを確認しましたので、一度Cドライブでそれぞれimportした後で、管理者権限のコマンドプロンプトを用いて上記１．以降の一連のコマンドを実行しました。<br>
**6. Docker Desktopを起動して動作確認**

以上でDocker環境のDドライブへの移動が完了しました。
以降は、ドライブ上にDocker環境を用意するフォルダを作成し、Dockerファイル等を準備することで新たな環境を構築することができます。

**参考URL：**
[前提条件]<br>https://futureys.tokyo/how-can-i-check-system-requirements-for-docker-desktop/#bios-level-hardware-virtualization-support-must-be-enabled
[インストール]<br>https://qiita.com/y9k8i/items/ed6804de727aa332e8ab
[WSL保存先変更]<br>https://www.meganii.com/blog/2021/07/11/move-the-destination-of-wsl2-linux-and-docker-image-container-to-another-directory/