Dockerを日常的に使いこなすには、約10〜15個のコマンドを理解すれば十分です。この記事では頻繁に使うコマンドを「イメージ操作」と「コンテナ操作」の2グループに分けて、オプションの意味から実践的な使い方まで体系的に解説します。
前の記事(2-1)でイメージ/コンテナの概念を理解していることを前提にしています。
目次
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 start
docker stop
docker restart
docker logs
docker exec
docker rm
💡 コマンドの構造
Docker CLI のコマンドはすべて
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 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
💡
データベースなど正常な終了処理が必要なアプリケーションには
stop と kill の違い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 exec は running 状態のコンテナにのみ有効です。停止中のコンテナにアクセスしたい場合は docker start で起動してから実行してください。また、exec で開いたシェルを exit しても、コンテナ自体は停止しません(元のプロセスが生き続けます)。
4. シミュレータで練習する
ここまで学んだコマンドをブラウザ上で試してみましょう。docker run・docker ps・docker stop・docker rm・docker logs など、主要コマンドをすべて実行できます。
💡 試してみよう
①
②
③
④
⑤
①
docker run -d -p 8080:80 nginx でバックグラウンド起動②
docker ps で実行確認 → docker ps -a との違いを見る③
docker logs <ID> でログを確認④
docker stop <ID> → docker ps → docker 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. コンテナのライフサイクル」では、
「2-4. インタラクティブモード(-it)」では
次の記事「2-3. コンテナのライフサイクル」では、
created → running → paused → exited → dead の状態遷移とそれぞれのコマンドの関係を図解します。「2-4. インタラクティブモード(-it)」では
docker exec -it でコンテナに入って操作する方法を詳しく解説します。
参考リンク
- docker run リファレンス(公式) — 全オプションの詳細説明
- Docker CLI リファレンス(公式) — 全コマンドのリファレンス
- View container logs(公式) — ロギングドライバの詳細(第9章で解説)
- docker system prune(公式) — 未使用リソースの一括削除



コメント