目次
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) | イメージから起動した、実行中のインスタンス | ディスクからインストールして実行中のプログラム |
| Registry | Docker Hub など、イメージを保存して共有する場所 | App Store |
イメージとコンテナ
- 1 つのイメージから複数のコンテナを同時に起動でき、それぞれは互いに影響しません。
- コンテナ内で追加、変更したファイルは、コンテナ固有の書き込み可能なレイヤーに書き込まれ、イメージには反映されません。
- コンテナを削除してもイメージは残るため、いつでも新しいコンテナを起動できます。
- コンテナを削除すると書き込み可能なレイヤーも消えるため、データベースなど保存が必要なデータは、別途 Volume に保存します。
イメージはレイヤーを積み重ねてできている
イメージは複数の**レイヤー(layer)**で構成されます。Node.js の Web サイトを例に説明します(上の図の左側)。
- ベースとなるオペレーティングシステムのレイヤー(Debian など)
- Node.js の実行環境のレイヤー
- パッケージをインストールする(
npm install)レイヤー - あなたのコードのレイヤー
異なるイメージ間で同じ下位レイヤーを共有できます。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 コマンドを入力すると、実際には 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日