開閉ボタン
ユーザーメニュー
ユーザーメニューコンテンツ
ログイン

  • 会員限定
  • 2020/11/12

Windowsコンテナをわかりやすく解説、Linuxと比べて何か優れているのか?

山市良のマイクロソフトEYE

マイクロソフトは2020年9月末、AzureのPaaSの1つである「App Service」において、Windowsコンテナの正式サポートを発表しました。同サービスのLinuxコンテナ正式対応から3年後のことです。ようやく運用環境で利用できるようになったわけですが、Windowsコンテナでなければならない理由とは何なのでしょうか?

フリーライター 山市 良

フリーライター 山市 良

IT 専門誌、Web 媒体を中心に執筆活動を行っているテクニカルライター。システムインテグレーター、IT 専門誌の編集者、地方の中堅企業のシステム管理者を経て、2008年にフリーランスに。雑誌やWebメディアに多数の記事を寄稿するほか、ITベンダー数社の技術文書 (ホワイトペーパー) の制作やユーザー事例取材なども行う。2008年10月よりMicrosoft MVP - Cloud and Datacenter Management(旧カテゴリ:Hyper-V)を毎年受賞。岩手県花巻市在住。
主な著書・訳書
『インサイドWindows 第7版 上』(訳書、日経BP社、2018年)
『Windows Sysinternals徹底解説 改定新版』(訳書、日経BP社、2017年)
『Windows Server 2016テクノロジ入門 完全版』(日経BP社、2016年)
『Windows Server 2012 R2テクノロジ入門』(日経BP社、2014年)
『Windows Server 2012テクノロジ入門』(日経BP社、2012年)
『Windows Server仮想化テクノロジ入門』(日経BP社、2011年)
『Windows Server 2008 R2テクノロジ入門』(日経BP社、2009年)
など

画像
App ServiceがようやくWindowsコンテナに正式対応。日本では東日本(Japan East)リージョンでサービスが提供されている

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イメージに比べると大きさが目立ちます。

画像
Ubuntu、Nano Server、Windows Server Coreのベース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


画像
クイックスタートのサンプルをデプロイした場合、アプリが利用可能になるまで6分かかった

【次ページ】同じことを実現できるならLinuxコンテナが断然有利

OS ジャンルのトピックス

OS ジャンルのIT導入支援情報

PR

ビジネス+IT 会員登録で、会員限定コンテンツやメルマガを購読可能、スペシャルセミナーにもご招待!