コンテナかVMか — 本番構築の基盤選定の判断軸

コンテナとVMのどちらを選ぶかは、「どちらが新しいか」ではなく「そのワークロードがどちらに向いているか」という問いに集約されます。判断を誤ると、本番稼働後の運用コストが設計段階の見積もりの2〜3倍に膨らむケースも珍しくありません。本記事では、ワークロードの状態管理・分離レベル・チームのスキルセットという三軸から選定の判断軸を体系的に整理し、構築後に後悔しない設計選択の根拠を示します。

「流行っているから」で基盤を選ぶと後悔する構造

流行採用がアーキテクチャに歪みを生む理由

技術トレンドが基盤選定を左右する場面は珍しくありません。コンテナオーケストレーションが普及した2010年代後半から、「Kubernetesを使うべきか」という問いが構築担当者のあいだで急速に広がりました。ところが現場では、オーケストレーション基盤を導入したものの運用できる人材が育たないまま本番に出てしまった、という話が繰り返されています。問題は技術そのものではなく、ワークロードの特性を確認せずに流行に乗った点にあります。単一サービスを常時稼働させる用途でKubernetesを選んだ結果、クラスタ管理・ノードプール設計・ネットワークポリシーの維持に週あたり数十時間の工数を費やすことになった構築チームの話も聞きます。VM1台で動かせば済む規模のサービスにオーバースペックな基盤を持ち込むと、アーキテクチャそのものが歪んでいきます。

ワークロードと基盤の不整合が生む見えないコスト

コンテナは起動速度・イメージの再現性・デプロイの柔軟性という点で優れた特性を持ちます。ただし、その優位性はステートレスでスケールアウトが前提のワークロードで最大化されます。ステートフルな処理や厳格なカーネルレベルの分離が必要なワークロードにコンテナを選んだ場合、運用フェーズで設計の想定外が次々と現れます。ファイルシステムへのローカル書き込みを前提とするレガシーアプリケーションをコンテナ化した際に、PersistentVolumeの設計が後付けになり、デプロイのたびにデータ整合性チェックが必要になったというケースは、構築現場でよく見られる失敗パターンです。

「後から移行すればいい」という先送りの落とし穴

基盤選定を先送りにする判断も大きなリスクをはらんでいます。「まずVMで動かして、安定したらコンテナに移行する」という方針は一見合理的に見えますが、移行コストは想定の数倍になることがあります。VMで稼働中のシステムをコンテナ化するには、アプリケーションのステートレス化・設定の外部化・ストレージの再設計が必要になる場合が多く、稼働中システムへの影響を最小化しながら進めると、エンジニア3〜5人が3ヶ月以上を費やす規模の作業になることがあります。選定の機会は設計初期に一度きりであり、後から「あのとき別の基盤を選んでおけばよかった」と気づいても、本番稼働中のシステムを基盤ごと切り替えるコストは膨大です。

コンテナが向く構築・VMが向く構築の技術的な違い

コンテナが真価を発揮する条件

コンテナの設計思想は「ホストのカーネルを共有しつつプロセスを分離することで、起動・廃棄のオーバーヘッドを極限まで小さくする」という点にあります。この設計が効果を発揮するのは、アプリケーションがステートレスで・水平スケールが求められ・デプロイ頻度が高い構成です。マイクロサービスアーキテクチャで1日に数十回のデプロイが行われるサービスでは、コンテナの再現性と起動速度が直接的にリリースサイクルを短縮します。CI/CDパイプラインとの親和性も高く、開発・ステージング・本番で同一イメージを使うことで「自分の環境では動く」という問題を構造的に排除できます。

VMが依然として優位な領域

VMの強みはカーネルレベルの完全分離にあります。ハイパーバイザーがゲストOSを完全に隔離するため、セキュリティ要件が厳しい環境・マルチテナント構成・カーネルモジュールに依存するワークロードではVMが選定の筆頭候補になります。特に金融系・医療系の本番環境では、監査やコンプライアンスの観点からカーネル共有を許容しないケースが多く、VMが実質的な必須要件になることがあります。OSレベルの設定変更が必要なワークロードや、ライセンス上の制約でOSの種類・バージョンが固定されているアプリケーションも、VMでの稼働が自然な選択です。

カーネル共有と分離レベルの差が生む制約

コンテナとVMの本質的な差異は、カーネルの共有有無にあります。Dockerコンテナはホストのカーネルをそのまま利用するため、ゲストOSのカーネルバージョンを変えることができません。これはコンテナの軽量さの源泉ですが、同時にセキュリティ境界の弱点にもなります。Namespaceとcgroupsによるプロセス分離はOSレベルの仮想化であり、VMのハイパーバイザー分離と比べると分離の強度は低くなります。セキュリティ要件・ネットワーク分離要件・コンプライアンス要件を先に整理してから、どの分離レベルが必要かを確認することが選定の出発点です。

比較表: 分離レベル・運用負荷・可搬性・学習コスト

比較で見えるトレードオフの全体像

コンテナとVMは単一の軸で優劣を決められる関係にはありません。分離レベル・運用負荷・可搬性・学習コストという四つの軸で並べると、それぞれのトレードオフが明確になります。以下の比較表は、本番構築の文脈で設計判断の材料として使うことを想定しています。

判断軸 コンテナ(Docker/Kubernetes等) VM(KVM/VMware/クラウドVM等)
分離レベル OS名前空間・cgroupsによる分離(カーネル共有) ハイパーバイザーによる完全分離(カーネル独立)
起動速度 数秒〜数十秒(イメージキャッシュ有効時) 数十秒〜数分(OSブートを伴う)
リソース効率 高い(カーネル共有によりオーバーヘッドが小さい) 低め(ゲストOSごとにリソースを消費する)
運用負荷 オーケストレーション知識が必要(学習曲線あり) 既存VMインフラ知識で対応しやすい
可搬性 高い(イメージで環境を統一しやすい) 中程度(OVA・スナップショットで移行可)
学習コスト Kubernetes習熟まで3〜6ヶ月が目安 既存スキルで展開しやすい(新規スキル少)
セキュリティ境界 コンテナエスケープのリスクがある ハイパーバイザーレベルで強固に分離
ステートフル対応 追加設計が必要(PV・外部ストレージ等) ディスクそのものが状態を保持しやすい

比較表の読み方と選定への反映

この表の各軸は独立して評価するのではなく、プロジェクトの優先度に応じて重み付けして判断します。セキュリティ要件が最上位にくる環境では「分離レベル」と「セキュリティ境界」の行を重視し、リリースサイクルの短縮が最優先の環境では「起動速度」「可搬性」「運用負荷」を組み合わせて判断します。一つの軸だけを見て結論を出すのは早計です。チームのスキルセットも選定に直結します。Kubernetesの習熟に3〜6ヶ月かかると見積もる場合は、本番移行スケジュールと照らし合わせて現実的かどうかを確認する必要があります。学習コストを「あとでキャッチアップする」と棚上げにすると、本番稼働後に障害対応ができない状況に陥るリスクがあります。

■ この設計判断を深める一冊[PR]

[試して理解]Linuxのしくみ ―実験と図解で学ぶOS、仮想マシン、コンテナの基礎知識【増補改訂版】(武内覚/技術評論社)

OS・仮想化・コンテナのしくみを図解で理解する一冊です。本番Linuxの初期設計を「なぜそう決めるか」から支えます。

Amazonで見る →

状態を持つ/持たないワークロードでの選び分け

ステートレスなワークロードとコンテナの相性

ステートレスなワークロードとは、リクエストを処理するたびに前回の状態を参照する必要がなく、任意のインスタンスが任意のリクエストを処理できる構成を指します。APIサーバー・静的コンテンツの配信・バッチ処理のワーカーといった用途がこれに当たります。こうした処理はコンテナと親和性が高く、水平スケールアウト・ローリングアップデート・障害時の自動再起動という恩恵を最大限に得られます。設計段階で「コンテナを複数立ち上げたとき同じ動作をするか」を問い、検証できればステートレスと確認できます。このチェックを飛ばして「だいたいステートレスのはず」という前提でコンテナ化を進めると、本番稼働後にセッション管理や一時ファイルの扱いで設計の穴が露呈します。

ステートフルなワークロードでの基盤選択

ステートフルなワークロードは、前回の状態をディスクや変数として保持し続ける処理です。データベース・キャッシュサーバー・ファイルサーバー・メッセージキューが代表例です。これらをコンテナで動かすことは技術的には可能ですが、PersistentVolumeの設計・バックアップ戦略の変更・フェイルオーバー時のデータ整合性確保といった追加の設計作業が必要になります。VMであれば、OSのディスクとデータが同じ仮想ディスク上に存在するため、スナップショット・バックアップ・リストアが既存の運用手順で対応できます。10台以上のデータベースサーバーを管理する環境では、VMベースで一元管理できる既存の仕組みを活かすことで、移行コストをかけずに安定した運用を維持できることがあります。

データベース・ミドルウェアをどの基盤に置くか

データベースをコンテナで運用するかどうかは、構築担当者のあいだで意見が分かれるテーマです。開発・ステージング環境ではコンテナでデータベースを動かすことに大きな問題はありませんが、本番環境では設計コストが増大します。コンテナのエフェメラルな性質とデータの永続化要件は根本的に相反するため、PersistentVolume・StatefulSet・バックアップ自動化を組み合わせた設計を事前に固める必要があります。マネージドデータベースサービスを利用する場合は、アプリケーション層をコンテナで動かしながらデータベース層をマネージドサービスまたはVMで動かすという分担が、現実的かつ管理しやすい選択肢になります。

混在させる判断とその境界線

コンテナとVMを混在させるユースケース

実際の本番環境では、コンテナとVMを完全に二択で選ぶのではなく、役割によって使い分ける混在構成が多く見られます。アプリケーション層・APIゲートウェイ・バッチワーカーはコンテナで動かし、データベース・認証サーバー・ライセンス認証が必要なソフトウェアはVMで動かすという分担が典型例です。混在構成を採用したある構築チームでは、コンテナとVMを合わせて50台以上の管理対象が生まれ、監視設定・ログ収集・セキュリティパッチの適用方針をそれぞれ個別に持つことになりました。最適な分担と思っていた構成が、運用フェーズで想定外の複雑さをもたらした例です。混在構成を選ぶときは、管理の分断を許容できるかどうかを事前に確認することが不可欠です。

境界線をどこに引くか

混在構成における境界線の引き方は、「ライフサイクルの違い」で整理するのが実用的です。デプロイ頻度が高く、スケールアウト・スケールインが必要なコンポーネントはコンテナに向き、稼働が安定的で変更頻度が低いコンポーネントはVMに向きます。具体的には、フロントエンドのWebサーバー・APIサーバー・非同期ワーカーはコンテナ、データベース・社内向けツール・ライセンス管理サービスはVMと整理すると、管理上の境界が自然に生まれます。「とりあえずコンテナに乗せてみる」という発想でDBやミドルウェアをコンテナ化すると、後から境界を引き直す作業に大きなコストがかかります。

混在構成が生むオペレーション分断のリスク

混在構成の最大のリスクは、運用チームのスキルが分散することです。コンテナの運用にはKubernetes・コンテナレジストリ・ネットワークポリシーの知識が必要であり、VMの運用にはハイパーバイザー管理・OSのパッチ管理・ストレージ設計の知識が必要です。両方の専門知識を持つエンジニアは人材市場で希少であり、小規模な構築チームでは負担が一人に集中しがちです。混在構成を選定する場合は、担当者のスキルマップと照らし合わせ「どちらの基盤を誰が見るか」を明確にしてから設計に入ることが重要です。スキルの分断を見ないまま採用すると、障害発生時にコンテナ側の担当者がVMを触れない、VM側の担当者がKubernetesを操作できないという状況が生まれます。

移行しやすさ・戻しやすさから見た選定

コンテナ化移行の現実的なコスト

VMで稼働中のシステムをコンテナに移行するコストは、アプリケーションの状態管理・設定の外部化・ストレージの再設計という三つの作業に大きく左右されます。設定ファイルをコンテナ内に直接置いているシステム、ローカルディスクへの書き込みに依存しているシステム、OSレベルのデーモンに依存しているシステムは、コンテナ化の難易度が高くなります。シンプルなWebアプリケーション1本であれば2〜4週間での移行が現実的ですが、複数サービスが絡み合った中規模システムでは4〜6ヶ月以上かかるケースがあります。移行開始前に現状のアーキテクチャ棚卸しを十分に行わないと、「想定外の依存関係が見つかった」というトラブルが移行中に多発します。手を動かす実作業のポイントについては本体のリファレンスやセミナーに委ねますが、移行可否の判断は設計段階で完了させておく必要があります。

コンテナからVMへの戻し工数

コンテナからVMへの戻し作業は、逆方向の移行より見落とされがちです。コンテナで動かしていたシステムをVMに戻す場合、Dockerfileや環境変数に分散していた設定を再度OSの設定ファイルに整理し直す必要があります。コンテナオーケストレーションで自動化していたデプロイフローをVMベースのスクリプトに書き直す作業も発生します。現場では「一度コンテナに移行したら戻せない」という思い込みが選定を歪めることがあります。実際には戻しは可能ですが、相応のコストがかかります。だからこそ最初の選定において「このワークロードはコンテナの恩恵を本当に受けられるか」を慎重に問うことが重要であり、流行に乗った移行を後になって後悔するパターンの多くは、この問いを飛ばしたことに起因しています。

段階移行の設計と判断タイミング

新規サービスからコンテナを適用し、既存のレガシーシステムはVMのまま運用を続ける段階移行は、リスク管理として合理的です。この方針を採用する場合、既存VMシステムの「コンテナ移行判断ポイント」をあらかじめ設定しておくことが有効です。たとえば「次のメジャーバージョンアップ時にコンテナ化を検討する」「デプロイ頻度が週1回を超えたらコンテナ化を検討する」という基準を設けることで、移行機会を逃さずに済みます。段階移行の落とし穴は、移行が永遠に進まずVMとコンテナが無計画に混在し続けることです。「いつかコンテナに移行する予定のVM」が何年も稼働し続け、管理の複雑さだけが積み重なるパターンを避けるには、移行完了の期限と判断基準をプロジェクト開始時点で決めておくことが必要です。

基盤選定チェックフレーム

以下は、コンテナかVMかの選定前に確認すべき判断項目をまとめたチェックフレームです。複数の項目に引っかかる場合は、それぞれの重み付けをチームで議論したうえで選定に反映してください。

  1. ワークロードはステートレスか——リクエスト間で状態を持たないかを確認する。ディスクへのローカル書き込み・セッション管理・一時ファイルに依存している場合はステートフルとみなし、コンテナ採用時の追加設計コストを見積もる。
  2. カーネルレベルの分離が必要か——コンプライアンス・セキュリティ審査・マルチテナント要件を確認する。カーネル共有を許容しない要件がある場合はVMを優先する。
  3. デプロイ頻度とスケール要件はどの程度か——1日に複数回のデプロイが見込まれる、またはオートスケールが必要な場合はコンテナの恩恵が大きい。週1回以下のデプロイかつ固定台数での稼働ならVMで対応できることが多い。
  4. チームにコンテナ運用スキルがあるか——Kubernetesの習熟には3〜6ヶ月を要することを前提に、本番移行スケジュールと照らし合わせる。学習期間が確保できない場合はVMからスタートし、段階的に移行する。
  5. OSのカスタマイズやカーネルパラメータに依存しているか——特定のカーネルモジュール・OS設定・ライセンス上の制約があるアプリケーションはVMが適している。コンテナはホストカーネルを共有するため、ゲストOSを自由に設定できない。
  6. 移行コストと戻しコストを試算したか——コンテナ化移行に要するエンジニア工数・テスト期間・ロールバック手順を事前に概算する。「あとで移行すればいい」という先送りは、実際のコストを過小評価する原因になる。
  7. 混在構成の管理コストを許容できるか——コンテナとVMを混在させる場合、監視・ログ収集・セキュリティパッチの適用方針がそれぞれ異なることを前提に管理工数を見積もる。その工数を担えるスキルセットが社内にあるかを確認する。
  8. データベースの配置方針を決めているか——データベースをコンテナ・VM・マネージドサービスのどこに置くかを設計初期に確定する。この判断が固まっていないままアプリケーション層の設計が進むと、ストレージ設計が後手に回る。

チェックフレームは「コンテナ有利の項目数」とVM有利の項目数」を数えるためのものではありません。プロジェクトの最優先事項——セキュリティ・リリース速度・チームスキル・運用コスト——に合わせて重み付けを変えながら、判断の根拠を整理するために使います。選定理由を設計ドキュメントに明記しておくことで、後から選定を見直す際の根拠になり、判断の質を継続的に高めていけます。

▶ 手を動かして本番まで到達する

その設計判断を、RHEL10の本番環境で手を動かして固めませんか

ここまでの設計判断は、読めば腹に落ちます。ですが「自分の手で本番まで通しきる自信」は、それとは別の話になります。

最大6名の少人数で、構築実務者の到達点まで引き上げます。座学で終わらせず、本番相当の環境で判断を検証する2日間です。

基盤選定をRHEL10本番で手を動かして固める講座へ →

Linuxセミナー上級編(RHEL10)|最大6名の少人数ハンズオン