イメージとコンテナの基本 — Docker Tips
イメージは雛形、コンテナは動かした実体です。取得は pull、起動は run、一覧・停止・削除は ps / stop / rm。以下は Ubuntu イメージでの操作例です。
参考: docker image pull · docker container run · Storage · Get started
目次
- イメージとコンテナの違い
- イメージを取得する — docker pull
- コンテナを起動する — docker run
- 起動中のコンテナを確認する — docker ps
- 長生きするコンテナと終了するコンテナ
- 停止・再開・削除の基本コマンド
- イメージを削除する — docker rmi
- Ubuntu コンテナで一連の流れを試す
- よくある失敗
イメージとコンテナの違い
| 用語 | 実体 | 例え |
|---|---|---|
| イメージ(Image) | ファイルシステムと実行設定を固めた読み取り専用の雛形 | プログラムの実行ファイル、クラス定義 |
| コンテナ(Container) | イメージから作られ、実際に動く(または動いた)プロセス | 実行中のプロセス、インスタンス |
同じイメージから、コンテナは何個でも作れます。コンテナ側での変更(ファイル作成など)はそのコンテナだけのもので、元のイメージには影響しません。コンテナを削除してもイメージは残ります。一方、通常の docker rmi(-f なし)は、そのイメージを参照するコンテナが1つでも残っていると(実行中・停止中を問わず)削除できません。先にコンテナを消してからイメージを消す、という順になります。
イメージ(読み取り専用) │ docker run ▼コンテナA(書き込み可能な層が乗る) │ ▼コンテナB(同じイメージから、別インスタンスとして生成)イメージには通常 名前:タグ の形式(例: ubuntu:24.04)でバージョンが付きます。タグを省略すると latest が使われますが、学習用途でも バージョンを明示する 方が、後から見返したときに何を使ったか分かりやすくなります。
イメージを取得する — docker pull
イメージは Docker Hub などのレジストリから取得します。docker run は必要ならイメージを自動で取得しますが、事前に pull だけ試すと動きが分かりやすいです。
docker pull ubuntu:24.04期待する結果: レイヤーのダウンロード進捗が表示され、最後に Status: Downloaded newer image for ubuntu:24.04 のような行が出ます。すでにローカルにある場合は Status: Image is up to date になります。
取得済みのイメージ一覧は次で確認します。
docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEubuntu 24.04 3f25ecba9da5 3 weeks ago 78.1MBhello-world latest d2c94e258dcb 14 months ago 13.3kBbash でも同じコマンドがそのまま使えます。
docker pull ubuntu:24.04docker imagesコンテナを起動する — docker run
docker run はイメージからコンテナを作成し、すぐに開始するコマンドです。よく使うオプションは次のとおりです。
| オプション | 意味 |
|---|---|
-d |
バックグラウンドで実行(デタッチ) |
--name <名前> |
コンテナに名前を付ける(省略するとランダム名) |
-it |
対話的な TTY を割り当てる(シェル操作に必要) |
--rm |
コンテナ終了時に自動削除 |
-p ホスト:コンテナ |
ポートを公開する |
-v / --mount |
ボリューム・バインドマウントを設定する |
バックグラウンドで動かし続ける例:
docker run -d --name practice-ubuntu ubuntu:24.04 sleep infinitysleep infinity は「何もせず起動し続ける」ためのコマンドです。ベースイメージの Ubuntu は通常、フォアグラウンドで動く常駐プロセスを持たないため、こうした「起動を維持するだけのコマンド」を明示的に渡さないと、すぐに終了してしまいます。
対話的にシェルへ入る例:
docker run -it --rm ubuntu:24.04 bash--rm を付けると、exit でシェルを抜けた瞬間にコンテナが削除されます。使い捨てで試したいときに便利です。
起動中のコンテナを確認する — docker ps
docker ps期待する結果の例:
CONTAINER ID IMAGE COMMAND STATUS NAMES9f2a1c3d4e5f ubuntu:24.04 "sleep infinity" Up 2 minutes practice-ubuntudocker ps は既定で 実行中のコンテナだけ を表示します。停止済みも含めて全部見るには -a を付けます。
docker ps -a名前でフィルタしたいときは次のようにします。
docker ps --filter name=practice-ubuntuコンテナ名は docker run --name で指定した名前、または省略時に自動生成されたランダムな名前(形容詞と名前の組み合わせなど)です。同じ名前は同時に 1 つしか使えないため、同名のコンテナを作ろうとすると Conflict. The container name "..." is already in use というエラーになります。
長生きするコンテナと終了するコンテナ
コンテナは「フォアグラウンドで動くプロセスが動いている間だけ生き続ける」という性質を持ちます。プロセスが終了すれば、コンテナも自動的に停止(Exited)します。
| コンテナの種類 | 典型的な起動コマンド | 挙動 |
|---|---|---|
| 常駐型 | nginx、sleep infinity、tail -f /dev/null |
フォアグラウンドプロセスが動き続け、Up の状態を維持 |
| 単発実行型 | echo hello、ls、cat /etc/os-release |
コマンドが終わると同時に Exited (0) になる |
docker run --name once-echo ubuntu:24.04 echo "hello"docker ps -a --filter name=once-echo期待する結果: STATUS 列が Exited (0) ...。これは異常ではなく、「渡したコマンドが正常終了した」という意味です。エラーで終了した場合は Exited (1) のように非ゼロの終了コードになります。
case01 のような学習用コンテナでは、CMD ["sleep", "infinity"] を使うことで、コンテナを 意図的に常駐させ、後から docker exec でシェルに入って作業できるようにしています。
停止・再開・削除の基本コマンド
| やりたいこと | コマンド |
|---|---|
| 停止する | docker stop <名前 or ID> |
| 再開する(停止済みコンテナ) | docker start <名前 or ID> |
| 再起動する | docker restart <名前 or ID> |
| 削除する(停止済みが対象) | docker rm <名前 or ID> |
| 強制的に停止+削除 | docker rm -f <名前 or ID> |
| ログを見る | docker logs <名前 or ID> |
| シェルに入る | docker exec -it <名前 or ID> bash |
docker stop practice-ubuntudocker ps -a --filter name=practice-ubuntudocker start practice-ubuntudocker ps --filter name=practice-ubuntudocker exec -it practice-ubuntu bash# コンテナ内のシェルに入る。exit で戻るdocker stop practice-ubuntudocker rm practice-ubuntustop はコンテナ内のプロセスに終了信号(SIGTERM)を送り、一定時間(既定 10 秒)待ってから強制終了します。rm は 停止済みのコンテナ が対象で、実行中のまま削除しようとすると You cannot remove a running container というエラーになります。実行中でもまとめて削除したい場合は docker rm -f を使います。
イメージを削除する — docker rmi
使わなくなったイメージはディスクを圧迫するので、定期的に消しておくと安心です。
docker imagesdocker rmi ubuntu:24.04イメージを使っているコンテナ(停止中でも)が残っていると、image is being used by stopped container ... のようなエラーで削除できません。先にコンテナ側を docker rm してから docker rmi を実行します。
docker rm practice-ubuntu once-echodocker rmi ubuntu:24.04学習で溜まった未使用イメージ・停止コンテナをまとめて掃除したい場合は、次のコマンドが便利です(実行前に内容を確認してください)。
docker container prunedocker image pruneUbuntu コンテナで一連の流れを試す
ここまでのコマンドを、リポジトリの case01 に近い流れでまとめて実行してみます(case01 を使う場合は Dockerfile からビルドしますが、ここでは公式の ubuntu:24.04 イメージをそのまま使う最短ルートです)。
# 1. イメージを取得docker pull ubuntu:24.04# 2. 常駐コンテナとして起動docker run -d --name my-ubuntu ubuntu:24.04 sleep infinity# 3. 状態を確認docker ps --filter name=my-ubuntu# 4. コンテナに入って調査docker exec -it my-ubuntu bashcat /etc/os-releaseexit# 5. 停止して削除docker stop my-ubuntudocker rm my-ubuntu# 6. 使わなくなったイメージを削除docker rmi ubuntu:24.04bash(WSL / Git Bash)でも手順は同一です。
docker run -d --name my-ubuntu ubuntu:24.04 sleep infinitydocker exec -it my-ubuntu bashこの 6 ステップは、この記事で扱った pull → run → ps → exec → stop / rm → rmi の一連の流れそのものです。リポジトリの case01(Dockerfile あり)を使う場合は、docker build -t case01-ubuntu .\case01 で自作イメージを作ってから同じ流れで起動・確認できます。
よくある失敗
| 症状 | 原因 | 対処 |
|---|---|---|
docker run 直後にコンテナが Exited になる |
常駐するフォアグラウンドプロセスが無い | sleep infinity などを末尾に付けて起動する |
Conflict. The container name ... is already in use |
同名のコンテナが既に存在(停止中でも) | docker rm <名前> で削除するか、別名を使う |
docker rm が You cannot remove a running container |
実行中のコンテナを削除しようとした | 先に docker stop、または docker rm -f |
docker rmi が image is being used by stopped container |
停止中コンテナがそのイメージを参照 | 該当コンテナを docker rm してから docker rmi |
docker exec が is not running |
コンテナが停止している | docker start <名前> してから exec |
docker ps に何も出ない |
実行中のコンテナが無い、または全部フィルタで除外 | docker ps -a で停止済みも含めて確認 |
| ディスク容量が減っている | 使わないイメージ・コンテナ・ボリュームが蓄積 | docker system df で確認し、prune 系コマンドで整理 |
docker system df はイメージ・コンテナ・ボリュームそれぞれの使用容量を要約表示してくれるので、掃除の判断材料として先に実行しておくと安心です。