2.2 Docker主要コマンド完全ガイド|pull・run・exec・logsの使い方を実例で解説

【第2章】イメージとコンテナの基本操作

Dockerを日常的に使いこなすには、約10〜15個のコマンドを理解すれば十分です。この記事では頻繁に使うコマンドを「イメージ操作」と「コンテナ操作」の2グループに分けて、オプションの意味から実践的な使い方まで体系的に解説します。

前の記事(2-1)でイメージ/コンテナの概念を理解していることを前提にしています。


目次

  1. コマンド全体マップ
  2. イメージ操作コマンド
  3. コンテナ操作コマンド
  4. シミュレータで練習する
  5. 実践ワンライナー集
  6. まとめ

1. コマンド全体マップ

Dockerのコマンドは「イメージを操作するもの」と「コンテナを操作するもの」に大別できます。

レジストリ(Docker Hub 等)
↑ docker push   ↓ docker pull
ローカルイメージ
docker images 一覧確認
docker rmi   削除

↓ docker run
コンテナ(created / running)
docker ps
docker start
docker stop
docker restart
docker logs
docker exec
docker rm

💡 コマンドの構造
Docker CLI のコマンドはすべて docker <サブコマンド> [オプション] [引数] という形式です。docker --help でサブコマンド一覧、docker run --help で各コマンドの詳細なオプションが確認できます。

2. イメージ操作コマンド

docker pull ── レジストリからイメージを取得

docker pull [オプション] イメージ名[:タグ|@ダイジェスト]

レジストリ(デフォルトは Docker Hub)からイメージをダウンロードします。docker run で存在しないイメージを指定した場合は自動的に pull されますが、明示的に実行することでダウンロードのみを行えます。

# タグを指定(推奨)
docker pull ubuntu:22.04

# タグ省略時は latest が使われる
docker pull nginx

# SHA256 ダイジェストで固定(最も安全)
docker pull ubuntu@sha256:b492494d8e0113c4ad3fe4528a4b5ff89faa5331f7d52c5c138196f69ce176a6

# 別のレジストリから取得
docker pull ghcr.io/myorg/myapp:v1.2.3

