この記事の最終更新日: 2025年5月1日
Docker を使い始めると、コンテナ (container) と サービス (service) という2つの言葉を必ず目にします。どちらも「アプリケーションを動かす単位」という点では共通していますが、役割とスコープがまったく異なります。本記事では、初めて Docker を触る人でもイメージできるように、両者の違いと使い分けのコツをやさしくまとめました。

1. コンテナ ― アプリを入れる「箱」

- ひとつの実行環境を切り取ったもの
コンテナはアプリケーションとその動作に必要なライブラリ、設定ファイル、実行環境(OS 依存部分)などを一つにまとめた「パッケージ」です。例えるなら、アプリとその依存ライブラリをまるごと詰めたお弁当箱です。 - 軽量で高速
コンテナは仮想マシン(VM)とは異なり、ホスト OS のカーネル(基本機能)を共有します。そのため、起動が非常に速く、メモリやCPUの使用効率が高いのが特徴です。 - 完全に隔離されている
コンテナ同士はお互いのファイルシステムやプロセス空間(動作するプログラムの領域)を共有せず、別々の空間で動作します。これにより、別のバージョン同士のアプリが干渉せずに動かせます。
イメージしやすい例:
docker run mysql:8
で起動する MySQL は1つのコンテナ。中では MySQL の実行ファイルと設定だけが動いています。
2. サービス ― コンテナを束ねる「運用ルール」

Docker を Swarm モードで使う場合や、docker compose
の deploy
セクションで指定する「サービス」は、複数のコンテナをまとめて管理するための単位です。ここでいう「サービス」は、IT業界でよく言う “Webサービス” のような概念ではなく、Docker 内部での運用管理の仕組みを指します。
- レプリカ数を指示できる
例えば「3台同じアプリを動かしたい」といった時に、サービスとして設定しておけば、自動的に同じ内容のコンテナを3つ立ち上げてくれます。 - 自己回復 (self‑healing)
1つのコンテナが異常終了しても、自動的に新しいコンテナを別の場所で立ち上げて置き換えてくれます。これにより、アプリケーションの停止時間を最小限に抑えられます。 - 負荷分散やロールアウトも自動
アプリを更新するときも、一度にすべてを切り替えるのではなく、1つずつ新しいバージョンに置き換える「ローリングアップデート」を行い、サービスの安定稼働を維持します。
イメージしやすい例:WordPress を 5 台のコンテナで冗長化し、常に健康チェック(ヘルスチェック)を通ったものだけにリクエストを流す仕組み全体が 1 つのサービス。
3. どこが違うの?
視点 | コンテナ | サービス |
---|---|---|
管理単位 | 1 つのプロセス/アプリ | 複数コンテナの集合 |
スケール方法 | 手動: docker run を繰り返す | 自動: --replicas で指示 |
自己回復 | なし。落ちたら自分で再起動 | あり。落ちると自動再スケジュール |
ネットワーク | 明示的にコンテナ名やIPアドレスで接続 | サービス名で自動的に負荷分散 |
利用シーン | 開発・検証・単機能ツール | 本番運用・大規模システム管理 |
補足:「スケーリング」とは、負荷に応じて実行するコンテナの数を増減させる仕組みのことです。
4. 使い分けのチェックリスト
- ローカル開発 or 小規模検証 → まずはコンテナ単体で十分。
docker compose up
でまとめて立ち上げると便利。 - 本番で 24 時間止めたくない → サービスにして自己回復を確保。Swarm や Kubernetes の出番。
- 水平スケール(同じものを複数台)したい → サービスでレプリカ数を設定。
- 実行ノードを意識せずに運用したい → Swarm モードや Kubernetes を用いて分散運用。
Kubernetes補足:Kubernetes 派の人は「サービス=Service リソース?」と感じるかもしれませんが、Docker Swarm のサービスは Pod(複数コンテナの最小単位)と Deployment(管理ルール)を足して2で割ったような存在 と覚えるとわかりやすいです。
5. まとめ
- コンテナ は「アプリを動かす箱」=小さな単位。起動も速く、開発向き。
- サービス は「その箱をいくつ動かすか、落ちたらどうするかを決める運用ルール」=運用管理の自動化単位。
- 開発段階ではコンテナを使い、運用フェーズに入ったらサービスとして管理して、**スケーラビリティ(拡張性)と可用性(止まりにくさ)**を確保するのが Docker の基本パターンです。
この違いを理解して使い分けられるようになると、Docker の力を最大限に活かせるようになります。ぜひこの記事を参考に、実際に手を動かしながら感覚を掴んでみてください。


大阪のエンジニアが書いているブログ。
コメント