IBM Cloud Blog

第13回『 WindowsコンテナDojo 始まります!』

記事をシェアする:

こんにちは。IBMテクノロジー事業本部 パートナー・アライアンス事業の安部と申します。パートナー様担当のテクニカルセールスとして、パートナー様との共創をテーマに、お客様のソリューションのコンテナ化やクラウド対応の際の技術支援をさせていただいております。

前回、当Solution Blogの第11回『Windows Container Porting Program いよいよ始動します!』にて、Windowsコンテナの活動開始のお知らせをさせていただきました。
今回は、そのProgramの取り組みの1つとして、「WindowsコンテナDojo」という無料の勉強会(道場)を、4月下旬より、シリーズでの提供を開始いたしますので、そのご案内をさせていただきます。

WindowsコンテナDojo開催要項

WindowsコンテナDojo TOP

  • 開催期間:2021年4月25日(水)〜8月頃(予定)
  • 開催方法:リモート配信
  • 受講対象:ビジネス・パートナー様、エンドユーザ様
  • 提供内容:ローカル環境でのWindowsコンテナを使ったアプリケーション開発から、KubernetesやOpenShiftといったオーケストレーションツールの基礎知識、また、WindowsコンテナのOpenShiftでの管理・監視まで、ハンズオン形式でセルフスタディ用のコンテンツ

基礎編にて、コンテナ化アプリ開発の基本的なスキルを習得していただき、さらに、自前のWindowsアプリのコンテナ化およびOpenShift上での実機検証を目指される方には、実践編にて、技術相談会やデザインセッションなど交えながら、個別(個社)毎でのご提供を予定しています。

コンテンツ概要(予定)

  • 基礎編(前提なし)
4月25日(月) 第0回 WindowsコンテナDojo準備編
4月28日(木) 第1回 Visual StudioでWindowsコンテナアプリ作成
5月12日(木) 第2回 Windowsコンテナアプリのビルド、公開、デプロイ
5月26日(木) 第3回 ASP.NET 入門、これまでの技術とCore Blazor
6月  9日(木) 第4回 Kubernetes基礎
6月23日(木) 第5回 OpenShift基礎1
7月  7日(木) 第6回 OpenShift基礎2

※ 時間は各回18-19時を予定していますが、ご登録により、後日、セッションの録画を見ながら、ハンズオンを実施いただけます(一部除く)

  • 実践編(自前のWindowsアプリのコンテナ化を図り、OpenShift上での実機検証を目指される方。要別途エントリー)
7月21日(木) 第7回 WindowsコンテナアプリのOpenShiftへのデプロイメント
8月  4日(木) 第8回 WindowsコンテナアプリのOpenShiftでの管理基礎
8月25日(木) 第9回 WindowsコンテナアプリのOpenShiftでの監視基礎

 

※ 上記、4月時点での予定であり、開催日・タイトル・内容などについては、適宜、変更の可能性あります

 

ぜひ、「Windowsコンテナ」にご興味のある技術者の皆様のご参加をお待ちしております。


前回の勉強会への参加を逃した方に、「Windowsコンテナ」についてのご説明を少し

冒頭の第11回Solution Blogでは、3月30日に実施させていただいたコンテナ共創センターの勉強会「Windowsコンテナの世界」のご案内させていただくと共に、コンテナ化の取り組みの意義について、ご説明させていただきました。
勉強会では、「Windowsコンテナ」についてのテクニカルセッションをご提供させていただきましたが、当日、ご参加いただけなかった方もいらっしゃるかと思いますので、ここで改めて、そのセッションの内容から抜粋しながら、「Windowsコンテナ」について、ご説明をさせていただきます。

Windowsコンテナ

Windowsコンテナに関しては、マイクロソフト社から、こちらで様々な日本語ドキュメントが公開されています。この中の「Windowsとコンテナ」では、基本的な解説が書かれておりますので、以下に、少しだけ抜粋してご紹介します。

コンテナは、オンプレミスおよびクラウドの多様な環境にわたって WindowsとLinuxのアプリケーションをパッケージ化して実行するためのテクノロジで、アプリの開発、デプロイ、管理を容易にする軽量で分離された環境を提供します。コンテナはすばやく開始および停止するので、需要の変化に迅速に対応する必要があるアプリに最適です。また、軽量であるというコンテナの性質により、インフラストラクチャの密度と使用率の向上に役立つツールでもあります。

Microsoftでは、コンテナでのアプリの開発とデプロイに役立つ多数のツールとプラットフォームを提供しています。
Docker Desktopを使用した開発およびテストのために、WindowsベースまたはLinuxベースのコンテナをWindows10で実行します。これにより、Windowsに組み込まれているコンテナ機能を利用することができます。また、Windows Serverでネイティブにコンテナを実行することもできます。

Docker、Docker Compose、Kubernetes、Helm、およびその他の便利なテクノロジのサポートを含む、Visual Studioでの強力なコンテナサポート、および Visual Studio Codeを使用して、Windowsベースのコンテナを開発、テスト、発行、デプロイします。

Visual Studio と Visual Studio Code内から直接プッシュおよびプルして、他のユーザーが使用できるようにパブリック DockerHubに、または組織の独自の開発とデプロイのためにプライベートAzure Container Registry にアプリをコンテナイメージとして発行します。

Windowsコンテナの動作

それでは、ここから、セッションの内容に入り、Windowsコンテナの仕組みを見ていきましょう。
まず、Windowsコンテナの歴史ですが、2015年4月に発表されて以来、7年以上が経過し、現在、コンテナのホストOSとしては、Windows Server2016/2019/2022とWindows10/11上で稼働します。
Windowsコンテナは、Linuxコンテナと同様に、Windowsアプリやサービスをパッケージングしたもので、WindowsのJob Objects技術により、複数のプロセスをグループ(独立)化させて束ねられ、様々なアプリやサービスと同等に、名前空間毎にリソース分離されて稼働されます。
Windowsコンテナの動作

コンテナの中には、WindowsカーネルやGUIモジュールなどが含まれていないため、WindowsOSそのものが含まれる仮想サーバと比べると、非常に、コンパクトで軽量に動作します。

Windowsコンテナに関するよくある質問として、例えば 「Linuxコンテナとの違いは何ですか?」というものがありますが、こちらについては、

  • コンテナイメージはLinuxよりも大きい(プロセス起動は同じ)
  • Linuxコンテナ用のイメージ(Linuxバイナリ)は実行できない
  • GUI無しのWindowsアプリを実行可能(専門的に言うとwinlogon.exeとdwm.exeがない)

といったような答えになろうかと思います。

他にも、先のマイクロソフト社の公式ドキュメントに「コンテナについてよく寄せられる質問」が色々書かれていますので、ご興味があれば、読んでみてください。

なお、Windowsアプリケーションに慣れ親しんだ方はご存知かと思いますが、Windows アプリケーションの技術スタックは以下のようになっており、
Windowsアプリケーションの技術スタック

下から、Intel/AMD系のx86/x64のハードウェアにWindows OSカーネルを動作させ、そこにWindows API、各種Windowsモジュールやミドルウェアなどを導入したものをベースとして、その上で、ユーザによって各種言語で書かれたアプリケーションが稼働するようなスタックになっています。

Windowsコンテナ活用に向けた検討事項

