仮想化&コンテナがしっかりわかる教科書を読んで、仮想化とコンテナについて自分なりに整理してまとめました。
目次
仮想化とは
仮想化とは、実体のないものをあたかも実現しているかのごとく表現する技術のことです。例えばある一台の物理的なサーバ上に、複数の仮想的なサーバを構築することができます。このように仮想化によって、物理的なサーバを増やすことなくサーバを増減できます。
逆に、仮想化によって実際は複数の物理的なサーバで構成されているのに、ユーザには1つのサーバに見せかけることも可能です。
仮想化にはサーバ仮想化、ネットワーク仮想化、ストレージ仮想化など様々な種類があります。
サーバ仮想化とは
サーバ仮想化とは、物理サーバ上に仮想的なサーバを構築する技術のことです。サーバ仮想化には「ホストOS型仮想化」、「ハイパーバイザ型仮想化」、「コンテナ型仮想化」があります。
- ホストOS型:物理サーバいインストールされたホストOS情で仮想サーバを動作させる
- ハイパーバイザ型:ホストOSなしで動作するハイパーバイザと呼ばれる仮想化ソフトウェアを利用する
- コンテナ型:コンテナというアプリケーションと実行環境をまとめて隔離する仕組みを利用し、OS単位ではなくアプリケーション単位で仮想化する
サーバ仮想化メリット・デメリット
仮想化として最もイメージしやすいホストOS型仮想化におけるメリット・デメリットは以下のことが挙げられます。
サーバ仮想化メリット
基本的に障害に強い
仮想サーバごとバックアップすることが可能なため、仮想サーバに障害が発生した場合でも、以前のバックアップから簡単に復元することが可能です。
コピーや削除、スペックの変更が容易
仮想サーバはデータなため、CPUやメモリなどを必要に応じて増減させて、スペックを変更することができます。またコピーや削除も容易です。サーバの性能を上げるためにサーバそのもののスペックを増強することを「スケールアップ」、サーバの台数を増やすことを「スケールアウト」、減らすことを「スケールイン」といいます。
サーバ仮想化のデメリット
物理サーバに障害時に仮想サーバに影響が出る
物理サーバに障害が発生すると、そのサーバ上で稼働している全ての仮想サーバに影響が出る場合があります。
コストが高くつく場合がある
小規模サービスや障害発生時の業務インパクトが小さいシステムでは、仮想化にかかるコストが高くつく場合があります。提供するサービスとの費用対効果を仮想化の導入前に検討することが必要です。
Dockerとは
Dockerとは、コンテナの実行やコンテナイメージの作成・配布を行うためのプラットフォームです。Dockerはアプリケーションを実行環境ごとパッケージ化するため、開発環境でも運用環境でも同じようにアプリケーションを動させることができます。
DockerはホストOSがLinuxであることを前提につくられており、ホストOSがWindowsやMacOSの場合はDockerのソフトウェアをインストールすることで、コンテナ型仮想化ソフトウェア上にLinuxの仮想マシンが構築されます。コンテナはその仮想マシン上で動作するという構成になっています。
Dockerのコンセプト
- 柔軟性:プログラミング言語などが制約されない
- 疎結合:システムを独立したコンポーネントへ分解できる
- 軽量:効率的にリソースを活用する
- スケーラブル:必要に応じてリソースを増減できる
- ポータブル:異なる実行環境への移行が容易
- セキュア:コンテナ同士分離できる
コンテナとは
コンテナはOS上で実行されているプロセスです。プロセスは実行中のプログラムのことで、コンテナが通常のプロセスと異なる点は、名前空間などの仕組みによって他のプロセスから隔離されるように設定されていることです。そのため、コンテナを使うことで外部から影響を受けない独立した環境でプロセスを実行できます。
コンテナイメージとは
コンテナイメージとは、コンテナを実行するためのテンプレートです。コンテナは、コンテナイメージから生成されます。コンテナイメージとコンテナの関係はオブジェクト指向的にいうと、クラスとオブジェクトの関係に似ています。コンテナないのプロセスの実行環境はコンテナイメージによって決まりますが、コンテナイメージ内でプロセスを事項されることはありません。
コンテナイメージの作成は多くの場合、コンテナの作成手順を記述したファイルであるDockerfileを使用して自動で作成します。
コンテナのライフサイクル
コンテナには作成や削除といったいくつかの状態があり、作成から削除までの状態の流れをコンテナのライフサイクルといいます。Dockerでは、コンテナの状態として主に「作成」、「実行」、「停止」、「ポーズ」、「削除」の5つがあります。
- 作成:コンテナレイヤーが作成された状態
- 実行:コンテナ内でプロセスが実行している状態
- 停止:コンテナ内でプロセスが終了している状態
- ポーズ:コンテナ内でプロセスが一時停止している状態
- 削除:コンテナレイヤーが削除された状態
基本は1コンテナに1プロセス
コンテナは本質手にはプロセスと同じであるため、同じプロセスに含んだ場合に自然かどうかを基準に判断することができます。例えば、WebシステムにおいてWebサーバ、APサーバ、DBサーバの三層でシステムを構成するとき、1つのコンテナ内で3つのプロセスを実行するとも可能だが、通常別々のプロセスとして実行されるため、3つのコンテナに分けた方良いということになります。
参考:図解即戦力 仮想化&コンテナがこれ1冊でしっかりわかる教科書