こちらで仮想化技術の話をしました。(仮想環境とは) ここでは仮想化を実現する技術としてホスト型、ハイパーバイザー型を紹介しました。 ホスト型ではホストOSの上、ハイパーバイザー型ではハードウェアの上に仮想化ソフトを導入し、仮想環境を作るという仕組みでした。
これらの技術では
- 複数のOSを集約した場合の性能劣化
- 仮想化ソフトウェアの介在による、障害発生時の問題の切り分けの複雑化
など問題がありました。
これらを解決する仮想化技術としてコンテナ型(仮想化技術)があります。
コンテナ型仮想化技術とは
コンテナ型仮想化技術というのはコンテナを使い実行環境を他のプロセスから隔離し、その中で実行させるものです。
コンテナとは、アプリケーションそのものや動作に必要となるあらゆるものを対象とし、区画化した空間をいいます。 要は、コンテナはアプリケーションが稼働できる実行環境をまとめた区画です。
ハイパーバイザー型やホスト型などでは仮想マシン上でゲストOSを起動する必要があるのに比べ、 ゲストOSを起動することなく、アプリケーション実行環境を構築することが可能なのがコンテナ型技術の大きな特徴です。
コンテナ型技術のメリット
仮想マシンよりも軽量で起動が速い コンテナで起動させるOSはひとつなので負荷が小さく高速な動作を実現
サーバーのメモリ負荷が軽減される 必要最小限のCPUやメモリしか使用しない
手軽に作成、削除できる 上記のように軽量なので、必要になった時だけ作成するという使い方が一般的である。
メンテナンスが楽 それぞれのOSの更新がひつような仮想マシンに比べ更新が必要なのはコンテナホストのOSのみなのでメンテナンスが楽になる
コンテナ管理ソフトウェアがハードウェア、OSごとの違いを吸収してくれる 各種環境設定をコード化して管理し、サーバーの各種設定に適用させている(Infrastracture as Codeと呼ばれる)
コンテナ型技術のデメリット
仮想サーバーごとに個別のOSが選択できない
運用に注意が必要 ホストOSリソースを共有するため、リソースの制限が不十分であるコンテナがデプロイされた場合、他コンテナに影響を与える可能性がある
コンテナ技術でなにができるのか?
コンテナを利用することで、メリットの5で述べたようにアプリケーションが最終的にどこにデプロイされても一貫性が保証されます。 それによって
- ファイル共有によって、どこでも誰でも同じ環境を構築することができる
- 環境のバージョンによって生じるズレ、本番運用におけるトラブルの防止
- 環境構築作業の手間や新規メンバー参加のコスト削減
といった環境が変化する際における問題を減らし様々な手間を削減することができます。
システム資源の負担は大きいが、自由度が高い仮想マシンと、システム資源の負担は小さく、軽量で高速だがOSの自由がきかないコンテナを使い分けることが重要です。
コンテナ型技術の代表
コンテナ型の代表に
- Docker
Linux Container
などがあります。コンテナ管理ソフトウェアではDockerが圧倒的なシェアを占めています。
Dockerについて
DockerはDocker社が開発しているコンテナ型の仮想環境を提供するためのプラットフォームです。
Dockerは主に3つの機能を持ちます。
Dockerイメージの作成
コード、ライブラリ、OSなど、アプリケーションに必要なひつまとめをDockerイメージとして作成します。 Dockerfileから作成するかコマンドラインで作成することができます。
Dockerイメージの共有
Docker Hubを利用しイメージを管理します。
Dockerコンテナの実行
Dockerイメージをビルド、コンテナとして実行することができます。
Dockerのインストールの説明