Windows Server 2019でDockerを動かしてみた

今のところ目を覆うひどい状況となっているWindowsコンテナ―。KubernetesがDockerサポートをやめると言ったので、少なくともDockerの目は将来にわたって潰えたかなと思うが、来る（来るのか）Containerdの前に死にゆくWindows Server + Dockerの現状を確認しておくのも、我が新ミニPCの投資回収目的のためには悪くないかと思った。

# Dockerのインストール
まあ、手順を丁寧に抑えるのも価値が無いため簡潔に書くと、

１．Windows Server 2019の評価版ディスクを手に入れてVMware Workstationにインストールする。
https://www.microsoft.com/ja-jp/evalcenter/evaluate-windows-server-2019?filetype=ISO

CPU２個、メモリ8GB、HDD 60GBで仮想マシンを作ったが、HDD 60GBだとmicrosoft/windowsコンテナのイメージをDocker saveするのにも容量が足りなくて失敗する。マジか。。。まあ、60GBでも十分。

２．Windows ServerにDockerをインストールする。
何かもう内容古そうだし、ところどころ書いてある通りには動かないのだけど以下が公式だろう。
https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/quick-start/set-up-environment?tabs=Windows-Server

Dockerインストールを終えると、記事作成時点ではMirantis Container Runtimeとかいうどこの馬の骨ともわからないベンダー（まあ、Docker EEをDockerから買収したところだ）のDockerエンジンが動作する。この時点で日本の商用環境で使えるかというところは絶望的である。

```
> docker version
Client: Mirantis Container Runtime
 Version:           19.03.14
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        e820475
 Built:             12/17/2020 19:30:16
 OS/Arch:           windows/amd64
 Experimental:      false

Server: Mirantis Container Runtime
 Engine:
  Version:          19.03.14
  API version:      1.40 (minimum version 1.24)
  Go version:       go1.13.15
  Git commit:       57e3a05525
  Built:            12/17/2020 19:29:00
  OS/Arch:          windows/amd64
  Experimental:     false
```

# Windows ServerのDockerを使ってみる
１．IISコンテナを動かしてみる。
まず、どのタグのイメージをデプロイすればいいのかを調べるにあたって、最近のWindows Serverのバージョン命名法の妙を知る。
https://hub.docker.com/_/microsoft-windows-servercore-iis

最新のWindows、その名もWindows Server 2009というらしいのだが（2019より10ちいさい）、これは2020年9月にリリースされたWindowsの意であるらしい。重要なのは、これがうまいことに2016とか2019に被らず、次のリリースは2103になるというところだ。これは唸る。次のLTSCリリースでWindows Server 2022とか付けちゃうと2109より古いじゃん？といちゃもんが付くところまで見える。なので多分次のWindows Server LTSCは2022っていう名前じゃないな。Windows Server Xとかだろう。

とはいえいわゆる長期サポート（LTSC）が指定されているのは2019と2016のみであるため、それ以外はその時の気分で出来た不遇の子である。

また、Windows Server 2019(LTSC)の、上記ルールに沿っているっぽいバージョン名とビルド番号は、「システム」＞「バージョン情報」によれば以下の通り。
　バージョン: 1809
　OSビルド: 17763.1697

で、結局どのタグでpullすればいいんだよというのがいまいち判然とせずに30分くらい消費するも、結局ページの一番上に書いてある「windowsservercore-ltsc2019」が安全牌だろうという結論に落ち着いた。

```
> docker pull mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019
```

なので、これを起動する。
いまだ経験したことがない長いイメージ名であり、Microsoftの歴史の重みを物語っている。

```
> docker run -d -p 80:80 mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019
```

DockerHubの説明ではWinNATの問題で```http://localhost```ではアクセスできないと書いてあるが、Windows Server 2019では解消しているのか、試しにWebブラウザでアクセスしてみると問題なくIISの画面が表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/7374d0c7-fcd0-38e2-5932-e1f1ac354ef2.png)

２．コンテナのファイルを更新してみる
Windowsコンテナにdocker cpって効くのかね、と試してみたら、こちらは特に問題ない。

```
PS> type index.html
<!DOCTYPE html>
Hello World!
PS> $container = (docker ps -q)
PS> docker cp .\index.html ${container}:"C:\inetpub\wwwroot\"
```

Webブラウザをリロード。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/18d21259-8bc5-2bb5-d247-a6b1d58c25b1.png)

```docker logs```コマンドでIISのログは表示されない。これはそのうち公式イメージ側で何とかして欲しいところ。

# おわりに
まあ、結局、リモートデスクトップでつないで管理できるのがWindows Serverの一番良いところであるが、それが解消というか、出来るようになるという気配は今もこれっぽちもない。ていうか、Windows Virtual Desktop掘り下げる方がMicrosoft的にも有意義なのは間違いないし。彼らの方向性は正しい。ゲームストリーミング市場に次世代のITを牽引して欲しい。

Kubernetes界隈でWindowsをノード統合したい人たちってのはほんと、いったい何がしたいんだか。。