CNDT2020シリーズ:Windowsコンテナの基本
今回は、CloudNative Days Tokyo 2020では異色のセッションとなった「Windowsコンテナってどんな感じ?」というタイトルのセッションについて紹介する。このセッションはタイトルが示すようにWindowsで稼働するコンテナの概要を紹介するというもので、スピーカーはAP Communicationsのエンジニア、市川豊氏だ。
「コンテナと言えば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コンテナの概要を紹介した。最初のTech PreviewではPowerShellを使った独自の実装、その後Dockerとのアライアンスを経てDocker Engineベースの実装に移行したという経緯を説明した。2020年9月の段階では、Windowsコンテナには2つのモードがあり、イメージについても5種類もあるという非常にわかりにくい状況だ。またMicrosoftが提供するフレームワークも.NETと.NET Coreが存在し、その2つが2020年末には.NET 5として統合されるという見通しがすでに立っている状態で、Windowsコンテナへの移行には大きなリスクがあると考えるのは自然だろう。
Windowsコンテナのモードは、Linuxと同じようにベースとなるホストOSのカーネルを使うもの(プロセス分離モード)と、Hyper-Vを介してUtility VMというOSの上にコンテナを稼働させるモード(Hyper-V分離モード)の2つがある。両者の使い分けは、単純にWindowsだけが実行されるのであればプロセス分離モードを、Windowsの他にLinuxをOSとして稼働させ、その上でLinuxのコンテナを実行させるのであれば、Hyper-V分離モードを利用するということだろう。
さらにDocker Desktop(Docker Engine)を利用してWindowsサーバーの上でLinuxコンテナを実行する仕組みLinux Container on Windows(LCOW)も存在し、Windowsサーバー上でLinuxコンテナだけを実行するという選択肢も存在する。これはDocker Desktop VM(Moby Linux)を使うというシステムである。ここまで多くの選択肢があるという状況は、単に組み合わせ表の空白を作りたくないから実装しているのでは? と疑いたくなるほどである。
ここからはコンテナを実行する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を含んだクロスプラットフォームのためのフレームワークと言ってもいいだろう。
.NETフレームワークと.NET Coreが2020年末の.NET 5で統合されることをすでにMicrosoftが発表しているため、既存のWindowsサーバーアプリケーションをどのタイミングでどうやってコンテナ環境に取り込むのか? これを検討するのは悩ましい問題だろう。
Windowsコンテナのイメージを保管するリポジトリーも、現在ではDocker HubとAzure Container Registryがあるだけで選択肢は少ない。ただWindowsに特化したワークロードであれば、選択すべきパブリッククラウドは自ずとMicrosoftのAzureが第1候補であろうことを考えると、それほど問題はないのかもしれない。
この後はRuntimeの詳細や、コンテナ化されたイメージのサイズ肥大の問題についても触れた市川氏だったが、イメージのサイズについて、プロセス分離モードとHyper-V分離モードではイメージサイズが100MB程度、余計に必要になると解説した。
また運用時には必須となるロギングについても言及し、ある程度はツールが揃っていると解説したが、この辺りはLinuxやオープンソースベースのツールの現状に比べると弱い部分と言えるだろう。
また今後のリサーチおよび検証の予定として、CI/CD、構成情報などのマニフェストの管理方法、マイクロサービス&サービスメッシュの実装、セキュリティなどの項目について検証を行うと説明した。
セッション後、市川氏に質問を行ったところ、仮想マシンベースのシステムに比べて情報が少なく、調査に苦労していること、CI/CDのツーリング、現行の開発から実装までのワークフローとの違いなどについては、今後の課題であると認識しているという回答をもらった。
今回のセッションでは「そもそもWindowsコンテナとは何か?」を理解するためのもので、Windows Server/SQL Serverベースの開発を行っているデベロッパーにとっては出発点であると言える。今回のセッションで得られた知見をベースに、開発手法の差違、実装から運用方法の違い、性能評価の方法、ロギングや監視方法、Linuxベースのコンテナとの連携方法など、知らなければいけないポイントは山積みだ。
MicrosoftがAzureをベースにして徐々にオンプレミスのシステムをパブリッククラウドに寄せて、WindowsでもLinuxでもAzureで稼働させることを目指しているのは明確だ。さらにオープンソースソフトウェアを最大限に活用する方向にシフトしているのも明らかだが、既存のレガシーなワークロードをクラウドネイティブに移行するためにWindowsコンテナをパッケージとして活用するのは、まだまだ時間がかかりそうである。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Windows Server 2016 Technical Preview 3 で見えたコンテナ技術
- Windows Server コンテナ始動!
- 日本マイクロソフト、クラウドオリエンテッドなWindows Server 2016を解説
- OpenStack、Docker、Hadoop、SDN、.NET…、2014年のOSS動向をまとめて振り返る
- 「ソースオープン」から「オープンソース」へ… Go Azure 2015でマイクロソフトが見せた本気
- 開発者必見! Windows Server&SQL Server 2016テクニカルガイド―IT提案セミナーレポート
- より速く、より小さく、より軽く、 新基盤 Nano Server(後編)
- TechEdの再来を! 日本マイクロソフト井上章氏が語るde:code 2015への想い
- Dockerがオーケストレーション機能のSwarmモードを搭載した「Docker 1.12」を正式版に、ほか
- Microsoftがリードするモダンな分散システム用ランタイムDaprとは?