2 か月ほど前になりますが、AppVeyor が Visual Studio 2017 と Windows Server 2016 が使えるワーカーイメージの提供を開始しました。
AppVeyor に限らず Windows Server 2016 対応はどのサービスも遅い気がしますね。
"Visual Studio 2017" image with VS 2017 RTM and Docker is now available: https://t.co/UkDXMGehPP
— AppVeyor CI (@appveyor) 2017年3月10日
既に試している人もいますが、Docker 周りの状況も当時と変わってきているので改めて調べます。
最終的な目標は AppVeyor 上で ASP.NET アプリケーションの Docker Image をビルドして、Docker Hub や Azure Container Registry にプッシュして、ECS や ACS で使うことです。
Windows Server Containers の場合はベースイメージが大きいので、実用的かどうか含め調べます。
インストールされている Docker
まずは AppVeyor VM 上の Docker を確認するために docker info を実行してみました。ちなみに有料プランを契約しているので、ちょっと良い VM が用意されている状態です。
Windows Server 2016 の最新バージョンが使われていて、Docker のバージョンも 17.03.1-ee と新しいものがインストールされています。
> docker info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 2 Server Version: 17.03.1-ee-3 Storage Driver: windowsfilter Windows: Logging Driver: json-file Plugins: Volume: local Network: l2bridge l2tunnel nat null overlay transparent Swarm: inactive Default Isolation: process Kernel Version: 10.0 14393 (14393.1066.amd64fre.rs1_release_sec.170327-1835) Operating System: Windows Server 2016 Datacenter OSType: windows Architecture: x86_64 CPUs: 2 Total Memory: 1.464 GiB Name: APPVYR-WIN ID: MNR6:QBA5:QSF7:TNY2:G63V:WXA6:4TXI:CP5T:5B3B:TFBF:JLUV:LQVB Docker Root Dir: C:\ProgramData\docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false
Windows Server 2016 の 4 月アップデートが適用されているので、Docker Swarm のサポートが改善していたりします。詳細は KB4015217 やブログに載ってました。
Improved the Host Network Service (HNS) to support an overlay network driver for use on Windows Server 2016 to connect containers across hosts using Docker Engine in Swarm Mode.
https://support.microsoft.com/en-us/help/4015217/windows-10-update-kb4015217
Docker Swarm を CI で使うかと言われると使わないですが、最新に追従する姿勢は好感が持てます。
pull 済みのイメージ
docker images を実行して、既に pull されているイメージがあるのか確認してみました。Azure と同様に windowsservercore と nanoserver の最新バージョンが、予め pull されていました。
> docker images REPOSITORY TAG IMAGE ID CREATED SIZE microsoft/windowsservercore latest 590c0c2590e4 2 weeks ago 10.1 GB microsoft/nanoserver latest a943c29f0046 2 weeks ago 1.01 GB
AppVeyor の Platform Update を見ると、ワーカー VM の更新と同タイミングでイメージも更新してくれているようです。これはかなり安心して使うことが出来そうです。
tag は特定バージョンを指定せずに latest で問題なさそうです。これは良さそう。
別のイメージを pull する
pull されていない aspnet などのイメージを使う場合にどのくらい時間がかかるのかと、一度 pull したイメージはキャッシュされて次からすぐに使えるのかを確認してみます。
実際に docker pull microsoft/aspnet を実行したところ、1 分ほどで完了しました。
自宅の物理マシンで実行した場合は 30 秒ほどなので、そこまで極端に遅くはないという印象です。
同じ処理を 5 回繰り返しましたが、毎回 pull が実行されていたのでキャッシュに関してはあまり期待できない気がしました。運よく pull 済みのマシンに当たれば、素早く処理できるかも知れませんが未確認です。
Dockerfile からビルドする
適当に FROM だけ書いた Dockerfile を用意して docker build を実行してみました。
当然ながらすんなりと動作して、イメージが作られました。ここまで確認すれば、後は Container Registry に push するぐらいなので遊べるようになりそうです。
コンテナをデプロイして実行する
最後にド定番の .NET Core のサンプルアプリをデプロイして、サクッと実行してみました。
Nano Server ベースなので pull から実行まで 20 秒かかりませんでした。AppVeyor で楽しい Windows Server Containers 生活が送れそうな気が少ししてきました。