【Docker基礎】Dockerの仕組み

 Docker は、物理サーバの上に Linux OS が動き、その上に Docker Engine をインストールし、さらに コンテナ を配置して利用する仕組みをとっています。
 通常のサーバは、OS の上で直接アプリケーションを稼働させますが、Docker を使う場合は「アプリケーションやデータをコンテナに詰め込み、コンテナを OS と切り離して管理する」イメージです。これが Docker の大きな特徴であり、軽量かつ独立した環境を手軽に作れる理由でもあります。

Docker の基本構造

下から順に、以下の 4 つのレイヤーで成り立っています。

階層内容
1. 物理マシンサーバそのもの。ハードウェアが存在する。
2. サーバOSLinux OS。Docker は Linux カーネル上で動作するため、土台として Linux が必要。
3. Docker EngineDocker のソフトウェア本体。コンテナの作成・起動・停止などを制御する。
4. コンテナプログラムやデータを格納する軽量な“仮想空間”
コンテナ内部には「Linux OSもどき」が含まれる。

図解イメージ

コンテナに入れるデータと OSもどき

コンテナ内には、以下のものが含まれます。

  1. アプリケーションやデータ
    ・実行したいプログラムや、そのプログラムが使うライブラリ・設定ファイルなど。
  2. Linux OSもどき
    ・実際には Linux カーネルそのものは ホストOS に依存し、コンテナ側には最低限の “周辺部分” のみが入っている。

ポイント

  • 本当の意味で「空のコンテナ」は滅多に使われない。
  • 必要最低限の周辺部分が入ったイメージをベースにしてコンテナを作ることが多い。

なぜ「OSもどき」なのか?

OS といえば「カーネル」と「周辺部分」で構成されます。

  • カーネル … ハードウェアを直接動かす “核” の部分
  • 周辺部分 … 入出力やファイル操作、ユーザーとプログラムの橋渡しをする機能群

 Docker コンテナは、カーネルをホストOSに依存 することで軽量化を実現しています。つまり、コンテナの中に「フルの OS」を入れるのではなく、最低限の周辺部分 だけを含むのです。

  • コンテナ内のプログラムがファイル操作などを要求すると、まずコンテナ内の“周辺部分”が受け取り、ホスト Linux OS のカーネルに依頼する。
  • これにより、コンテナがあたかも独立した OS のように振る舞う一方で、余計なリソース消費を抑えられる。

コンテナ内とホストOS間でのデータ配置

コンテナに入れてしまうデータと、外部に置いておくデータを分けることができます。

  • コンテナ内部に置くもの
    ・基本的にアプリケーションの実行に必要なファイル群(バイナリ、ライブラリ、設定ファイルなど)
    ・コンテナが消えると一緒に消えるため、永続化の必要がないものが中心
  • 外部に置く(ホストOS側にマウントする)もの
    ・データベースの実体ファイルや、ユーザーが保存するファイルなど、永続化が必要なデータ
    ・「Volume(ボリューム)」や「Bind Mount」を使って、コンテナからアクセス可能にする

まとめ

  1. Docker の構造は、物理マシン → Linux OS → Docker Engine → コンテナ の順番で積み重なっている。
  2. コンテナには「Linux OSっぽいもの」とプログラムが含まれるが、カーネルはホスト OS(Linux)を共有しているため、フルの OS ではない。
  3. コンテナを軽量化できるのは、カーネルをホストに依存 し、最低限の部分だけコンテナ内に含めているから。
  4. データは コンテナ内部に入れる場合と、外部に置く場合 があり、用途によって使い分ける。

 このように、Docker は従来の「仮想マシン」とは大きく異なる仕組みで、OS のコア部分(カーネル)を共有 しながら論理的に独立した環境を作り出します。次の章では、この軽量なコンテナをどのように作成・管理し、実際にアプリケーションを動かしていくか、さらに踏み込んで解説していきます。