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

Docker の基本構造
下から順に、以下の 4 つのレイヤーで成り立っています。
階層 | 内容 |
---|---|
1. 物理マシン | サーバそのもの。ハードウェアが存在する。 |
2. サーバOS | Linux OS。Docker は Linux カーネル上で動作するため、土台として Linux が必要。 |
3. Docker Engine | Docker のソフトウェア本体。コンテナの作成・起動・停止などを制御する。 |
4. コンテナ | プログラムやデータを格納する軽量な“仮想空間” コンテナ内部には「Linux OSもどき」が含まれる。 |
図解イメージ
┌─────────────┐
│ 4段目 コンテナ │ ← プログラムやデータ
├─────────────┤
│ 3段目 Docker Engine │ ← Docker本体
├─────────────┤
│ 2段目 Linux OS │ ← サーバOS (ホストOS)
├─────────────┤
│ 1段目 物理マシン │ ← Server Machine
└─────────────┘

コンテナに入れるデータと OSもどき
コンテナ内には、以下のものが含まれます。
- アプリケーションやデータ
・実行したいプログラムや、そのプログラムが使うライブラリ・設定ファイルなど。 - Linux OSもどき
・実際には Linux カーネルそのものは ホストOS に依存し、コンテナ側には最低限の “周辺部分” のみが入っている。
ポイント
- 本当の意味で「空のコンテナ」は滅多に使われない。
- 必要最低限の周辺部分が入ったイメージをベースにしてコンテナを作ることが多い。
なぜ「OSもどき」なのか?
OS といえば「カーネル」と「周辺部分」で構成されます。
- カーネル … ハードウェアを直接動かす “核” の部分
- 周辺部分 … 入出力やファイル操作、ユーザーとプログラムの橋渡しをする機能群
Docker コンテナは、カーネルをホストOSに依存 することで軽量化を実現しています。つまり、コンテナの中に「フルの OS」を入れるのではなく、最低限の周辺部分 だけを含むのです。
- コンテナ内のプログラムがファイル操作などを要求すると、まずコンテナ内の“周辺部分”が受け取り、ホスト Linux OS のカーネルに依頼する。
- これにより、コンテナがあたかも独立した OS のように振る舞う一方で、余計なリソース消費を抑えられる。
コンテナ内とホストOS間でのデータ配置
コンテナに入れてしまうデータと、外部に置いておくデータを分けることができます。
- コンテナ内部に置くもの
・基本的にアプリケーションの実行に必要なファイル群(バイナリ、ライブラリ、設定ファイルなど)
・コンテナが消えると一緒に消えるため、永続化の必要がないものが中心 - 外部に置く(ホストOS側にマウントする)もの
・データベースの実体ファイルや、ユーザーが保存するファイルなど、永続化が必要なデータ
・「Volume(ボリューム)」や「Bind Mount」を使って、コンテナからアクセス可能にする
まとめ
- Docker の構造は、物理マシン → Linux OS → Docker Engine → コンテナ の順番で積み重なっている。
- コンテナには「Linux OSっぽいもの」とプログラムが含まれるが、カーネルはホスト OS(Linux)を共有しているため、フルの OS ではない。
- コンテナを軽量化できるのは、カーネルをホストに依存 し、最低限の部分だけコンテナ内に含めているから。
- データは コンテナ内部に入れる場合と、外部に置く場合 があり、用途によって使い分ける。
このように、Docker は従来の「仮想マシン」とは大きく異なる仕組みで、OS のコア部分(カーネル)を共有 しながら論理的に独立した環境を作り出します。次の章では、この軽量なコンテナをどのように作成・管理し、実際にアプリケーションを動かしていくか、さらに踏み込んで解説していきます。