Docker

イメージとコンテナの基本

8

イメージとコンテナの基本 — Docker Tips

イメージは雛形、コンテナは動かした実体です。取得は pull、起動は run、一覧・停止・削除は ps / stop / rm。以下は Ubuntu イメージでの操作例です。

参考: docker image pull · docker container run · Storage · Get started


目次

  1. イメージとコンテナの違い
  2. イメージを取得する — docker pull
  3. コンテナを起動する — docker run
  4. 起動中のコンテナを確認する — docker ps
  5. 長生きするコンテナと終了するコンテナ
  6. 停止・再開・削除の基本コマンド
  7. イメージを削除する — docker rmi
  8. Ubuntu コンテナで一連の流れを試す
  9. よくある失敗

イメージとコンテナの違い

用語 実体 例え
イメージ(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 images
REPOSITORY   TAG      IMAGE ID       CREATED        SIZEubuntu       24.04    3f25ecba9da5   3 weeks ago    78.1MBhello-world  latest   d2c94e258dcb   14 months ago  13.3kB

bash でも同じコマンドがそのまま使えます。

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 infinity

sleep 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-ubuntu

docker ps は既定で 実行中のコンテナだけ を表示します。停止済みも含めて全部見るには -a を付けます。

docker ps -a

名前でフィルタしたいときは次のようにします。

docker ps --filter name=practice-ubuntu

コンテナ名は docker run --name で指定した名前、または省略時に自動生成されたランダムな名前(形容詞と名前の組み合わせなど)です。同じ名前は同時に 1 つしか使えないため、同名のコンテナを作ろうとすると Conflict. The container name "..." is already in use というエラーになります。


長生きするコンテナと終了するコンテナ

コンテナは「フォアグラウンドで動くプロセスが動いている間だけ生き続ける」という性質を持ちます。プロセスが終了すれば、コンテナも自動的に停止(Exited)します。

コンテナの種類 典型的な起動コマンド 挙動
常駐型 nginxsleep infinitytail -f /dev/null フォアグラウンドプロセスが動き続け、Up の状態を維持
単発実行型 echo hellolscat /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-ubuntu

stop はコンテナ内のプロセスに終了信号(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 prune

Ubuntu コンテナで一連の流れを試す

ここまでのコマンドを、リポジトリの 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.04

bash(WSL / Git Bash)でも手順は同一です。

docker run -d --name my-ubuntu ubuntu:24.04 sleep infinitydocker exec -it my-ubuntu bash

この 6 ステップは、この記事で扱った pullrunpsexecstop / rmrmi の一連の流れそのものです。リポジトリの case01(Dockerfile あり)を使う場合は、docker build -t case01-ubuntu .\case01 で自作イメージを作ってから同じ流れで起動・確認できます。


よくある失敗

症状 原因 対処
docker run 直後にコンテナが Exited になる 常駐するフォアグラウンドプロセスが無い sleep infinity などを末尾に付けて起動する
Conflict. The container name ... is already in use 同名のコンテナが既に存在(停止中でも) docker rm <名前> で削除するか、別名を使う
docker rmYou cannot remove a running container 実行中のコンテナを削除しようとした 先に docker stop、または docker rm -f
docker rmiimage is being used by stopped container 停止中コンテナがそのイメージを参照 該当コンテナを docker rm してから docker rmi
docker execis not running コンテナが停止している docker start <名前> してから exec
docker ps に何も出ない 実行中のコンテナが無い、または全部フィルタで除外 docker ps -a で停止済みも含めて確認
ディスク容量が減っている 使わないイメージ・コンテナ・ボリュームが蓄積 docker system df で確認し、prune 系コマンドで整理

docker system df はイメージ・コンテナ・ボリュームそれぞれの使用容量を要約表示してくれるので、掃除の判断材料として先に実行しておくと安心です。

シェア