#Dockerとは
Dockerとは軽量な仮想化環境を実現するためのツールです。
Dockerを利用すればOSの内部に独立したアプリケーションの実行環境を構築することができます。この構築環境をコンテナと呼びます。
###コンテナ
コンテナ内のファイルシステムやリソースはベースOSと分離されており、コンテナ内は実行環境として独立しています。
コンテナを利用することで、1つのOS内に複数の実行環境を構築できます。
###イメージ
イメージとはコンテナを生成する元になるものです。同じイメージを使えば、同じ Linux ディストリビューションで同じアプリケーションがインストールされた全く同じ環境を複製することができます。
また、Dockerではイメージを編集し、イメージの機能・内容を継承することもできます。
Dockerイメージを使うことで、従来必要だったプログラミング言語のインストールやフレームワークのインストールといった手間がかからず、パソコンのプログラミング環境を汚すことなく様々なアプリ開発に即・挑戦できるという訳です。
#仮想マシン
仮想マシンとは仮想的にハードウェアを動作させることです。
仮想マシンには大きく分けて「ホスト型」と「ハイパーバイザー型」の2種類あります。
###ホスト型とハイパーバイザー型
ホスト型とは、OSに仮想化ソフトウェアをインストールし、その上で仮想マシンを動かすことです。既存のサーバーを使えるため、手軽に利用できる一方で、ハードウェアにアクセスする際OSを経由しなければいけません。
ハイパーバイザー型とは、ホストOSを使わず直接サーバーにインストールし仮想マシンを動かすことです。ハードウェアのリソースを直接管理できます。
###ホストOSとゲストOS
仮想化・仮想マシンに関連してよく出る用語が「ホストOS」と「ゲストOS」です。
ホストOSは仮想環境の土台となるOSのことで、ゲストOSは仮想マシン上にインストールされたOSのことです。
たとえば、Linuxサーバ上に仮想マシンを作り出しWindowsをインストールしたら、ホストOSはLinuxでゲストOSはWindowsということになります。
#仮想マシンとDockerコンテナの違い
仮想マシンはマシン単位での仮想化であるのに対して、Dockerコンテナはプロセス単位での仮想化となっています。
仮想マシンは自由度が高い一方で、リソースの消費が激しいです。
それに対して、Dockerコンテナは仮想マシンよりも軽量ですが、OSをホストと共有するため自由度は下がります。