WindowsでDockerまとめ

# これは何か

WindowsをDocker化にするにあたっての作業ログです。

### HomeなのかProなのか？Check


```:cmd
> systeminfo
```
「OS 名: 」以降を確認します。

# Windows Homeの場合

Hyper-V(仮想化システム)がサポートされていないため
Docker Toolboxを使用します。

## Docker Toolboxに内包されているソフトウェア

- Docker Client for Windows
 - `docker-machine`コマンドを実行するためのDocker Machine
 - `docker`コマンドを実行するためのDockerエンジン
 - `docker-compose`コマンドを実行するためのDocker Compose
- Docker Toolbox management tool & ISO
- Oracle VM VirtualBox
- Git MSYS-git UNIX tools

## Docker Toolboxのインストール

下記リポジトリから.exeファイルをインストールします。
[Releases · docker/toolbox](https://github.com/docker/toolbox/releases)

Install VirtualBox with NDIS5 driver[default NDIS6]: デフォルトではOFFですが、ONにしてNDIS5 driverを使用します。

`Looking for vboxmanage.exe`とエラーメッセージ

下記手順を踏むことでDockerToolboxを利用できました。
現在issueでDocker Toolboxインストーラーのバグが報告されていて、[修正のPR](https://github.com/docker/toolbox/pull/791)が出されていました。バージョンアップに期待です。

- [ ] VirtualBox,git,doker toolboxをアンインストール後、再起動
- [ ] VirtualBoxを管理者としてインストール実行後、再起動
- [ ] gitの最新版を管理者としてインストール実行後、再起動
- [ ] DockerToolboxを管理者として実行、再起動
- [ ] ↑VirtualBox,gitを除外してインストール

# Windows Proの場合

Hyper-V(仮想化システム)がサポートされているため
Docker for Windowsを使用します。

## Hyper-Vの有効化

コントロールパネルの[プログラム]-[Windowsの機能の有効化または無効化]から「Hyper-V」にチェックを付けます。
※有効化するにはOSの再起動が必要です。

## Docker for Windowsのインストール

以下のサイトから.exeファイルをインストール
https://docs.docker.com/docker-for-windows/install/
安定板のStable channelを選びます。

「Add shortcut to desktop」にチェックを付けて「OK」をクリックします。
インストール終了後、ダイアログの指示通りLog outして
「OK」を選択することでOSの再起動が行われます。

## Dockerのバージョンを確認
```:powershell
> docker -v
Docker version 19.03.5, build 633a0ea
```

# トラブルシューティング 🐾

## sshが入っていない

- Windowsでoptionで検索
    - オプション機能を追加する
    - 機能の追加
    - OpenSSHサーバを追加

- 管理者権限でPowerShell起動
下記を実行

```:powershell
netsh advfirewall firewall add rule name="sshd" dir=in action=allow protocol=TCP localport=22
```

## 以前のToolboxで作った環境が残っていて環境汚染されていた

`could not read CA certificate "C:\Users\\.docker\machine\machines\default\ca.pem": open`
というerorreが出る。
Toolbox絡みの環境変数を全部消します。

PoweShellを起動して、以下を実行し環境変数を削除します。

```:powershell
[Environment]::SetEnvironmentVariable("DOCKER_CERT_PATH", $null, "User")
[Environment]::SetEnvironmentVariable("DOCKER_HOST", $null, "User")
[Environment]::SetEnvironmentVariable("DOCKER_MACHINE_NAME", $null, "User")
[Environment]::SetEnvironmentVariable("DOCKER_TLS_VERIFY", $null, "User")
[Environment]::SetEnvironmentVariable("DOCKER_TOOLBOX_INSTALL_PATH", $null, "User")
```

>このあとChocolateyを使いましたが、正直使わないでdocker-machineをupgradeできるならそっちのほうが良いかもと思いました。
**Chocolatey: Windows版のhomebrew**
Chocolatey内にあるものが最新版じゃない場合もあり、ものによってはアンインストールできなくて結局GUI手動でやることになります。
Windowsのパッケージマネージャーにおいてchocolatey以外の選択肢があまりない現状もあるので、きちんとサポートされていて自動アップデート機能がしっかりしている場合においては、サードパーティのパッケージマネージャーで入れる旨味がないかなぁと感じました。

Windowsのパッケージマネージャーの一つであるChocolateyをインストールします。

```:powershell
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
```
docker-machineをchoco upgradeします。

```:powershell
choco upgrade docker-machine
```

## Dockerの設定でCドライブが共有されていなかった

`Drive sharing failed for an unknown reason`
というerrorが出る。
- タスクバーからDockerのSettings
    - Shared Drivesにて「C」にチェックを入れることで解決します。

# 参考資料
**Install Docker Desktop on Windows | Docker Documentation**
https://docs.docker.com/docker-for-windows/install/

**docker/toolbox: The Docker Toolbox**
https://github.com/docker/toolbox

VirtualBox - Docker Quickstart Terminalでエラー｜teratail
https://teratail.com/questions/101943

Docker for Windowsをインストール
https://ops.jig-saw.com/techblog/docker-for-windows-install/

Windows10でsshする - Qiita
https://qiita.com/TukamotoRyuzo/items/7bd4ff6810421bdc9924

Docker for Windowsで"could not read CA certificate"エラーが発生した時の対応方法 - nuits.jp blog
https://www.nuits.jp/entry/docker-could-not-read-ca-certificate

WindowsのDockerで「Drive sharing failed for an unknown reason」エラーが出た - kdnakt blog
http://kdnakt.hatenablog.com/entry/2019/09/12/080000