CNDT2020シリーズ:Windowsコンテナの基本

2020年12月9日(水)
松下 康之 - Yasuyuki Matsushita
Windowsアプリケーションをコンテナ化するWindowsコンテナの概要をAPCの市川氏が語る。

今回は、CloudNative Days Tokyo 2020では異色のセッションとなった「Windowsコンテナってどんな感じ?」というタイトルのセッションについて紹介する。このセッションはタイトルが示すようにWindowsで稼働するコンテナの概要を紹介するというもので、スピーカーはAP Communicationsのエンジニア、市川豊氏だ。

「Windowsコンテナってどんな感じ?」の英語版タイトル

「Windowsコンテナってどんな感じ?」の英語版タイトル

参考:Windowsコンテナってどんな感じ?

「コンテナと言えばLinux」というのがクラウドネイティブなシステムにおいては定石と言える。その一方で、日本には基幹システムをWindowsベースで組み上げられている企業が多数存在する。データベースがSQL Server、認証基盤はActive Directory、社内メールはExchange、データの共有はSharePoint、仮想化基盤はHyper-V、そしてクライアントにはWindows 10とMicrosoft Officeという構成は、ユーザー数がそれほど変動せず、トラフィックがピークアウトしないような社内システムにおいては正しいシステム構成だ。しかし外部のWebシステムとの接続やダイナミックなコンテンツ管理、インターネット向けのサービスなどをデジタルトランスフォーメーションとして指向すれば、おのずとオンプレミスやパブリッククラウドのLinuxプラットフォームが選択肢となる。しかし基幹システムをWindowsベースで構築している企業では、データベースがSQL Serverで、Windows Serverベースのアプリケーションがユーザー情報や決済データなどの重要な情報を握っているという状況もよくあるケースだろう。

そういったケースでは、そのアプリケーションを無理矢理Linuxに移植するよりも、コンテナに入れて他のアプリケーションと連動するようにしたい、ゆくゆくはKubernetesでLinuxコンテナと同様に運用したいというニーズが生まれるだろう。それを叶えるために、Linuxと同様にWindowsアプリケーションをコンテナによって実装したいと考えるのは妥当だろう。そこで登場したのがWindowsコンテナだ。

WindowsコンテナはDockerとの協業の形で登場した

WindowsコンテナはDockerとの協業の形で登場した

ここで市川氏は、Windowsコンテナの概要を紹介した。最初のTech PreviewではPowerShellを使った独自の実装、その後Dockerとのアライアンスを経てDocker Engineベースの実装に移行したという経緯を説明した。2020年9月の段階では、Windowsコンテナには2つのモードがあり、イメージについても5種類もあるという非常にわかりにくい状況だ。またMicrosoftが提供するフレームワークも.NETと.NET Coreが存在し、その2つが2020年末には.NET 5として統合されるという見通しがすでに立っている状態で、Windowsコンテナへの移行には大きなリスクがあると考えるのは自然だろう。

Windowsコンテナの2つのモード

Windowsコンテナの2つのモード

Windowsコンテナのモードは、Linuxと同じようにベースとなるホストOSのカーネルを使うもの(プロセス分離モード)と、Hyper-Vを介してUtility VMというOSの上にコンテナを稼働させるモード(Hyper-V分離モード)の2つがある。両者の使い分けは、単純にWindowsだけが実行されるのであればプロセス分離モードを、Windowsの他にLinuxをOSとして稼働させ、その上でLinuxのコンテナを実行させるのであれば、Hyper-V分離モードを利用するということだろう。

Hyper-V分離モードの解説

Hyper-V分離モードの解説

さらにDocker Desktop(Docker Engine)を利用してWindowsサーバーの上でLinuxコンテナを実行する仕組みLinux Container on Windows(LCOW)も存在し、Windowsサーバー上でLinuxコンテナだけを実行するという選択肢も存在する。これはDocker Desktop VM(Moby Linux)を使うというシステムである。ここまで多くの選択肢があるという状況は、単に組み合わせ表の空白を作りたくないから実装しているのでは? と疑いたくなるほどである。

WindowsサーバーでLinuxコンテナを実装するLCOW

WindowsサーバーでLinuxコンテナを実装するLCOW