# すべてのタグを一度に取得(注意: ディスクを大量に消費)
docker pull --all-tags nginx
オプション 説明
-a, --all-tags リポジトリの全タグを取得
--platform 対象アーキテクチャを指定(例: linux/arm64
-q, --quiet 進捗を表示せず、イメージIDのみ出力

docker push ── レジストリへイメージを送信

docker push [オプション] イメージ名[:タグ]

ローカルのイメージをレジストリへアップロードします。事前に docker login でログインが必要です。

# Docker Hub へプッシュする手順
docker login                                # ログイン
docker tag myapp:latest myuser/myapp:v1.0  # タグ付け(ユーザー名/リポジトリ名)
docker push myuser/myapp:v1.0              # アップロード

# GitHub Container Registry へプッシュ
docker login ghcr.io -u USERNAME --password-stdin < token.txt
docker tag myapp:latest ghcr.io/myorg/myapp:v1.0
docker push ghcr.io/myorg/myapp:v1.0
💡 push 前に必ずタグ付けを
Docker Hub へプッシュするには ユーザー名/リポジトリ名:タグ の形式でタグを付ける必要があります。docker tag 元イメージ 新しいタグ でタグを追加できます(元のイメージは削除されません)。

docker images ── ローカルイメージの一覧

docker images [オプション] [リポジトリ[:タグ]]

ローカルに保存されているイメージの一覧を表示します。

# 全イメージを表示
docker images

# 出力例:
# REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
# nginx        latest    a72860cb95fd   2 weeks ago    192MB
# ubuntu       22.04     c6b84b685f35   4 weeks ago    77.8MB
# alpine       3.19      05455a08881e   6 weeks ago    7.83MB

# 特定リポジトリだけ表示
docker images nginx

# ダイジェストも表示
docker images --digests

# イメージIDのみ表示(スクリプト処理に便利)
docker images -q

# 中間イメージも含めて全表示(通常は非表示)
docker images -a

# フィルタリング(ラベルで絞り込み)
docker images --filter "label=maintainer=myteam"

# --format で出力形式をカスタマイズ(Go template)
docker images --format "{{.Repository}}:{{.Tag}}\t{{.Size}}"
オプション 説明
-a, --all 中間レイヤーイメージも含めて表示
--digests SHA256ダイジェストを表示
-f, --filter フィルタ条件(dangling=true 等)
--format Go テンプレートで出力形式を指定
-q, --quiet イメージIDのみ表示

docker rmi ── ローカルイメージを削除

docker rmi [オプション] イメージ名[:タグ|ID] [...]
# タグ名で削除
docker rmi nginx:latest

# 複数を一度に削除
docker rmi ubuntu:22.04 alpine:3.19

# イメージIDで削除(先頭数文字で可)
docker rmi a72860cb

# 使われていない全イメージを一括削除(dangling images)
docker image prune

# タグなし・未使用イメージをすべて削除(より広範囲)
docker image prune -a

# 強制削除(コンテナが使用中でも削除)
docker rmi -f nginx:latest
⚠️ コンテナが存在すると削除できない
停止中でも、そのイメージから作ったコンテナが残っている場合は docker rmi がエラーになります。先に docker rm <コンテナID> でコンテナを削除してから実行してください。-f は強制削除できますが、タグのみ削除されイメージ本体(レイヤー)はコンテナが消えるまで残ります。

3. コンテナ操作コマンド

docker run ── コンテナを作成して起動

docker run [オプション] イメージ名[:タグ] [コマンド] [引数...]

docker run は内部的に docker create(コンテナ作成)と docker start(起動)を一度に行う最も使用頻度の高いコマンドです。

よく使うオプション

オプション 意味 使用例
-d, --detach バックグラウンドで起動(デタッチモード) docker run -d nginx
-it インタラクティブ + 擬似TTY(シェル操作に必須) docker run -it ubuntu bash
--name コンテナに名前を付ける docker run --name web nginx
-p HOST:CTR ポートマッピング(ホスト:コンテナ) docker run -p 8080:80 nginx
-v HOST:CTR ボリューム/バインドマウント docker run -v /data:/app/data myapp
-e KEY=VALUE 環境変数を設定 docker run -e MYSQL_ROOT_PASSWORD=pass mysql
--rm 終了時にコンテナを自動削除 docker run --rm alpine echo "hello"
--network 接続するネットワークを指定 docker run --network mynet nginx
--memory メモリ上限(例: 256m, 1g) docker run --memory=512m myapp
--cpus CPU使用量上限(コア数) docker run --cpus=0.5 myapp
--restart 再起動ポリシー(no/always/unless-stopped/on-failure) docker run --restart=always nginx
-u, --user 実行ユーザーを指定 docker run -u 1000:1000 myapp
--env-file 環境変数をファイルから読み込む docker run --env-file .env myapp

実践的な使用例

# ① バックグラウンドでnginxを起動してポートを公開
docker run -d --name web -p 8080:80 nginx

# ② ubuntuに入ってシェル操作(終了するとコンテナ停止)
docker run -it --name myubuntu ubuntu:22.04 bash

# ③ 使い捨てコンテナでコマンド実行(--rm で自動削除)
docker run --rm alpine echo "Hello from Alpine"

# ④ 環境変数を渡してMySQLを起動
docker run -d --name db \
  -e MYSQL_ROOT_PASSWORD=secret \
  -e MYSQL_DATABASE=mydb \
  -p 3306:3306 \
  mysql:8.0

# ⑤ カレントディレクトリをマウントしてビルド(--rm で後始末)
docker run --rm -v "$(pwd)":/workspace -w /workspace node:20 npm install

# ⑥ リソース制限付きで起動
docker run -d --name limited \
  --memory=256m \
  --cpus=0.5 \
  nginx
💡 -i-t の違い
-i(–interactive)は標準入力を開いたまま保持します。-t(–tty)は擬似TTYを割り当て、カーソル移動や色表示などターミナルの機能を有効にします。bash などの対話シェルには両方が必要なので -it として組み合わせます。

docker ps ── コンテナ一覧の確認

docker ps [オプション]
# 実行中のコンテナのみ表示
docker ps

# 出力例:
# CONTAINER ID   IMAGE     COMMAND                  CREATED        STATUS        PORTS                  NAMES
# a1b2c3d4e5f6   nginx     "/docker-entrypoint.…"   2 hours ago    Up 2 hours    0.0.0.0:8080->80/tcp   web

# 停止中を含む全コンテナを表示
docker ps -a

# コンテナIDのみ表示(スクリプト処理に便利)
docker ps -q
docker ps -aq  # 停止中含む全IDを表示

# 最後に作成したN個を表示
docker ps -n 5

# フォーマット指定
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}"

