Windows10･11 で Docker Desktop を用いずに WSL2･Docker + Python の環境を構築するメモ① WSL2･Dockerのインストールまで

# 1. 誰向け？

自分がそうだったのですが、以下に全て当てはまる同じ様な方向けに書きました。

・OSが Windows10/11 のPCでお仕事をされている方
・職場で Docker Desktop が利用できない方
・Python の開発環境を Docker で構築したい方
・理屈等はひとまず置いておき手順だけ知りたい方

# 2. 背景

仕事で外部の方とのコード共有をした際に、Windows上では利用できないコマンドが記載されていましたので、別の環境構築の手段を検討することにしました。WSL2上に直接Pythonの環境を構築しても良かったのですが、Webアプリ作成も視野に入れて Docker を利用することにしました。

以前は WSL2 に Docker Desktop をインストールして利用していたことがあるのですが、最近時職場では Docker Desctop が利用できないことがわかったので、WSL2 に 直接 Docker をインストールすることにしました。

# 3. 前提条件

以下の2つの環境で試したところ問題なく完了できました。先に自宅のWindows11で試したのち、同じ内容を職場のWindows10で再現できるか確認を取っています。

＜Windows11＞
・エディション：　Windows 11 Pro
・バージョン　：　22H2

＜Windows10＞
・エディション：　Windows 10 Pro
・バージョン　：　22H2

BIOS設定でハードウェアの仮想化（通常はVT-xまたはAMD-Vと表示される）が有効になっていない場合は有効にしておいてください。

# 4. 手順

まずは WSL2 をインストールして、その後に Docker Engine をインストールします。

ほぼすべての作業が コマンドプロンプト/PowerShell（ステップ１）と Ubuntu（ステップ２）で完結するので、条件が合う人であればコピペで済んで意外と楽です。

## ステップ 1: WSL2 のインストール

### ① WSL 有効化:
コマンドプロンプト/PowerShell を管理者権限で開き、以下のコマンドを実行して WSL を有効化します。

    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

実行すると以下のような画面が出ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1406872/664662ca-0e9e-33ec-900f-5615661d5ccc.png)


### ② Virtual Machine Platform 有効化:
同じく コマンドプロンプト/PowerShell で以下のコマンドを実行します。

    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

前の処理とほぼ同じですが、実行すると以下のような画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1406872/dbf68221-5a68-1011-28d0-07972954d98b.png)


### ③ WSL2 Linux カーネルの更新:
Microsoft の公式サイトから WSL 2 Linux カーネル更新プログラムをダウンロードしてインストールします。

    wsl --install

実行すると "Ubuntu" がインストールされ、完了後に再起動を要求してきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1406872/4f65526f-8a88-190e-5154-c66617762f17.png)


再起動すると以下のような画面がしばらく表示されるので、しばらくお待ちください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1406872/14f427ea-e8fb-16a2-5356-8debeaf85509.png)

"Enter new UNIX username:" と表示されたらusernameを任意で設定してください。その後"New password:"と"Retype new password:"を求められるので任意で設定してください。これらを入力したら以下のような画面になりインストール完了となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1406872/ca485331-d47c-a2a2-61dd-8df6d3f38415.png)


コマンドプロンプト/PowerShell で

    wsl -l -v

と入力すると以下のように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1406872/0b1bc3da-b72a-368d-d506-9f399b6806ef.png)

### ④ WSL2 を更新:

コマンドプロンプト/PowerShell を管理者権限で開き、以下のコマンドを実行してWSL2を念のため更新しておきます。

    wsl.exe --update

終わると以下の様な画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1406872/c549f091-dbe2-2247-e9da-781e7b1227eb.png)



以上でステップ1は完了です。

	

## ステップ 2: WSL2 上で Docker Engine のインストール

### ① WSL2 の Linux ディストリビューションを起動:
Windowsのスタートメニューからインストールした Ubuntu（下図のオレンジのアイコン）を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1406872/5e716aec-1eae-cf60-ae63-8458ab668eff.png)

### ② パッケージリストの更新:
ubuntuで以下のコマンドを実行してパッケージリストを更新します。

    sudo apt update

先ほど設定したパスワードを要求されるので入力してください（下画面は1回失敗してやり直した2回目のスクショのためパスワード要求はされていません･･･、プロキシ環境下だと一部のパッケージがインストールできない失敗がありましたので、ここから先はすべて職場のネットワーク外で実行しています）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1406872/35faf6d7-dc7e-295d-763a-633339ec875b.png)


### ③ 必要なパッケージのインストール:
Docker をインストールするために必要なパッケージをインストールします。

    sudo apt install apt-transport-https ca-certificates curl software-properties-common

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1406872/55b64df4-1b7d-2672-34e3-5309421a33a2.png)




### ④ Docker の公式 GPG キーを追加:

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

Warningが出ますが特に問題はないようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1406872/fe327568-a9cf-405d-0ede-5030cbf852ac.png)



### ⑤ Docker リポジトリを追加:

	sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

途中で"Enter"の入力を求められるので、押してください。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1406872/6ffdf436-a7c4-0d15-e10a-53156690bed8.png)


### ⑥ Docker Engine のインストール:
リポジトリを更新し、Docker Engine をインストールします。

    sudo apt update
    sudo apt-get install docker-ce docker-ce-cli

まとめて2行コピペして問題ありません。終わると以下の様になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1406872/35a16936-1f63-ea1c-bf14-c917b21d47b9.png)



### ⑦ Docker Daemon の起動:

    sudo systemctl start docker


起動したら以下のコマンドを入力して表示されるか確認してみると良いと思います。

    docker --version

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1406872/1c33822c-2fb3-e124-d229-e71824f3a89f.png)

### ⑧ ユーザーを Docker グループに追加:
Docker コマンドを sudo なしで実行できるようにするために、自分のユーザーを Docker グループに追加します。

	sudo usermod -aG docker $USER

以上で（Docker Desktopを使わない）WSL2･Docker のインストール作業が完了となります。

Ubuntuを再起動してから一応動作するかの確認を以下のようにしました。作成したばかりなのでイメージ等は一切ありませんが、コマンドはしっかり受け付けているのでこれでDockerは使えるようになっていると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1406872/9fe3accc-346c-e39b-4cbd-bf712d91f639.png)


# 5. 最後に一言

職場がWindows縛りな環境なので仕方ないのですが、Windowsだけだと困ることも出てきたので、この際に自分のPython環境構築方法を見直しました。書籍とかだとWebアプリ向け環境構築が多いので、Python＋Docker環境の自分用のメモを残したのですが、それをほぼそのまま記事にしてみました（本投稿はDockerインストールまでですが、Python用のDockerfileのメモは別途投稿する予定）。参考になる方が一人でもいれば幸いです。