• 会員限定
  • 2020/11/12 掲載

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

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

  • icon-mail
  • icon-print
  • icon-hatena
  • icon-line
  • icon-close-snsbtns
会員になると、いいね!でマイページに保存できます。
マイクロソフトは2020年9月末、AzureのPaaSの1つである「App Service」において、Windowsコンテナの正式サポートを発表しました。同サービスのLinuxコンテナ正式対応から3年後のことです。ようやく運用環境で利用できるようになったわけですが、Windowsコンテナでなければならない理由とは何なのでしょうか?
画像
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コンテナが断然有利
関連タグ タグをフォローすると最新情報が表示されます
あなたの投稿

    PR

    PR

    PR

処理に失敗しました

人気のタグ

投稿したコメントを
削除しますか?

あなたの投稿コメント編集

機能制限のお知らせ

現在、コメントの違反報告があったため一部機能が利用できなくなっています。

そのため、この機能はご利用いただけません。
詳しくはこちらにお問い合わせください。

通報

このコメントについて、
問題の詳細をお知らせください。

ビジネス+ITルール違反についてはこちらをご覧ください。

通報

報告が完了しました

コメントを投稿することにより自身の基本情報
本メディアサイトに公開されます

必要な会員情報が不足しています。

必要な会員情報をすべてご登録いただくまでは、以下のサービスがご利用いただけません。

  • 記事閲覧数の制限なし

  • [お気に入り]ボタンでの記事取り置き

  • タグフォロー

  • おすすめコンテンツの表示

詳細情報を入力して
会員限定機能を使いこなしましょう!

詳細はこちら 詳細情報の入力へ進む
報告が完了しました

」さんのブロックを解除しますか?

ブロックを解除するとお互いにフォローすることができるようになります。

ブロック

さんはあなたをフォローしたりあなたのコメントにいいねできなくなります。また、さんからの通知は表示されなくなります。

さんをブロックしますか?

ブロック

ブロックが完了しました

ブロック解除

ブロック解除が完了しました

機能制限のお知らせ

現在、コメントの違反報告があったため一部機能が利用できなくなっています。

そのため、この機能はご利用いただけません。
詳しくはこちらにお問い合わせください。

ユーザーをフォローすることにより自身の基本情報
お相手に公開されます