# ステータスでフィルタ
docker ps --filter "status=exited"
docker ps --filter "name=web"          # 名前で絞り込み
docker ps --filter "ancestor=nginx"    # 元イメージで絞り込み
表示列 内容
CONTAINER ID コンテナの短縮ID(12文字)
IMAGE 元になったイメージ名
COMMAND 実行中のコマンド(省略あり)
CREATED 作成からの経過時間
STATUS Up X hours / Exited (0) X minutes ago
PORTS 公開ポートのマッピング
NAMES コンテナ名(未指定時はランダム生成)

docker start / stop / restart ── コンテナの状態を変える

# 停止中のコンテナを再起動
docker start コンテナ名orID

# 複数を同時に起動
docker start web db cache

# 実行中のコンテナを停止(SIGTERM → 10秒後に SIGKILL)
docker stop コンテナ名orID

# タイムアウトを変更(デフォルト10秒)
docker stop --time=30 web  # 30秒待ってから強制停止

# 即座に強制停止(SIGKILL)
docker kill コンテナ名orID

# 停止 → 起動(設定変更なし)
docker restart web

# 停止コンテナへ標準入力を接続して起動(-ai オプション)
docker start -ai myubuntu
💡 stopkill の違い
docker stop はコンテナのメインプロセスに SIGTERM(終了要求)を送り、グレースフルシャットダウンの猶予を与えます。猶予時間(デフォルト10秒)内に終了しなければ SIGKILL で強制終了します。docker kill は即座に SIGKILL(またはオプション指定のシグナル)を送ります。
データベースなど正常な終了処理が必要なアプリケーションには stop を使いましょう。

docker rm ── コンテナを削除

docker rm [オプション] コンテナ名orID [...]
# 停止中のコンテナを削除
docker rm web

# 実行中のコンテナを強制削除(docker stop + docker rm の組み合わせ)
docker rm -f web

# 停止時にコンテナを自動削除(run 時に指定)
docker run --rm alpine echo "hello"

# 停止中の全コンテナを一括削除(ID を渡す)
docker rm $(docker ps -aq -f status=exited)

# より安全な一括削除コマンド(Docker 1.13以降)
docker container prune

# 削除後もボリュームを削除したい場合
docker rm -v mycontainer
⚠️ 実行中コンテナは削除できない
docker rm は停止(exited)状態のコンテナにしか使えません。実行中コンテナを削除するには docker rm -f(強制)か、先に docker stop してから docker rm してください。データの観点からは後者が安全です。

docker logs ── コンテナの標準出力を確認

docker logs [オプション] コンテナ名orID

コンテナのプロセスが標準出力(stdout)・標準エラー出力(stderr)に書き出した内容を取得します。Dockerは各コンテナのログを自動的に収集・保存しており、停止後も確認できます。

# 全ログを表示
docker logs web

# リアルタイムでログを追跡(Ctrl+C で終了)
docker logs -f web

# 最後の50行のみ表示
docker logs --tail=50 web

# タイムスタンプを付けて表示
docker logs -t web

# 時間指定(RFC3339 または相対時間)
docker logs --since="2024-01-01T00:00:00Z" web
docker logs --since=1h web     # 過去1時間
docker logs --until=30m web    # 30分前まで

# よく使う組み合わせ(最近50行をタイムスタンプ付きで追跡)
docker logs -ft --tail=50 web
オプション 説明
-f, --follow ログをリアルタイムで追跡
--tail N 末尾 N 行のみ表示(デフォルトは all)
-t, --timestamps 各行にタイムスタンプを付加
--since 指定時刻以降のログを表示
--until 指定時刻以前のログを表示
💡 ログが表示されない場合
アプリケーションがファイルにログを書いている場合(例: /var/log/nginx/access.log)は docker logs では見えません。dockerログは標準出力・標準エラー出力のみを対象とします。nginx公式イメージは /dev/stdout へのシンボリックリンクでこれを解決しています。

docker exec ── 実行中コンテナ内でコマンドを実行

docker exec [オプション] コンテナ名orID コマンド [引数...]

実行中のコンテナ内に新しいプロセスを追加して実行します。デバッグ・設定確認・ファイル操作などに使います。

# 対話シェルに接続(デバッグの定番)
docker exec -it web bash
docker exec -it myalpine sh    # alpine は bash がないので sh

# 単一コマンドを実行して結果を得る
docker exec web nginx -v                    # nginxのバージョン確認
docker exec db mysql -uroot -p -e "SHOW DATABASES;"  # MySQLにクエリ

