自宅WinPCにコンテナを建てた作業メモ（Docker Desktop on windows）

# はじめに
名前はよく聞くkubernetes(k8s)。
AI基盤な会社の面談前にAWS上で動かそうと思ったら、AWSアカウントが凍結されていた（securityがばがばのroleを作ってしまっていた様子）ため、できませんでした。

ローカル環境でk8sを動かすMinikubeという教材を教えていただいたので、電話経験13年、クラウド経験0の素人が公式チュートリアルをみながら建ててみました。

https://twitter.com/maigo_name/status/1557341613562548224?s=20&t=14ZmVOkP22vYqwA1DPyvVw

という意気込みで始めましたが、長くなってしまったので、本編では、WSL2+Docker for wondowsでコンテナを建てるところまでをお送りします。Minikubeは第二編で

# まとめ
Minikubeのget startedを見て、コンテナを管理するつもりが、いつの間にかDocker Desktop on Windowsを使ってコンテナを作り、Djangoアプリを乗せる。にすり替わりましたが、どうやらコンテナは作れたようです。

## 構成イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/9dd04b55-e048-e067-6753-b06a0b434ee7.png)

## 新しいコンテナができていることが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/f1afc932-1e4d-1a92-7f04-5bc6656d9747.png)

チュートリアルも色々リンクがあるので、途中で目的がコンテナの上でDjangoアプリを
動かすにすり替わっていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/7d8a8e67-aee5-7651-e78e-001a5382d04e.png)


## 参考文献
[1] Minikubeゲットスタート　https://minikube.sigs.k8s.io/docs/start/
[2] Docker オリエンテーション https://docs.docker.com/get-started/
[3] Docker Desktop on Windows https://docs.docker.com/desktop/install/windows-install/
[4] Install Windows WSL2 https://docs.microsoft.com/en-us/windows/wsl/install
[5] Set up WSL2 https://docs.microsoft.com/en-us/windows/wsl/setup/environment
[6] Docker remote container on WSL2 https://docs.microsoft.com/en-us/windows/wsl/tutorials/wsl-containers


# 以下は作業メモです

## Minikubeを使用してローカル環境でKubernetesを動かす
https://kubernetes.io/ja/docs/setup/learning-environment/minikube/

## 1. ツール(minikube)のインストール要件
minikubeは、ローカルのkubernetes 学習にフォーカス。
Dockerと、minikube startのコマンドが必要。

> ツールのインストールについて知りたい場合は、公式のGet Started!のガイドに従ってください。

→　minkkube のGetting startedへ

## 1.1. minikube Getting started
https://minikube.sigs.k8s.io/docs/start/

### 必要なリソース
2CPU, 2GB memory, 20GB disc, Internet, Docker
→Ctrl + Alt + escape で確認
 我が家は12CPUコア、32G memory、925G disc, Internetあり
 だが、Dockerがない。
→Dockerチュートリアルへ

## 2. Docker Orientation and setup
https://docs.docker.com/get-started/

Download
Linux/Mac/Windowsが選べる
→Windowsを選択
https://docs.docker.com/desktop/install/windows-install/In

## 2.1 Docker Desktop on Windows
https://docs.docker.com/desktop/install/windows-install/
・WSL 2 backendと Hyper Vの二種類ある。何が違う？
　WSL2: LinuxをWindows上で直接実行？？？
　Hyper-V：仮想マシン　その上にLinuxを乗せる？？？
→Win11では、MSさんはWSL 2推しのようなので、WSL2を選択(2.1.a.節で調査内容を補足）

### 2.1.a. WSL2とHyperV補足
どちらもWindows上でLinuxを動かす機能。
Microsoft公式ドキュメントを見ると、Hyper-VのWin11の記事がなかった。
→最近はWSL2推しなのだろう。WSL2を使うことにします。

#### 2.1.a.1. WSL2
https://docs.microsoft.com/ja-jp/windows/wsl/
> Windows Subsystem for Linux
> 従来の仮想マシンまたはデュアルブート セットアップのオーバーヘッドなしで、ほとんどのコマンドライン ツール、ユーティリティ、アプリケーションなどを含む GNU/Linux 環境を、変更せずに Windows 上で直接実行できます。

// Mac OS Xの頃は、MacにWindowsデュアルブートしてたな。懐かしい。

#### 2.1.a.2 Hyper V
https://docs.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/about/
> Windows 上の仮想マシンとして複数のオペレーティング システムを実行
> Hyper-V は、64 ビット版の Windows 10 Pro、Enterprise、および Education で使用できます。
私のPCはWin11のproなので、Hyper-Vは対象外？

## 2.2. 要件 for Docker Desktop on Windows
https://docs.docker.com/desktop/install/windows-install/
(1)Windows 11 64-bit: Home or Pro
  　→Pro なのでOK
(2)Enable the WSL 2 feature on Windows.
　　→後述 2.3.節でWSL2 有効化手順
(3)64-bit processor with Second Level Address Translation (SLAT)
　　//よくわからない。Win11 Pro の要件なので大丈夫そう
　　　https://www.microsoft.com/ja-jp/windows/windows-11-specifications?r=1
　　　 クライアント Hyper-V	第2レベルのアドレス変換 (SLAT) 対応のプロセッサが必要です
　　　 (Windows Pro 以上のエディションで利用可能)。
(4)4GB system RAM
　→　OK
(5)BIOS-level hardware virtualization support must be enabled 
　https://docs.docker.com/desktop/troubleshoot/topics/#virtualization
・Windowsの拡張機能で下記を有効化
　Windows Subsystem for Linux
・BIOS画面でIntel Virtualization TechnologyをON
　https://bce.berkeley.edu/enabling-virtualization-in-your-pc-bios.html
　
(6)Linux kernel update packageをインストール
　→　後述　2.3.1.節

## 2.3. WSL2を有効化
https://docs.microsoft.com/en-us/windows/wsl/install

・Windows power shellを管理者権限で実行
・wsl --list --online 
どれをインストールすればいいのかわからーん
~~~
NAME            FRIENDLY NAME
Ubuntu          Ubuntu
Debian          Debian GNU/Linux
kali-linux      Kali Linux Rolling
openSUSE-42     openSUSE Leap 42
SLES-12         SUSE Linux Enterprise Server v12
Ubuntu-16.04    Ubuntu 16.04 LTS
Ubuntu-18.04    Ubuntu 18.04 LTS
Ubuntu-20.04    Ubuntu 20.04 LTS
~~~
→無印のUnuntuはよりも安定してそうなので、Long term supportの20.04にしておこう
　Ubuntu-20.04    Ubuntu 20.04 LTS 

### Ubuntu 20.04 LSTのハード要件
https://help.ubuntu.com/community/Installation/SystemRequirements
> 2 GHz dual core processor
4 GiB RAM (system memory)
25 GB (8.6 GB for minimal) of hard-drive space (or USB stick, memory card or external drive but see LiveCD for an alternative approach)
VGA capable of 1024x768 screen resolution
Either a CD/DVD drive or a USB port for the installer media
Internet access is helpful

→問題なさそう
### 2.3.1. Ubuntuのインストール
Microsoftのベストプラクティス　https://docs.microsoft.com/en-us/windows/wsl/setup/environment

・Ubuntuのインストール
　Windows Power SHellで
　　wsl --install -d Ubuntu-20.04
・UbuntuのUsernameとパスワードを設定
　適当に設定
・Ubuntuのアップデート
　sudo apt update && sudo apt upgrade
　
・Windows Terminalのインストール（Windowsのおすすめ）
　Power ShellとUbuntuのウィンドウをタブで開けるのでよさげ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/616a9807-f0d2-703c-7858-d204ca965c63.png)

・Vscodeのインストール（Windowsのおすすめ）
　https://docs.microsoft.com/en-us/windows/wsl/tutorials/wsl-vscode
　・VSCodeのダウンンロード＆インストール
　　https://code.visualstudio.com/download

