- 会員限定
- 2020/11/12 掲載
Windowsコンテナをわかりやすく解説、Linuxと比べて何か優れているのか?
AzureのDocker関連サービスはLinuxが先行
Microsoft Azureの「App Service」は、WindowsまたはLinuxのアプリ実行環境を提供するPaaS(サービスとしてのプラットフォーム)型のクラウドサービスです。アプリのためのさまざまなランタイム環境が用意されているのですが、Docker対応のLinuxまたはWindowsコンテナをデプロイして実行することも可能です。このコンテナ対応のサービスを「Web App for Containers」とも呼ぶことがあります。Dockerの技術は、Linuxプラットフォーム向けに登場し、発展してきたものです。Windows Server 2016およびWindows 10バージョン1607からはWindowsにも正式に対応しましたが、Dockerのコンテナ技術はLinuxが大きく先行しています。App ServiceがLinuxコンテナに正式に対応したのは3年前の2017年9月です。
一方、Windowsコンテナ対応は長いことプレビューという扱いで、2020年9月末にようやく正式対応になりました。10月からはWindowsコンテナ向けの新料金プランの提供が開始され(プレビュー期間中の50%割引は終了)、東日本を含む多くのリージョンでWindowsコンテナのデプロイが可能になっています。
Microsoft AzureのDockerコンテナ関連のサービスとしてはこの他にも「Azure Container Instances(ACI)」や「Azure Kubernetes Service(AKS)」などがありますが、まずLinuxコンテナに対応し、その後、Windowsコンテナのプレビュー対応、正式対応という流れは同様です。
Windowsコンテナ、最大の課題はその大きすぎるサイズ
マイクロソフトはDockerと協力して、WindowsコンテナのサポートをDockerのコードに統合し、Windows Server 2016で正式に対応しました。Windows Server 2016のライセンスには、「Docker Enterprise」の使用権が含まれます(※「Docker Enterprise」は、米国時間2020年11月12日リリースのバージョンから「Mirantis Container Runtime」に改称されました)。Windowsコンテナ対応は無料の「Docker Desktop Community」にも実装され、Windows 10上でLinuxコンテナ(DockerエンジンはHyper-VまたはWindows Subsystem for Linux(WSL) 2のLinux環境が提供)とWindowsコンテナの環境を切り替えて利用することができます(ただし、HomeエディションはWSL2ベースのLinuxコンテナのみ対応)。
Dockerのコンテナ技術は、ホストのカーネルを共有しながら、分離されたコンテナ環境をアプリに提供するのが特徴です。LinuxコンテナのアプリはLinuxホストのLinuxカーネル上で動くプロセス、WindowsコンテナのアプリはWindows ServerまたはWindows 10のカーネルで動くプロセスです。Windowsコンテナのほうには、OSバージョン間の下位互換性と厳格な分離環境を提供する、「Hyper-V分離モード」(Hyper-Vコンテナ)というものもありますが、オーバーヘッドが大きくなるのが難点です。
Windowsコンテナ登場時からの最大の課題は、イメージサイズの大きさでした。WindowsコンテナのベースOSイメージとしては、Server Coreインストールベースの「Windows Server Core」と、極限まで削り落としたWindows ServerであるNano Serverベースの「Nano Server」が提供されていますが、Windows Server 2016ベースの展開サイズは前者が11GB以上、後者が1GB以上でした。
その後、サイズの最適化が図られ、Windows Server 2019/Windows Server, version 1809ベースのものは「Windows Server Core」で半減、「Nano Server」で1/4程度までになっています。それでもLinuxのベースOSイメージに比べると大きさが目立ちます。
大きなイメージサイズは、イメージの取得やビルド、管理、デプロイの際に、大きな時間的ロスを生み出します。LinuxベースのLinuxコンテナやNano ServerベースのWindowsコンテナの場合、簡単なものであれば十数秒でイメージを取得、展開、実行が可能であり、コンテナの利点を感じることができるでしょう。
しかし、Windows Server Coreの場合はそうはいきません。ベースOSイメージやカスタムイメージの取得だけでも10分で完了すれば早いほうです。最初に紹介したApp Serviceですが、Windowsコンテナ向けのいくつかの主要なベースOSイメージ(servercoreやservercore/iisなど)はあらかじめキャッシュ済みになっているため(キャッシュ済みのイメージについては、以下のURLにある一覧を参照)、リソースの作成からアプリの開始まで1分以内で完了します。
しかし、カスタムイメージ、たとえばWindowsコンテナのクイックスタートで指定されているASP.NETサンプルをデプロイすると、キャッシュされていないイメージの取得に多くの時間をとられ、デプロイ開始からアプリが起動するまで実に6分もの時間がかかりました。“クイック”なところはまったく実感できません。
Configure a custom container for Azure App Service
https://docs.microsoft.com/en-us/azure/app-service/configure-custom-container?pivots=container-windows#change-the-docker-image-of-a-custom-container
【次ページ】同じことを実現できるならLinuxコンテナが断然有利
関連コンテンツ
PR
PR
PR