# 環境変数を追加して実行
docker exec -e DEBUG=1 web node debug.js

# バックグラウンドで実行(-d オプション)
docker exec -d web touch /tmp/flag

# 特定ユーザーとして実行
docker exec -u www-data web whoami

# 作業ディレクトリを指定
docker exec -it -w /var/log web bash
オプション 説明
-it インタラクティブ + 擬似TTY(シェル接続に必須)
-d, --detach バックグラウンドで実行(出力なし)
-e KEY=VALUE 環境変数を追加
-u, --user 実行ユーザーを指定
-w, --workdir 作業ディレクトリを指定
⚠️ exec は実行中コンテナにしか使えない
docker execrunning 状態のコンテナにのみ有効です。停止中のコンテナにアクセスしたい場合は docker start で起動してから実行してください。また、exec で開いたシェルを exit しても、コンテナ自体は停止しません(元のプロセスが生き続けます)。

4. シミュレータで練習する

ここまで学んだコマンドをブラウザ上で試してみましょう。docker rundocker psdocker stopdocker rmdocker logs など、主要コマンドをすべて実行できます。

💡 試してみよう
docker run -d -p 8080:80 nginx でバックグラウンド起動
docker ps で実行確認 → docker ps -a との違いを見る
docker logs <ID> でログを確認
docker stop <ID>docker psdocker ps -a の変化を観察
docker rm <ID> で削除 → docker images でイメージが残っていることを確認

5. 実践ワンライナー集

現場でよく使うコマンドのパターンをまとめます。

# ── 一括操作 ──────────────────────────────────────────

# 全コンテナを停止
docker stop $(docker ps -q)

# 全停止コンテナを削除
docker container prune -f

# 未使用イメージを削除(タグなし)
docker image prune -f

# 未使用イメージ・コンテナ・ネットワーク・キャッシュを一括削除
docker system prune -f

# ディスク使用量を確認
docker system df

# ── 情報確認 ──────────────────────────────────────────

# コンテナのIPアドレスを取得
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web

# コンテナの環境変数を確認
docker exec web env

# コンテナ内のプロセス一覧
docker top web

# コンテナのリソース使用量をリアルタイム表示
docker stats

# ── ファイル操作 ──────────────────────────────────────

# ホスト → コンテナへファイルをコピー
docker cp ./config.json web:/app/config.json

# コンテナ → ホストへコピー
docker cp web:/var/log/nginx/access.log ./access.log

# コンテナ内のファイル変更差分を確認
docker diff web

6. まとめ

イメージ操作コマンド

コマンド 用途 よく使うオプション
docker pull レジストリからイメージを取得 --platform
docker push レジストリへイメージを送信
docker images ローカルイメージの一覧 -a, -q, --format
docker rmi ローカルイメージを削除 -f
docker tag イメージに別のタグを付ける
docker image prune 未使用イメージを一括削除 -a, -f

コンテナ操作コマンド

コマンド 用途 よく使うオプション
docker run イメージからコンテナを作成・起動 -d, -it, --name, -p, -v, -e, --rm
docker ps コンテナ一覧(実行中) -a, -q, --format, --filter
docker start 停止中コンテナを起動 -ai
docker stop コンテナを停止(SIGTERM) --time
docker restart コンテナを再起動 --time
docker kill コンテナを即座に強制停止 -s(シグナル指定)
docker rm 停止コンテナを削除 -f, -v
docker logs 標準出力のログを確認 -f, --tail, -t, --since
docker exec 実行中コンテナ内でコマンド実行 -it, -e, -u, -w
docker cp ホスト↔コンテナ間でファイルをコピー
docker stats リソース使用量をリアルタイム表示 --no-stream
docker top コンテナ内のプロセス一覧
docker inspect 詳細メタデータをJSON表示 -f(Goテンプレート)
✅ 次のステップ
次の記事「2-3. コンテナのライフサイクル」では、created → running → paused → exited → dead の状態遷移とそれぞれのコマンドの関係を図解します。
2-4. インタラクティブモード(-it)」では docker exec -it でコンテナに入って操作する方法を詳しく解説します。

参考リンク

Dockerの基礎を動画で体系的に学びませんか?

実務で使う基礎だけを3時間に凝縮。環境構築から丁寧に解説しています。

Udemy Docker入門講座 クーポン割引で講座を見る →

コメント

タイトルとURLをコピーしました