ここからはコンテナを実行するRuntimeの解説の後に、コンテナのベースイメージの解説を行った。ここでは前提知識としてMicrosoftのフレームワークの過去を簡単に紹介する。MicrosoftはWindowsアプリケーション開発をデベロッパーに促すためにMicrosoft Foundation Class(MFC)をVisual C/C++に添付して販売を行っていた。MFCはWindowsに特化したSDK/ライブラリーだった。その後に登場した.NETは、Webアプリケーション開発まで視野に入れたフレームワークである。さらにmacOSやLinuxなどもカバーするクロスプラットフォームのフレームワークとしてフリーで公開されているのが、.NET Coreフレームワークだ。簡単に言えば、.NETフレームワークはWindows、.NET CoreはIoTを含んだクロスプラットフォームのためのフレームワークと言ってもいいだろう。

Insiderを除いても4種類もあるコンテナイメージ

Insiderを除いても4種類もあるコンテナイメージ

.NETフレームワークと.NET Coreが2020年末の.NET 5で統合されることをすでにMicrosoftが発表しているため、既存のWindowsサーバーアプリケーションをどのタイミングでどうやってコンテナ環境に取り込むのか? これを検討するのは悩ましい問題だろう。

それぞれのフレームワークと対応するコンテナベースイメージ

それぞれのフレームワークと対応するコンテナベースイメージ

Windowsコンテナのイメージを保管するリポジトリーも、現在ではDocker HubとAzure Container Registryがあるだけで選択肢は少ない。ただWindowsに特化したワークロードであれば、選択すべきパブリッククラウドは自ずとMicrosoftのAzureが第1候補であろうことを考えると、それほど問題はないのかもしれない。

Windowsコンテナのリポジトリーは今のところ2種類

Windowsコンテナのリポジトリーは今のところ2種類

この後はRuntimeの詳細や、コンテナ化されたイメージのサイズ肥大の問題についても触れた市川氏だったが、イメージのサイズについて、プロセス分離モードとHyper-V分離モードではイメージサイズが100MB程度、余計に必要になると解説した。

モードの違いによるメモリーサイズの違いを解説

モードの違いによるメモリーサイズの違いを解説

また運用時には必須となるロギングについても言及し、ある程度はツールが揃っていると解説したが、この辺りはLinuxやオープンソースベースのツールの現状に比べると弱い部分と言えるだろう。

Windowsコンテナのログ取得の解説

Windowsコンテナのログ取得の解説

また今後のリサーチおよび検証の予定として、CI/CD、構成情報などのマニフェストの管理方法、マイクロサービス&サービスメッシュの実装、セキュリティなどの項目について検証を行うと説明した。

今後の検証予定の内容

今後の検証予定の内容

セッション後、市川氏に質問を行ったところ、仮想マシンベースのシステムに比べて情報が少なく、調査に苦労していること、CI/CDのツーリング、現行の開発から実装までのワークフローとの違いなどについては、今後の課題であると認識しているという回答をもらった。

今回のセッションでは「そもそもWindowsコンテナとは何か?」を理解するためのもので、Windows Server/SQL Serverベースの開発を行っているデベロッパーにとっては出発点であると言える。今回のセッションで得られた知見をベースに、開発手法の差違、実装から運用方法の違い、性能評価の方法、ロギングや監視方法、Linuxベースのコンテナとの連携方法など、知らなければいけないポイントは山積みだ。

MicrosoftがAzureをベースにして徐々にオンプレミスのシステムをパブリッククラウドに寄せて、WindowsでもLinuxでもAzureで稼働させることを目指しているのは明確だ。さらにオープンソースソフトウェアを最大限に活用する方向にシフトしているのも明らかだが、既存のレガシーなワークロードをクラウドネイティブに移行するためにWindowsコンテナをパッケージとして活用するのは、まだまだ時間がかかりそうである。

著者
松下 康之 - Yasuyuki Matsushita
フリーランスライター&マーケティングスペシャリスト。DEC、マイクロソフト、アドビ、レノボなどでのマーケティング、ビジネス誌の編集委員などを経てICT関連のトピックを追うライターに。オープンソースとセキュリティが最近の興味の中心。

連載バックナンバー

クラウドイベント
第11回

CNDT2020シリーズ:サイボウズのSREが語る分散ストレージの配置問題を解決するTopoLVMとは

2021/1/13
サイボウズの森本氏によるCeph&Rookにおけるストレージ配置問題を解決するTopoLVMの解説のセッションを紹介する。
クラウドイベント
第10回

CNDT2020シリーズ:ヤフージャパンのインフラを支えるゼットラボが語るKubernetesストレージの深い話

2021/1/8
ゼットラボの坂下氏によるKubernetesのストレージの深い話が行われたセッションを紹介する。
クラウドイベント
第9回

CNDT2020シリーズ:オススメのGitOpsツールをCAのインフラエンジニアが解説

2021/1/7
サイバーエージェントのインフラエンジニア長谷川氏が、GitOpsのためのツールを比較して紹介する。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています