LinuxとWindowsの壁を乗り越える
Dockerコンテナの移植性を高める「LinuxKit」のメリットとデメリット
コンテナプラットフォームは高度な移植性を実現する。だがコンテナの移植性には幾つかの制限がある。永続ストレージ、異なるコンテナ形式などがその例だ。
現在のソフトウェア環境では移植性が重要だ。一種類のホストサーバ、OS、ソフトウェア環境でしか実行できないアプリケーションでは、ビジネスニーズを満たせなくなっている。そのようなアプリケーションはアジリティに欠け、ソフトウェアやハードウェアのアップグレードを妨げる。さらにメンテナンスも難しい。
この移植性の課題の解決策になるのがコンテナプラットフォームだ。コンテナは、移植性のないアプリケーションをほぼどこにでも簡単に導入できるようにする。ただし幾つか注意点はある。
併せて読みたいお薦め記事
コンテナの可能性
コンテナ管理ツール比較
- Kubernetes、Elasticsearch、Prometheus コンテナ管理ツールを比較する
コンテナへの懐疑的な視点
移植性の定義
ソフトウェアの移植性とは、1つのアプリケーションを種類が異なるホスト環境で実行できることだ。この移植性にはさまざまなレベルがある。全ての種類のLinuxディストリビューションで実行できても、Microsoftの「Windows」では実行できないアプリケーションは、LinuxとWindowsの両方で稼働するアプリケーションに比べれば移植性は低いといえる。
また、アプリケーションをある環境から別の環境に移行する際にどの程度調整が必要かという観点で移植性が測られることもある。移植性の高いアプリケーションは、構成ファイルを大幅に変更することなく、全てプラットフォームに導入できる。
これに対して移植性が低いアプリケーションは、同様にさまざまなシステムで実行できるとしても、環境を変える場合は構成を大幅に調整しなければならない。
移植性についての従来のアプローチ
従来、移植性はアプリケーションレベルで実現してきた。つまり全てのホスト環境にほぼ共通した構成で実行できるアプリケーションを設計することで、開発者が移植性を実現していた。
こうした状況では、適切なプログラミング言語を選ぶことが重要になる。Javaなど一部の言語は、コードに大きな変更を加える必要なく、任意の種類の環境を簡単にサポートできる。だが、.NETのようなフレームワークでは複数の種類のOSをサポートするのはかなり難しい。
また、アプリケーションの移植性を高めるには、特定のOS機能やツールに依存しない構成を設計することが重要だとされている。例えばアプリケーションの構成をWindowsレジストリに保存しているとしたら、Linuxに移植するのは難しくなる。構成をプレーンなテキストファイルに保存する方が移植性は高いといえる。
仮想マシン(VM)は、ある程度の移植性を実現する1つの手段になる。例えばVMを使用すると、Linuxでしか実行できないアプリケーションをWindowsサーバでホストすることができる。この種のソリューションは、ホスト環境をクロスプラットフォーム対応にできる移植性を実現するが、ある程度の制限が残っている。WindowsベースやLinuxベースの物理サーバを使用できるため、ホスティングインフラレベルでの柔軟性は実現できる。だが同時に、アプリケーションを導入するには、特定の種類のゲストOSを使用することが求められる。
コンテナによって実現する高度な移植性
「Docker」などのコンテナプラットフォームの進化により、アプリケーション自体を変更したりVMに頼ったりすることなく、アプリケーションの高度な移植性を実現できるようになった。コンテナを利用すれば、1種類のホスト環境向けに作成したアプリケーションをほぼ全ての環境に導入できる。大抵の場合、アプリケーションの構成に変更を加える必要はない。
コンテナは「いったん作成すればどこでも実行できる」のがその理由だ。コンテナを利用する場合、コードをコンパイルしてコンテナイメージに配置する。このイメージは、コンテナをサポートするデーモンがインストールされたあらゆる種類の環境に導入できる。これが機能するのは、アプリケーションのバイナリと構成ファイル一式がコンテナ内に格納されるためだ。そのためアプリケーションはコンテナ外の環境変化の影響を受けない。
コンテナの移植性の制限事項
ただしコンテナプラットフォームがあれば、アプリケーションの移植性が制限を受けないというわけではない。コンテナでも、永続ストレージやコンテナ自体の移植性に関する制限事項など、一定の制限を受ける。
コンテナをある環境から別の環境に移動する際、コンテナ内のアプリケーションが利用する永続ストレージ構成の変更が必要になる場合がある。これは、コンテナ向けに永続ストレージを実装する方法が複数あり、ある環境におけるストレージの設定が、別の環境を念頭において設計されたコンテナではうまく機能しない可能性があるためだ。もちろん、コンテナ内に格納されたアプリケーションがステートレスの場合やストレージを必要としない場合は、こうした制限は受けない。
コンテナは、同じ種類のコンテナプラットフォーム間では移植性が高い。だがDockerなど、1種類のプラットフォーム向けにコンテナを構築すると、「Linux LXC」(Linux Containers)のような別のプラットフォームで実行できなくなる。また、最新バージョンのDocker向けに設計したコンテナは、旧バージョンのDockerでは機能しないことがある。他のテクノロジーと同様、Dockerも旧バージョンとの互換性の影響を受ける。
LinuxとWindowsの壁を乗り越える
あるOSファミリー(Windowsなど)から別のOSファミリー(Linuxなど)にコンテナを移植することも簡単ではない。VMと比べた場合、コンテナの移植性の大きな問題点は、伝統的にホストが限定される点にある。つまりLinuxのコンテナアプリケーションにはLinuxホストが、WindowsのコンテナアプリケーションにはWindowsホストがそれぞれ必要になる。
この点では、コンテナはVMマシンよりも移植性が低い。LinuxベースのVMはWindowsホストで実行でき、WindowsベースのVMもLinuxホストで実行できる。さらにコンテナは、LinuxとWindows以外のプラットフォームは全くサポートしない。そのため、例えば「Docker化」されたアプリケーションをAppleの「macOS」に導入するネイティブな方法はない。macOSのホストシステムとDockerコンテナの間の仲介としてLinuxベースのVMを機能させることで、この問題は解決できる。だがリソース使用率は高くなり、管理の負担が増えることになる。
ただし最近、Dockerに関してはこの状況が変化している。2017年春、Dockerは「LinuxKit」を発表した。LinuxKitは全ての開発者がコンテナ内に「Linuxサブシステム」を作成できるようにするツールセットだ。このLinuxサブシステムは、コンテナが別の種類のOSで実行されていても、コンテナ内で実行される小さなLinuxベースのOSを提供し、Dockerアプリケーションを実行できるようにする。このアプローチにはVMの必要はない。
LinuxKitにより、Dockerは少なくともLinuxアプリケーションに関しては最大限に移植性を高めることに成功した。Linuxコンテナアプリケーションは、LinuxKitを使ってパッケージ化される。このパッケージは、ある環境から別の環境に移行するときに構成に特別な変更を加えずに、どのような種類のホストOSでも実行できる。
ただ注意点が2つある。まずLinuxKitはDockerフレームワークとしか連携しない。LXCなど、他の種類のコンテナプラットフォームはLinux専用のままだ。次に、LinuxKitが適用されるのはLinuxアプリケーションのみだ。依然として、WindowsのコンテナアプリケーションをLinuxホストで実行する方法はない。
結論
コンテナの移植性には一定の制限がある。だがコンテナプラットフォーム、特にDockerにより、アプリケーションをあるホストプラットフォームから別のプラットフォームへ移植することがかなり簡単になった。LinuxKitがリリースされたことで移行はさらに容易になる。このツールによってLinuxのコンテナアプリケーションに完全な移植性がもたらされる。
Copyright © ITmedia, Inc. All Rights Reserved.
この記事の著者
関連記事
新着ホワイトペーパー PR
-
事例
[株式会社マクニカ] アイカ工業に学ぶ脆弱性対策 情シスが把握できずにいたアセットも正確に把握 -
製品資料
[株式会社マクニカ] 「脆弱性総まとめ」解説 被害事例から考える必須の対策ポイント -
製品資料
[Splunk Services Japan合同会社] サイバー脅威「トップ50」完全解説ガイド、新たな攻撃手法に対抗するには -
製品資料
[株式会社うるる] 「入札市場」完全ガイドブック:メリットから資格取得のポイントまで -
市場調査・トレンド
[株式会社うるる] はじめての「自治体/官公庁入札」 必要な知識がすぐに学べる入門ガイド
こんなメディアも見られています
TechTargetジャパンに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
ベンダーコンテンツ PR
From Informa TechTarget
SpecialPR
アクセスランキング
-
1
100億円の「Linux更新」を回避 みずほ銀行が選んだ“おきて破り”のRHEL延命策
-
2
Oracle巨大ITプロジェクトはなぜつまずいたのか 8年で導入1割、追加で170億ドル
-
3
Microsoft製品でここまで自動化できる 情シスがやめられる手作業10選
-
4
「VMware離れ」は本当か 3000社がVCF 9にかじを切った現実的な理由
-
5
「Microsoft 365」が乗っ取られる 跡形もなくMFAを破る手口
-
6
AI全部入り「Microsoft 365 E7」に企業が二の足を踏む訳 移行意向はわずか4%
-
7
ISMSの“コンサル丸投げ”が招く数千万円の無駄 NTTドコモビジネスの脱出劇
-
8
Netflixのバックエンドは「ほぼJava」 3000超のアプリを支える開発基盤の裏側
-
9
「IoT通信環境の構築・運用」に関するアンケート
-
10
「技術屋」で終わらないために 情シスが今取るべき認定資格5選
ホワイトペーパーランキング PR
-
1
AIエージェントで多様な日常業務を効率化するための入門ガイド
-
2
AIが「わざわざ使うツール」になっていない? 業務で自然に使う導線にする秘訣
-
3
5回聞くだけじゃ足りない? トヨタ式「なぜなぜ分析」の正しい実践方法
-
4
JR西日本ITソリューションズが「監視業務の属人化」を解消した方法とは?
-
5
「脱Excel」か「Excel快適化」か? 現場にやさしい業務改善の進め方
-
6
インシデント対応工数を約3割削減、東京ガスの事例に学ぶ監視体制刷新のコツ
-
7
PostgreSQLの「機能」「性能」「運用」「拡張性」に関する悩みの解消法
-
8
5分で分かる「セキュア大容量ファイル転送サービス」の機能とメリット
-
9
Macの安全神話は崩壊? 最新の脅威動向から見えた攻撃のトレンドと有効な対策
-
10
情報セキュリティ対策早分かりガイド:25の自社診断で弱点と解決策を理解
TechTargetジャパン SNS
インフォメーション
注目情報をチェック
TechTargetジャパンをフォロー