既存のWindowsアプリケーションをコンテナ化するにあたっては、アーキテクチャ上の検討事項があります。旧来から、Windows環境で沢山開発されてきた、2階層のクライアント・サーバ型のGUIアプリケーションやデスクトップでのStandalone型のGUIアプリケーションは、残念ながら、そのままではコンテナ化できません。コンテナは、主に、GUIモジュールを持たずに、サーバサイドでロジックを動かすアプリケーションに対して適用するべき技術であり、昔ながらのクラサバ型GUIアプリケーションにおいては、コンテナ化の前に、アプリケーションのモダナイゼーションの必要性が出てきます。
モダナイゼーションの方法については、いくつか方法があると思いますが、例えば、下記のように、主に2つのパターンがあげられるかと思います。
Windowsコンテナ活用に向けた検討事項
ここではスペースの関係上、手法の詳細については割愛しますが、ポイントとしては、できるだけ、既存のビジネスロジックやデータベース構造をそのままに利用しながら、ロジックとUI部分を切り離して、3階層のクライアント・サーバ型アプリに作り変えた上で、ロジック部分及びデータベース部分をサーバサイドで稼働させるような形で、コンテナ化を進めるというのがオススメとなります。

ちなみに、昨今、旧来のWindowsアプリケーションを作り直す(直さなければならない)キッカケとして、WindowsクライアントOSのIEサポート終了があり、マイクロソフトより、日本時間の2022年6月16日にInternet Explorerのサポート終了が告知されているため、旧来のIEベースで動作するアプリケーションについては、改修の必要性などが出てきています。
一応、Windows 10 Enterprise LTSB/LTSCではまだ対応するようですが、Windows 11上ではInternet Explorerが使えない(技術的にエンジンは残っているものの、継続的なセキュリティ対策はサポートされない)ということもあり、これまで長年使ってきたIEベースのアプリケーションを、いよいよ改修しないといけないユーザ企業もあるのでは無いでしょうか。

OpenShiftとWindowsコンテナ

ここまでは、Windowsコンテナの解説をしてきましたが、では、こういったアプリケーションに対し、コンテナオーケストレーション(運用・管理)を担うOpenShiftでは、このWindowsコンテナをどう扱うのでしょうか。
ちなみに「OpenShift」というものにあまり馴染みのない方に、簡単に説明を加えておくと、OpenShiftは、エンタープライズ向けのKubernetesのディストリビューションの一つであり、歴史と実績とシェアの非常に高いOSSで、RedHat社がサポートを提供している製品です。「OpenShiftって、Kubernetesと何が違うの?」とか「OpenShiftの強みって何?」というのが知りたい方は、このコンテナ共創Solution Blogシリーズの 第5回「Red Hat OpenShiftとKubernetesの違い」第12回「コンテナとRHELとOpenShift–しられざるOpenShiftの強み」 などを読んで頂くと、参考になるかと思います。
話を戻しますが、OpenShiftにおいて、LinuxアプリケーションはLinuxワーカーノード上で、WindowsアプリケーションはWindowsワーカーノードで動作させます。
OpenShiftとWindowsコンテナ
様々なコンテナのオーケストレーションやオペレーションは、特にOSの違いを意識することなく、OpenShiftから、共通で操作・管理することができます。
OpenShiftにおいて、Windowsノードを扱う場合には、OpenShiftにて提供される、Windows Machine Config Operatorという管理モジュール(ツール)を使います。このOperatorにより、Windows ServerのワーカーノードをOpenShiftクラスターに追加する事ができ、Linuxベースのワーカーノードと同じように扱うことができるようになります。このあたりについての詳細については、こちらのOpenShift公式ドキュメントをご参照ください。
OpenShiftクラスターへのWindowsノードの追加方法について、OpenShiftの4.8以降では、Bring Your Own Hostという方法で、既存のWindowsサーバーを、OpenShiftクラスターに1ワーカーノードとして追加することができるようになりました。
Windowsノードの追加方法
実際にOpenShiftクラスターにWindowsノードを追加する際には、こちらのWeb記事なども、ご参照いただければと思います。

OpenShiftクラスターに追加したWindowsノード上のプロセス

ここで、OpenShiftクラスターに追加した、Windowsノードにおいて、サーバ上のプロセスとしては、どのようなものが動いているか、少し見てみましょう。
OpenShiftクラスターに追加したWinowsノード上のプロセス
Windowsノード(Windows OS)上でプロセスを見ると、まず、コンテナのランタイム環境としてdockerエンジン(dockerd)が動いているのが分かります。また、コンテナ間のネットワーク通信を管理するhybrid-overlay-nodeや、kubernetesの標準コンポーネントである、kubeletやkube-proxyなどが動作しています。OpenShiftクラスター内では、これらのプロセス(モジュール)を通じて、他のLinuxのワーカーノード(上のコンテナ)と同等に、ワーカーノードやコンテナを一元管理できるようになっています。

まとめ

コンテナ共創センター第11回勉強会「Windowsコンテナの世界」のメインセッションの内容から、抜粋してご説明させていただきましたが、いかがでしたでしょうか。

今回、Windowsコンテナについて、詳細に見てきましたが、もう少し俯瞰して、OpenShiftプラットフォームを取り巻く全体アーキテクチャを見てみると、以下のような形で実現しています。
OpenShiftプラットフォームを取り巻く全体アーキテクチャ
ユーザアプリケーションを開発環境で作り、それをコンテナ・レジストリに登録した上で、アプリケーション管理者により、コンテナプラットフォームであるOpenShift上にデプロイして稼働させます。
OpenShiftは、ハイブリッドクラウド(=オンプレや各種クラウド)環境で動き、その上で、Windows、Linuxを問わず、様々なコンテナアプリケーションを混在した形で動作させ、それらを一元管理しながら、モバイル/PC/IoTなど、様々なデバイスからのアクセスを受けつけるような、ハイブリッドクラウド時代の統合プラットフォームとなることがご理解いただけるかと思います。

改めて、「Windowsコンテナ」についての、より詳しい情報を知りたい方はマイクロソフト社の公式ドキュメントRedHat社の公式ドキュメントなどをご参照ください。

今回のメインテーマである「Windowsコンテナ化」や「OpenShiftを使ったコンテナ運用」への取り組みというのは、Windowsアプリケーション開発の中で、新しいビジネスニーズに対する開発・リリースの高速化・効率化を目指されたいという皆様にとっては、1つの新たな挑戦になるかと思います。

まずは、何かを題材に、実際に触ってみて、知識とスキルを取得し、ご自身の環境におけるメリットや課題などを体感しながらWindowsアプリのコンテナ化にチャレンジしてみていただければと思います。

皆様の、WindowsコンテナDojoへのご参加をお待ちしています!!

安部 敬一

安部 敬一
日本アイ・ビー・エム株式会社
パートナー・アライアンス事業本部 パートナー・ソリューション共創センター
ITアーキテクト

 

1996年IBM入社。主にSWソリューションを中心に、プロジェクト参画からテクニカルセールスまで、幅広く実施。2013年よりアライアンス事業にて、SIer様やパートナー様に対する技術支援を担当。現在、IBMのオープンハイブリッド戦略の中で、お客様ソリューションのCloud化やコンテナ化といった領域にて活動中。CKA認定保持。

More IBM Cloud Blog stories

セキュリティー・ロードマップ

IBM Cloud Blog

統合脅威管理、耐量子暗号化、半導体イノベーションにより、分散されているマルチクラウド環境が保護されます。 2023 安全な基盤モデルを活用した統合脅威管理により、価値の高い資産を保護 2023年には、統合された脅威管理と ...続きを読む


量子ロードマップ

IBM Cloud Blog

コンピューティングの未来はクォンタム・セントリックです。 2023 量子コンピューティングの並列化を導入 2023年は、Qiskit Runtimeに並列化を導入し、量子ワークフローの速度が向上する年になります。 お客様 ...続きを読む


ハイブリッドクラウド・ロードマップ

IBM Cloud Blog

コンポーザブルなアプリケーション、サービス、インフラストラクチャーにより、企業は複数のクラウドにまたがるダイナミックで信頼性の高い仮想コンピューティング環境の作成が可能になり、開発と運用をシンプルに行えるようになります。 ...続きを読む