コンテナの仕組み
コンテナーとは一つのカーネル上に複数のルートファイルシステムを構成する仕組みです。
前述の通り、例えばCentOSとUbuntuという2つのディストリビューションであっても、カーネル部分は同じLinuxカーネルを利用しています。
そのため、一つのLinuxカーネル上に複数のルートファイルシステムを構成することができれば
- 共通カーネル + CentOSのルートファイルシステムを利用している時にはCentOSマシンとして動作
- 共通カーネル + Ubuntuのルートファイルシステムを利用している時にはUbuntuマシンとして動作
といったように、利用するルートファイルシステムを切り替えるだけであたかも(仮想的に)複数のマシンを利用しているかのように動作させることが可能です。
このときに
- CentOSのルートファイルシステムを利用して動いているときをCentOSコンテナ
- Ubuntuのルートファイルシステムを利用して動いているときをUbuntuコンテナ
と呼ぶことができます。
つまり、共通したカーネル上に複数のルートファイルシステムを構築し、仮想的に複数のマシン(これがコンテナです。)を構築するしくみがdockerであるということになります。
アプリケーションとコンテナ
複数のルートファイルシステムを構築できるというのは、単に複数のディストリビューションを利用できるだけではありません。
ルートファイルシステムには各種ディストリビューションの関連ファイルだけではなく、その上にインストールした各種ライブラリやアプリケーションを含みます。
つまり
- ルートファイルシステムAではcentosの各種ファイル+ apache(Webサーバアプリケーション)
- ルートファイルシステムBではcentosの各種ファイル + mysql(DBサーバアプリケーション)
という構成にすることで
- Aコンテナはcentos上にWebサーバを構築したマシンとして動作
- Bコンテナはcentos上にDBサーバを構築したマシンとして動作
というように、共通のディストリビューション上に構築されたアプリケーションの異なるコンテナを利用することも可能です。
これを利用して、例えば「DBサーバ + Webサーバ」といった複数台構成のアプリケーションについても、Dockerを利用すれば一つのマシン上に効率よく構築することが可能になります。