・Set up version management with Git
　省略

・Set up remote development containers with Docker
　これだ！やっとDockerにたどり着いた。

## 2.4. Microsoft Get started with Docker remote containers on WSL 2
https://docs.microsoft.com/en-us/windows/wsl/tutorials/wsl-containers
Dockerは、コンテナを使ってアプリを、作って、デプロイして、走らせるツール。
ライブラリとかもセットでコンテナに入ってるので、マシンによらずにコンテナ内の
アプリは実行できる。

### 2.4.1 事前準備
・Win 11　　　　　　　　 ：ホストOS？　OK　
・WSL2+Ubuntu 　　　　 ：ハイパーバイザ＋ゲストOS？　OK
・Visual Studio Code 　　　:code, debug用ツール　OK
・Windows terminal　　　：複数のterminalを開けるツール　OK
・Docker ID作成　　　　　：Personal は無料で作れるので作成　OK
・Docer desktop licence　：合意　OK

### 2.4.2. Install Docker Desktop
https://docs.docker.com/desktop/windows/wsl/
・Docker Desktop for windowsをダウンロード
　・インストール
　・設定 
　　Settings > General >Use WSL 2 based engine 

・Enabling Docker support in WSL 2 distros
　Version 2か確認
~~~
wsl.exe -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         2
~~~
・Docker Desktop
　Settings > Resources > WSL Integration.
　Ubuntu-20.04をEnableにする。

Terminal Ubuntuでdocerのバージョン確認 
20.10.17！　Docker入った！
~~~
ubukanegae0820@gare_shun:~$ docker --version
Docker version 20.10.17, build 100c701

ubukanegae0820@gare_shun:~$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
~~~

### 2.4.2.1. Develop in remote containers using VS Code
VS Codeに拡張を追加
・Remote-WSL extension：WSL上のOS（Ubuntu-20.04）を開く
・Remote-Containers extension：こて名の中の、repo or プロジェクトフォルダが開ける。
・Docker extension：VS Codeからコンテナアプリを管理、実装、削除。

## 2.5. コンテナの上に、Django app(Python用のWeb app framework)を乗せる
https://docs.microsoft.com/en-us/windows/wsl/tutorials/wsl-containers#develop-in-remote-containers-using-vs-code

### 2.5.1. HelloWorld-Django web appのダウンロード
TerminalのUbuntu上で
~~~
ubukanegae0820@gare_shun:~$ git clone https://github.com/mattwojo/helloworld-django.git
ubukanegae0820@gare_shun:~$ cd helloworld-django
ubukanegae0820@gare_shun:~/helloworld-django$ code .
~~~
VS Codeが開く

### 2.5.2. フォルダを開く 
Remote-Containers: Open Folder in Container.
でエラーになった。
~~~
The command 'docker' could not be found in this WSL 2 distro.
We recommend to activate the WSL integration in Docker Desktop settings.
For details about using Docker Desktop with WSL 2, visit:
https://docs.docker.com/go/wsl2/
~~~

https://docs.docker.com/go/wsl2/　へ
Docker DesktopのアプリをWindows上で立ち上げてないとエラーになる様子。
再度　Remote-Containers: Open Folder in Container.
\\wsl.localhost\Ubuntu-20.04\home\ubukanegae0820\helloworld-django

### 2.5.3 Python 3を選択
.devcontainer folder ができて、
　Dockerfile
　devcontainer.json
が生成される。

### 2.5.4 バージョン確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/3d85a41e-1746-960a-def0-292bd2fc7776.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/2610e154-d447-203c-711b-2d25e5081eda.png)

→コンテナの上でアプリが動いた

### コンテナができてました。
Docker Desktopを開くと、新しいコンテナ「vsc-hellowworld」ができた！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/f1afc932-1e4d-1a92-7f04-5bc6656d9747.png)

やっと、Minikubeに必要なDockerの環境ができました。