Dockerは、Docker社が提供するコンテナを仮想化するコンテナ型仮想環境実現ツールである。
従来型のホスト型仮想環境とコンテナ型仮想環境の大きな違いは、後者はゲストOSを不要とする点にある。
Dockerイメージとはテンプレートであり、DockerコンテナとはDockerイメージを実行してできる仮想実行環境である。
Dockerのメリット
「Docker」なんて初めて聞いた、というエンジニアの方もいらっしゃるとかと思いますが、仮想化を知らないという方はいないでしょう。Dockerは仮想化における方式の1つ、コンテナ型仮想化環境を構築するためのプラットフォームです。
ここでは、Dockerのメリットを中心にDockerについてやさしく解説をしていきます。エンジニアの皆さんには必ず役立つ知識ですので、最後までお読み頂けると幸いです。
そもそもサーバ仮想化技術とは
仮想化について、釈迦に説法かもしれませんが、一応確認しておきましょう。
仮想化技術が普及する以前は、1台のサーバに対しては1つのサーバ環境を構築するのが当たり前で、必要なサーバ環境が増えれば、サーバの台数も必要でした。
つまり、ハードウェアという物理的な構成に縛られることを当然のように受け入れていたのです。
近年、理的な構成に縛られないサーバ環境構築技術が登場してきました。この「サーバ仮想化技術」の登場によって、1台のサーバ上に複数のサーバ環境を構築することが可能となりました。また、それらのサーバ環境では異なるサーバOSを、同一サーバ上で動作させることが可能です。
Windowsサーバ上に異なるバージョンのWindowsや、Linuxなどを混在して搭載するケースもあります。では、このサーバ仮想化技術によってどのようなメリットが得られるのかを確認しましょう。
サーバ仮想化による3つのメリット
仮想サーバはクラウドサービスでは普通のサービスとして提供されています。利用者はサーバを選ぶというよりは、必要なOSを選ぶというイメージで1つの物理サーバ上にある仮想サーバを選択して利用しています。では、サーバの仮想化によるメリットを3つに絞って見ていきましょう。
導入コストの削減
従来のシステム開発では、開発時期によって選択するOSや、そのバージョンが異なると、その度にサーバを調達していましたが、仮想化技術を用いると、同一サーバ上に複数のバージョンのWindows Serverを立てて、それぞれのシステムを稼働させることが可能となりました。これにより、ハードウェア調達コストはもちろんのこと、設定作業などの人的コストの削減も実現できます。
サーバ維持コストの削減
サーバ仮想化技術によって、少ない台数で多くのシステムを稼働できれば、サーバの維持コスト(レンタル費用、電気代、メンテナンス費用など)の削減ができます。
複製の容易化によるBCP対策の実現
BCPは事業継続計画のことで、災害などの緊急事態に際しての事業継続の方法などをあらかじめ決めておきます。サーバ仮想環境が整えば、カプセル化された仮想サーバ環境はカプセルごと遠隔地のバックアップサイトに複製ができますので、非常時には短時間でバックアップサイトへの切替が行え、事業継続リスクの最小化を図れます。
3つの仮想化方式を理解しておこう

仮想化方式は大きく分類すると3つに分けられます。それぞれに特徴や、メリット・デメリットがあるため、利用の用途に合わせて最適な方式を採用する必要があります。ここでは、コンテナ型仮想化方式への理解を深めるために、仮想化の3つの方式について解説していきます。
ホスト型仮想化
ホスト型仮想化では仮想化ソフトウェアを用いて仮想マシンを稼働させます。すでに利用しているサーバなどにインストールして利用できる簡便さはあります。
しかし動作させるには同時にホストOSと仮想化ソフトウェアを利用するため、余計なオーバーヘッドが掛かってしまい、パフォーマンス低下が避けられません。
仮想化環境の構築がしやすく、検証環境としてはよく利用される方式ですが、パフォーマンスが重視される本番環境ではおすすめできません。ホスト型の代表的なソフトウェアとしては「VMware Player」、「VMware Fusion」などがあります。
ハイパーバイザー型仮想化
ハイパーバイザー型は言わば「仮想化機能を持つOS」で、ホストOSを必要としない点が特徴です。直接サーバにインストールして、その仮想化OS上で仮想マシンを稼働させるイメージです。
代表的なものとしては、「Hyper-V」、「Vmware ESXi」、「Citrix Xen」などがあります。ホストOSを必要としないため、オーバーヘッドが起こりづらく、仮想マシンのパフォーマンス低下を最小限に抑制できます。
コンテナ型仮想化
コンテナ型はアプリケーション実行領域(ユーザ空間)をコンテナのように複数に分割して、それぞれ独立して利用するという特徴を持ちます。コンテナ型はアプリケーション実行環境の仮想化技術であり、ホスト型、ハイパーバイザー型とは大きく異なる概念です。
コンテナ型仮想化を実現するためのソフトウェアとしては、「Docker」または「Kubernetes」があります。ホスト1台の構成には向いていますが、「Docker」は複数ホストになるとホスト間連携が煩雑になりがちです。
この複数ホスト環境をあたかも1ホストの実行環境のように扱え、問題を解消してくれるのが「Kubernetes」です。
Dockerコンテナを利用するメリットは?
コンテナ型仮想化については理解されたでしょうか。続いてコンテナ化仮想化ツールの「Docker」のメリットについて見ていきましょう。
環境構築が簡単
「Docker」は環境構築の難易度が低いのがメリットの1つです。コンテナの環境は「Dockerイメージ」を「Docker Hub」からダウンロードして、一部の変更を行うだけで求める環境を構築できます。
また「Docker」はリソースの消費が少なく、「Dockerコンテナ」の作成コマンドをコマンドプロンプトから打つだけで、あっという間にコンテナができあがります。
環境の共有や統一が簡単
「Docker」をそれぞれの環境にインストールしておけば、同じ「Dockerイメージ」をダウンロードし、コンテナを作成するだけでアプリケーションを動かせます。
これにより、開発者同士で簡単に開発環境の共有や統一化を図れます。また開発工程で作成した環境と同じ環境で本番環境を作れるため、本番環境への移行がスムーズに行えるのもメリットです。
リソース消費が少ない
従来型の仮想環境と比較して、コンテナ型仮想環境では、ディスクやメモリなどのリソース消費が少なくなります。それは、ホスト型仮想化やハイパーバイザー型がゲストOSを必要とするのに対し、コンテナ型ではゲストOSは不要でコンテナはアプリケーションの実行だけを行うためです。
クラウドのコンテナサービスが増加
コンテナ型のクラウドサービスを利用すると、サーバのプロビジョニング(サーバの利用手配など)をせず、管理も不要で、すぐにコンテナ利用ができます。
3大クラウドからは、「AWS Fargate」、「Azure Container Instances」、「GCP Cloud Run」といったコンテナサービスが提供されており、さらに活用が広がると見られています。
文章来源:link