コンテナ

コンテナイメージ こんてないめーじ

DockerコンテナDockerfileレイヤーレジストリKubernetes
コンテナイメージについて教えて

簡単に言うとこんな感じ!

アプリを動かすために必要なもの全部(プログラム・設定・ライブラリなど)をひとまとめにした「お弁当箱の中身レシピ」みたいなものだよ!このレシピさえあれば、どのサーバーでも同じ状態のアプリをすぐ起動できるんだ。


コンテナイメージとは

コンテナイメージとは、アプリケーションを動かすために必要なコード・ランタイム(実行環境)・ライブラリ・設定ファイルなどをひとつにまとめた「テンプレートファイル」のことです。このイメージをもとに、コンテナ(実際に動くプロセス)が起動されます。

料理で例えると、コンテナイメージは「レシピ+食材セット」で、コンテナはそれを使って実際に作った「料理(完成品)」に相当します。同じイメージから何個でも同じコンテナを起動でき、開発環境・テスト環境・本番環境で「まったく同じ状態」を再現できるのが最大の強みです。

Docker の普及とともに広まったこの仕組みは、今やクラウドやマイクロサービス開発の基盤技術となっています。「自分のPCでは動いたのに本番で動かない」という悩みを根本から解消してくれる存在として、現代のシステム開発に欠かせません。


コンテナイメージの構造と仕組み

コンテナイメージは「レイヤー(層)」と呼ばれる複数の薄いファイル差分を積み重ねた構造になっています。玉ねぎの皮のように層を重ねることで、変更があった部分だけを更新できる効率的な仕組みです。

構成要素説明
ベースレイヤーOSの最小構成Ubuntu, Alpine Linux
ミドルウェア層言語ランタイムなどPython 3.11, Node.js 20
アプリ層自分のコードや設定app.py, config.yaml
メタデータ起動コマンドや環境変数CMD, ENV, EXPOSE
コンテナイメージの層構造(イメージ)

 ┌─────────────────────────┐
 │  自分のアプリコード      │ ← 毎回変わる層(薄い)
 ├─────────────────────────┤
 │  ライブラリ・フレームワーク│ ← たまに変わる層
 ├─────────────────────────┤
 │  言語ランタイム (Python等) │ ← めったに変わらない層
 ├─────────────────────────┤
 │  ベースOS (Ubuntu等)     │ ← ほぼ変わらない層
 └─────────────────────────┘
         ↓ docker run
 ┌─────────────────────────┐
 │  コンテナ(書き込み可)   │ ← 実行時だけ追加される層
 └─────────────────────────┘

覚え方:「レシピ→料理」で考える

  • イメージ = レシピカード(それ自体は動かない・読み取り専用)
  • コンテナ = そのレシピで作った料理(実際に動いている状態)
  • レジストリ = レシピを保管・共有する料理本棚(Docker Hub など)

「イメージからコンテナを作る」=「レシピを見て料理を作る」と覚えると迷いません!

イメージのサイズと最適化の目安

ベースイメージサイズ目安特徴
Ubuntu 22.04約70MB汎用的・ツールが豊富
Alpine Linux約5MB超軽量・セキュリティ重視
Distroless約2〜10MBGoogle製・必要最小限
scratch0MB完全に空(Goなど向け)

歴史と背景

  • 2000年代初頭: LinuxのnamespaceやcgroupsといったOS機能が整備され、プロセス分離の基盤が確立
  • 2008年: LXC(Linux Containers)が登場し、コンテナ技術が実用化に近づく
  • 2013年: Dockerがコンテナイメージとレイヤー構造を組み合わせた画期的な仕組みを公開。「Dockerfile」でイメージをコードとして管理できるようになり爆発的に普及
  • 2015年: OCI(Open Container Initiative) が設立され、イメージフォーマットの標準化が始まる
  • 2016年以降: Kubernetes の普及でコンテナイメージが本番大規模運用でも標準に
  • 2020年代: セキュリティスキャン・署名・SBOMなど、イメージの「信頼性管理」が重要課題に

イメージの作成・配布・実行フロー

コンテナイメージがどのように作られ、どこに置かれ、どう使われるかを図解します。

Dockerfile イメージの 設計書 ビルド docker build でイメージ生成 レジストリ Docker Hub / ECR / GCR など push コンテナA 同じイメージから 何個でも起動可 コンテナB 開発・本番で 同じ動作を保証 コンテナC スケールアウト も簡単 pull & run イメージタグ管理 myapp:1.0 / myapp:latest バージョン管理が重要!

Dockerfileの基本例

# ベースイメージを指定(Pythonの公式イメージを使う)
FROM python:3.11-slim

# 作業ディレクトリを設定
WORKDIR /app

# 依存関係ファイルをコピーしてインストール
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# アプリのコードをコピー
COPY . .

# コンテナ起動時に実行するコマンド
CMD ["python", "app.py"]

このファイルを docker build -t myapp:1.0 . で実行すると、コンテナイメージが完成します。

イメージとVMイメージの違い

比較項目コンテナイメージVMイメージ(OVAなど)
サイズ数MB〜数百MB数GB〜数十GB
起動時間秒〜ミリ秒数十秒〜数分
OS共有ホストのカーネルを共有独自のOSカーネルを持つ
移植性非常に高い(OCI標準)中程度(ハイパーバイザー依存)
セキュリティ境界プロセスレベルハードウェアレベル

関連する規格・RFC

規格・番号内容
OCI Image Format SpecificationOpen Container Initiativeによるコンテナイメージフォーマットの標準仕様(v1.1)
OCI Distribution Specificationレジストリへのイメージのpush/pullAPIの標準仕様
OCI Runtime Specificationコンテナの実行(run)に関する標準仕様。イメージと組み合わせて使用

関連用語

  • Docker — コンテナイメージのビルド・実行を担う最も普及したコンテナプラットフォーム
  • コンテナ — コンテナイメージをもとに実際に起動・動作するプロセス単位
  • Dockerfile — コンテナイメージの作り方を記述した設計書ファイル
  • コンテナレジストリ — コンテナイメージを保管・配布するためのリポジトリサービス
  • Kubernetes — コンテナイメージをもとに多数のコンテナを自動管理するオーケストレーションツール
  • マイクロサービス — コンテナイメージ単位でサービスを分割・デプロイするアーキテクチャ手法
  • CI/CD — コードのビルドからコンテナイメージの作成・デプロイまでを自動化する仕組み
  • レイヤー(コンテナ) — コンテナイメージを構成する差分ファイルの積み重ね構造