コンテナとその周辺技術について、簡潔にまとめてみた
昨今、コンテナという言葉はよく耳にするものの、個人的にあまり良くわかってないなと感じたため、コンテナとその周辺技術についてまとめてみました。
サマリー
・コンテナは、1つのサーバー上に作られた論理的な区画であり、従来の仮想化技術と比べて高速な動作や迅速なリリースに対応可能な技術である。
・複数のコンテナを運用する場合、管理の手間が非常に煩雑となる。その解決手段として、コンテナオーケストレーション技術がある。
・コンテナと相性の良いマイクロサービスが抱える「障害連鎖」や「通信の安全性」といった問題を解決する技術として、サービスメッシュ技術がある。
コンテナとは
コンテナとは、仮想化技術の1つで、1台のサーバーの上に作られた論理的な区画を指します。1つのOSの上で、仮想的な区画であるコンテナを複数提供できます。従来の仮想化技術と並べて図に示すと、以下となります。左が従来の仮想化技術、右がコンテナを使用したものを表しています。従来の仮想化技術としてVM Ware、コンテナ技術としてDockerなどが代表的です。
従来の仮想化技術とコンテナは何が異なるのでしょうか。アプリケーション(以下、アプリ)を動かす際には、以下の工程が必要です。
【従来の仮想化技術】ホストOS ⇒ 仮想化ソフトウェア ⇒ ゲストOS ⇒ アプリ
【コンテナ】ホストOS ⇒ アプリ
つまり、コンテナの場合、仮想化ソフトウェア+ゲストOSを介した工程が不要です。アプリを動かすために、ホストOSを使用しています。より詳細にはホストOS内のカーネルを使用しています。
※カーネル:コンピューターの基本的な操作を行う機能を格納したライブラリ群
メリット
・高速な動作
アプリを動かすための工程が少なく、高速に動作する。
・高頻度のリリースに対応可能
コンテナを使用することで、HWやOSと切り離して開発できるため、開発環境で作成したものを、本番環境のような異なる環境に適用することが容易である。
デメリット
・同一のOSを利用する必要
同一のOS上で動作させる必要があり、アプリ毎に個別にOSを選択できない。
・コンテナ間の分離レベルが低い
コンテナ間の分離レベルが低く、セキュリティ要件が厳しい業界や企業には適用しにくい。
周辺技術
・コンテナオーケストレーション
マルチホストで構成されたクラスター環境で動作させる場合、ホストOS間のネットワークやストレージ等の管理が必要となり、人手による運用が非常に煩雑となります。この問題を解決する技術がコンテナオーケストレーションです。代表的なツールとして、Kubernetesがあります。
・サービスメッシュ
コンテナ技術と非常に相性が良い開発手法として、マイクロサービスがあります。これは、個々のアプリをなるべく疎になるように開発する手法で、アプリのリリース速度を早めることが可能など、変化の激しい現代に適しています。一方で、以下のような課題を抱えています。
・障害の連鎖
・障害が起きているもしくはレスポンスタイムが悪いサービスの特定
・マイクロサービス間の通信の安全性
これらの問題を解決する技術として、サービスメッシュがあります。サービスメッシュはサービス間通信を処理するソフトウェアで、アプリケーションに代わってネットワーク要求を処理します。代表的なツールとして、Istioがあります。
余談ですが、米空軍は戦闘機F-16にKubernetesとIstioを搭載したようです。これにより、AIなどの機能を柔軟にデプロイできるようになったとのことです。
参考文献
・【連載】世界一わかりみが深いコンテナ & Docker入門 〜 その1:コンテナってなに? 〜 | SIOS Tech. Lab
・注目を浴びる「Dockerコンテナ」、従来の仮想化と何が違うのか? | 東京エレクトロンデバイス
・コンテナオーケストレーションとは?仕組みやメリット、注目のツールについて徹底解説|サイバーセキュリティ.com
・DevOps、CI/CDパイプラインでもコンテナは大活躍! | Think IT(シンクイット)
・Istio入門 その1 -Istioとは?- - Qiita
・How the U.S. Air Force Deployed Kubernetes and Istio on an F-16 in 45 days – The New Stack