目次

Docker 入門:イメージとコンテナの基本

Docker のクジラのロゴ
Docker
開発元
Docker, Inc.
初回リリース
2013 年
開発言語
Go
ライセンス
Docker Engine はオープンソースソフトウェア(Apache License 2.0)、Docker Desktop は商用ソフトウェアで、個人と小規模企業は無料で利用できます
公式サイト
www.docker.com
公式ドキュメント
docs.docker.com

Docker は、Docker, Inc.(旧 dotCloud)が 2013 年に公開しました。中核となる Docker Engine は Go 言語で開発されたオープンソースプロジェクトです。公式サイト、ドキュメント、ソースコードの一覧は、チュートリアルのトップページにある公式リソースをご覧ください。

Docker はどのような問題を解決するのか

プログラミングをする人なら、プログラムが自分のコンピューターでは正常に動くのに、同僚のコンピューターやサーバーではエラーになる状況を経験したことがあるでしょう。多くの場合、原因は環境の違いです。

  • Python のバージョンが違う(あなたは 3.14 を使っているのに、サーバーはまだ 3.10)
  • システムライブラリを 1 つインストールし忘れている
  • 設定ファイル、環境変数、フォルダーのパスが異なる
  • 同じサーバー上の 2 つのプロジェクトで、同じパッケージの異なるバージョンが必要

従来は、長いインストール手順書を作成し、各マシンで手順どおりに作業していました。しかし、どこかの手順が抜けてしまうことはよくあります。

Docker では、プログラムと実行環境をまとめてパッケージ化します。パッケージ化したものは、Docker がインストールされたどのマシンでも同じように実行できます。インストール手順は 1 行のコマンドになります。

docker run -d -p 8080:80 nginx:1.30

Windows、macOS、Linux サーバーのどれでも、この 1 行で同じ nginx Web サーバーが起動します。

3 つの基本概念

概念説明たとえ
イメージ(Image)プログラム、ライブラリ、設定を含む読み取り専用のテンプレートインストールディスク
コンテナ(Container)イメージから起動した、実行中のインスタンスディスクからインストールして実行中のプログラム
RegistryDocker Hub など、イメージを保存して共有する場所App Store

イメージとコンテナ

1 つのイメージから複数のコンテナを起動できる
イメージは複数の読み取り専用レイヤーで構成されます。docker run を実行するたびに新しいコンテナが作成され、それぞれが書き込み可能なレイヤー、プロセス、ネットワークを持ちます
  • 1 つのイメージから複数のコンテナを同時に起動でき、それぞれは互いに影響しません。
  • コンテナ内で追加、変更したファイルは、コンテナ固有の書き込み可能なレイヤーに書き込まれ、イメージには反映されません。
  • コンテナを削除してもイメージは残るため、いつでも新しいコンテナを起動できます。
  • コンテナを削除すると書き込み可能なレイヤーも消えるため、データベースなど保存が必要なデータは、別途 Volume に保存します。

イメージはレイヤーを積み重ねてできている

イメージは複数の**レイヤー(layer)**で構成されます。Node.js の Web サイトを例に説明します(上の図の左側)。

  1. ベースとなるオペレーティングシステムのレイヤー(Debian など)
  2. Node.js の実行環境のレイヤー
  3. パッケージをインストールする(npm install)レイヤー
  4. あなたのコードのレイヤー

異なるイメージ間で同じ下位レイヤーを共有できます。Debian をベースにしたイメージが 10 個あっても、Debian のレイヤーはディスクに 1 つだけ保存され、ダウンロードも 1 回だけです。これが、後で Dockerfile を書くときにコマンドの順序に気を付ける理由です。次の節で Docker をインストールした後、イメージをダウンロードすると、レイヤーが順にダウンロードされる様子を確認できます。

Registry

Registry はイメージを保存するサーバーです。最もよく使われるのは Docker Hub(docker.io)です。docker run nginx のように URL を指定しない場合、Docker Hub からダウンロードされます。そのほか、GitHub の ghcr.io や各クラウドプラットフォームの Registry もよく使われています。自分で作成したイメージをプッシュすることもできます。詳しくはDocker Hub へのプッシュをご覧ください。

Docker の構成

Docker の構成:Client、Docker Engine、Registry
docker コマンドは API を通じて Docker Engine に通知します。Engine はイメージをダウンロードし、コンテナを作成、管理します

ターミナルで docker コマンドを入力すると、実際には 3 つの役割が連携します。

役割説明
Docker CLI(Client)入力する docker コマンドラインツールです。コンテナは実行せず、要求を Engine に送ります
Docker Engine(dockerd)バックグラウンドで動作するサービスで、イメージのダウンロード、コンテナの作成、ネットワークや Volume の管理を担当します
Registryイメージを保存する場所です。Engine はここからダウンロード(pull)またはアップロード(push)します

CLI と Engine は別々なので、自分のノートパソコンから docker コマンドを使って、リモートサーバー上の Engine を操作できます(クラウドホストへのデプロイを参照)。次の節で docker version を実行すると、2 つの役割に対応する Client と Server のバージョン情報が表示されます。

Windows と macOS では、Docker Engine の実行に Linux 環境が必要です。Docker Desktop は Engine を実行するための軽量な Linux 仮想マシンを自動で作成し、CLI や Compose などのツールもインストールします。Linux では Docker Engine を直接インストールできます。

コンテナと仮想マシンの違い

コンテナと仮想マシンの構成比較
コンテナはホストのオペレーティングシステムカーネルを共有します。仮想マシンはそれぞれ完全なオペレーティングシステムを備えています

仮想マシン(VM)はコンピューター全体をエミュレートし、それぞれが独自の完全なオペレーティングシステムを持ちます。一方、コンテナはホストのオペレーティングシステムカーネルを共有し、プログラムに必要な部分(ファイルシステム、プロセス、ネットワーク)だけを分離します。

コンテナ仮想マシン
起動時間通常 1 秒未満通常、数十秒から数分
サイズ数 MB から数百 MB通常、数 GB
分離の度合いプロセス単位で、カーネルを共有オペレーティングシステム全体を分離するため、分離性が最も高い
1 台のホストで実行できる数多い少ない
異なるオペレーティングシステムを実行できるかホストと同じカーネルのシステムのみ(Linux コンテナには Linux カーネルが必要)可能。たとえば Linux ホスト上で Windows を実行できます

コンテナは仮想マシンに取って代わるものではありません。多くのクラウドサービスでは、仮想マシン内でコンテナが実行されています。両方が一緒に使われることはよくあります。

Docker はどのような用途に向いているのか

  • 開発環境:1 行のコマンドでデータベースやキャッシュなどのサービスを起動でき、コンピューターに多くのソフトウェアをインストールする必要がありません。
  • 環境の統一:チームメンバー、テスト環境、本番環境で同じイメージを使います。
  • デプロイ:プログラムをイメージにまとめれば、どのサーバーでも docker run で公開できます。以前のバージョンのイメージに戻すだけで、ロールバックできます。
  • ソフトウェアのお試し:データベースやツールを試すときはコンテナを起動し、不要になったら削除すれば、コンピューターをきれいな状態に保てます。

まとめ

  • Docker はプログラムと実行環境をまとめてパッケージ化し、「環境の不一致」の問題を解決します。
  • イメージは読み取り専用のテンプレート、コンテナは実行中のインスタンス、Registry はイメージを保存する場所です。
  • docker コマンド(Client)は要求を Docker Engine に送り、実行させます。
  • コンテナは仮想マシンより軽量で起動も速い一方、ホストのカーネルを共有します。

次の節では、あなたのコンピューターに Docker をインストールします。

練習問題

練習 1:イメージとコンテナの違いを 1 文で説明してください。

解答

イメージは読み取り専用のテンプレート(インストールディスクのようなもの)で、コンテナはイメージから起動した実行中のインスタンス(インストールして実行中のプログラムのようなもの)です。1 つのイメージから複数のコンテナを起動できます。

練習 2:コンテナを削除すると、コンテナ内で追加したファイルはどうなりますか?必要なデータを保存するにはどうすればよいですか?

解答

コンテナの書き込み可能なレイヤーとともに消えます。保存が必要なデータは Volume に格納します。Volume のライフサイクルはコンテナとは別です。

よくある質問

Docker は無料ですか?

Docker Engine と CLI はオープンソースで無料です。Docker Desktop は個人、教育機関、非商用のオープンソースプロジェクト、小規模企業には無料で利用できます。大企業では有料サブスクリプションが必要です。詳しくは[Docker のインストール](/ja/docker/install/)をご覧ください。

Docker を学ぶには、先に Linux を覚える必要がありますか?

基本的なコマンド(cd、ls、ファイルの編集)を知っているとスムーズですが、詳しく知る必要はありません。このチュートリアルでは各コマンドを説明するので、手順に沿って進められます。

Docker と Kubernetes はどのような関係ですか?

Docker はイメージをビルドし、単一のホスト上でコンテナを実行します。Kubernetes は複数のホスト上で多数のコンテナをスケジュール、拡張、管理します。まず Docker を学び、その後 Kubernetes を学びましょう。

更新日 2026年10月14日