/tmp/log/cha_pppo

i love 玄米パン あんなし

de:code2019 CD01 Windows Containersまとめ

f:id:hrt0kmt:20190529090621j:plain

  • Session: CD01 / Windows ContainersとAzureによる、既存.NETアプリケーションのモダナイゼーション
  • Date: 2019/05/29
  • Place: 港区芝公園ザ・プリンス パークタワー東京
  • Contents: オンプレミスで稼働する.NETアプリのWindows Container化やWindows Server2019でのWindows Containersの機能差分。
  • Official URL

Agenda

  • Windows Containersの動向
  • WindowsのDocker Engineとimageの種類
  • Windows Server Core imageと、既存.NET Frameworkアプリケーションのモダナイズ
    • Visual Studioでコンテナ化
    • Azureへの展開

Presentation

当該セッションにて重要だと僕が思ったところを抽出した。Azure自体触ったことが無いため、誤った独自の解釈を含んでいる場合は指摘いただけると助かります。

Windows Containers Platformの進化

f:id:hrt0kmt:20190529151657j:plain
Windows Containers Platformの進化 (CD01)

f:id:hrt0kmt:20190529151753j:plain
Windows Containers Platformの進化 (CD01)

Windows Versions

LTSC (LONG-TERM SerVICING CHANNEL) だと2-3年単位だが、SAC (SEMI-ANNUAL-CHANNEL) 単位だと6ヶ月単位でのversionリリースの為、細かいversion upや最新versionに追従したい場合はSACを検討すると良さそう。

f:id:hrt0kmt:20190529151817j:plain
迅速な変革を実現する方法 (CD01)

Docker image

f:id:hrt0kmt:20190529152141j:plain
Dockerfiles: コンテナー構築のレシピ

f:id:hrt0kmt:20190529152239j:plain
最適なベースイメージの選択 (CD01)

f:id:hrt0kmt:20190529152437j:plain
最適なベースイメージの選択 (CD01)

  • Windows Hyper-V分離コンテナーの特徴
    • プロセス分離コンテナーと同じAPI、Imageを使用。
    • 各コンテナ専用のkernel copyが存在。
  • Windows プロセス分離コンテナーの特徴
    • Windows ContainersでのHW support。
      • docker run --isolation=process --device="class/{interface class GUID}" mcr.microsoft.com/windows/servercore:1809
    • DirectX GPU Acceleration (GPU対応)
      • docker run --isolation=process --device class/5B45201D-F2F2-4F3B-85BB-30FF1F953599 <mcr.microsoft.com/windows:1809 以上>
docker run -it --isolation=hyperv mcr.microsoft.com/windows/nanoserver:1809 cmd

f:id:hrt0kmt:20190529152629j:plain
Hyper-V分離のLinuxコンテナー (CD01)

f:id:hrt0kmt:20190529153221j:plain
デモ Windows Admin Center (CD01)

Windows Server Coreイメージと既存.NET Frameworkアプリケーションのモダナイズ

f:id:hrt0kmt:20190529153755j:plain
アプリケーション最適化モデル (CD01)

f:id:hrt0kmt:20190529153934j:plain
.NETアプリのAzureへの移行パターン (CD01)

f:id:hrt0kmt:20190529154204j:plain
.NETアプリをApp Serviceへ移行可能か? (CD01)

f:id:hrt0kmt:20190529154245j:plain
移行シナリオ: 既存ASP.NET Webアプリのコンテナ化

f:id:hrt0kmt:20190529154550j:plain
移行シナリオ: レジストリ経由でAzure VMへ展開 (CD01)

Windows Containersの展開先としては以下がある。

  • Azure Container Instances (ACI)
  • Azure Virtual Machine
  • Azure App Service
    • Windows Container対応はpreview
  • Service Fabric (Mesh or Cluster)
    • microserviceのpackaging、deploy、運用を簡略化する為のScalableな分散システムplatform。
    • Service Fabric Meshは現在preview。
    • 一般的なworkload
      • コンテナベースのmicroservice。
      • プレーンなプロセスをベースにしたmicroservice。
      • statefulなサービス。
  • Azure Kubernetes Service
    • Cluster(multiple hosts)上におけるコンテナの自動デプロイ、自動Scaling、運用の為のOSS platform。
    • Windows Container対応は現在preview。
    • 一般的なworkload
      • コンテナベースのmicroservice。

f:id:hrt0kmt:20190529155355j:plain
移行シナリオ: Web App for Containersへの展開 (CD01)

f:id:hrt0kmt:20190529160155j:plain
シナリオ: Azure Service Fabric Meshへの展開 (CD01)

f:id:hrt0kmt:20190529160203j:plain
シナリオ: Kubernetesへの展開

Summary

Windows Server2016からWindows Containerは利用出来るようになっているものの、2019辺りからKubernetesとの連携やアプリとの互換性が強化されてきている為、アーキテクチャが許されるのであれば最新版のOSを利用するのが良いだろう。

Linux Containerと比較しWindows Containerはまだ多くの制限、制約がありそうな雰囲気だが、Hyper-V分離Container等で構成すれば解消するという理解。

Nano Serverを利用する場合は.NETアプリケーションを実行出来ず、.NET Coreが必要である。サイズもNano Server以外は1.5~3.5GBと巨大。Docker imageのdownload, deployに時間が掛かるだろう。さらにホストはコンテナと同じWindows Versionが実行されなければならず、ホストがVersion1803であるならばコンテナもあわせ1803が実行されている必要があるが、これはHyper-V分離Containerとして実行することで解消出来そう。ただ、構成が複雑になり学習コストは高そうな雰囲気。

現時点で.NET Coreを利用してクロスプラットフォーム化されているアプリケーションであるのならば、Windows Containerを利用する明確な理由が無ければ、Linux Containerを利用する手段を検討しても良いと思う。まだContainer OrchestrationであるKubernetes、Service FabricはWindows Containerに関してプレビュー段階であり、GAして数年の内にやっとProduction環境でも利用する事例が出てくるのではないだろうか。

以上。