はじめに#
Dockerを使った開発・運用では、コマンドを素早く参照できるチートシートがあると作業効率が大幅に向上します。本記事では、Dockerの基本コマンドからイメージ・コンテナ管理、Docker Composeまでを網羅し、すぐに使える形式でまとめました。
各コマンドには実行環境・前提条件・期待される結果を明記しているため、初心者の方でも安心して利用できます。
実行環境#
| 項目 |
バージョン |
| Docker Engine |
27.x 以降 |
| Docker Compose |
v2.x 以降 |
| OS |
Windows / macOS / Linux |
前提条件#
- Docker Desktop または Docker Engine がインストール済みであること
- ターミナル(コマンドプロンプト、PowerShell、bash等)が使用可能であること
- 基本的なコマンドライン操作ができること
まだDockerをインストールしていない場合は、Docker Desktop導入ガイドを参照してください。
Dockerバージョン確認#
作業を始める前に、Dockerが正しくインストールされているか確認します。
| コマンド |
説明 |
期待される結果 |
docker --version |
Dockerのバージョン表示 |
Docker version 27.x.x, build xxxxx |
docker version |
クライアント/サーバー詳細表示 |
Client/Serverのバージョン情報が表示 |
docker info |
Docker環境の詳細情報 |
コンテナ数、イメージ数、ストレージドライバ等 |
docker compose version |
Docker Composeのバージョン |
Docker Compose version v2.x.x |
1
2
3
4
5
6
|
# 実行例
$ docker --version
Docker version 27.4.0, build bde2b89
$ docker compose version
Docker Compose version v2.32.0
|
コンテナ操作コマンド#
コンテナの作成と起動#
| コマンド |
説明 |
期待される結果 |
docker run <image> |
イメージからコンテナを作成・起動 |
コンテナが起動し、フォアグラウンドで実行 |
docker run -d <image> |
バックグラウンドで起動 |
コンテナIDが表示され、バックグラウンドで実行 |
docker run -it <image> /bin/bash |
対話モードで起動 |
コンテナ内のシェルに接続 |
docker run --name <name> <image> |
名前を指定して起動 |
指定した名前でコンテナが作成 |
docker run -p 8080:80 <image> |
ポートマッピングして起動 |
ホストの8080番がコンテナの80番に転送 |
docker run -v /host:/container <image> |
ボリュームマウントして起動 |
ホストのディレクトリがコンテナにマウント |
docker run --rm <image> |
終了時に自動削除 |
コンテナ停止後に自動的に削除 |
docker run -e KEY=VALUE <image> |
環境変数を設定して起動 |
環境変数が設定された状態で起動 |
docker create <image> |
コンテナを作成(起動しない) |
コンテナIDが表示、Createdステータス |
1
2
3
4
5
|
# Nginxをバックグラウンドで起動し、ポート8080でアクセス可能にする
$ docker run -d --name my-nginx -p 8080:80 nginx:latest
a1b2c3d4e5f6...
# 期待される結果: http://localhost:8080 でNginxのウェルカムページが表示
|
コンテナのライフサイクル管理#
| コマンド |
説明 |
期待される結果 |
docker start <container> |
停止中のコンテナを起動 |
コンテナがRunningステータスに遷移 |
docker stop <container> |
コンテナを停止(SIGTERM) |
コンテナがExitedステータスに遷移 |
docker restart <container> |
コンテナを再起動 |
コンテナが再起動しRunningステータス |
docker pause <container> |
コンテナを一時停止 |
コンテナがPausedステータスに遷移 |
docker unpause <container> |
一時停止を解除 |
コンテナがRunningステータスに復帰 |
docker kill <container> |
コンテナを強制停止(SIGKILL) |
即座にコンテナが停止 |
docker rm <container> |
コンテナを削除 |
コンテナが削除される |
docker rm -f <container> |
実行中でも強制削除 |
停止+削除が実行される |
1
2
3
4
5
6
7
8
|
# コンテナの停止と削除
$ docker stop my-nginx
my-nginx
$ docker rm my-nginx
my-nginx
# 期待される結果: docker ps -a で該当コンテナが表示されなくなる
|
コンテナの状態確認#
| コマンド |
説明 |
期待される結果 |
docker ps |
実行中のコンテナ一覧 |
Runningステータスのコンテナを表示 |
docker ps -a |
全コンテナ一覧(停止含む) |
すべてのコンテナを表示 |
docker ps -q |
コンテナIDのみ表示 |
短縮IDの一覧が表示 |
docker ps --format "{{.Names}}" |
名前のみ表示 |
コンテナ名の一覧が表示 |
docker logs <container> |
コンテナのログ表示 |
標準出力/エラーのログが表示 |
docker logs -f <container> |
ログをリアルタイム表示 |
新しいログが継続的に表示 |
docker logs --tail 100 <container> |
直近100行のみ表示 |
最新100行のログが表示 |
docker inspect <container> |
コンテナの詳細情報(JSON) |
ネットワーク、マウント等の詳細 |
docker stats |
リソース使用状況をリアルタイム表示 |
CPU、メモリ、ネットワーク使用量 |
docker top <container> |
コンテナ内のプロセス一覧 |
実行中のプロセス情報が表示 |
1
2
3
4
5
6
7
8
9
|
# 実行中のコンテナを確認
$ docker ps
CONTAINER ID IMAGE COMMAND STATUS PORTS NAMES
a1b2c3d4e5f6 nginx:latest "/docker-entrypoint.…" Up 5 minutes 0.0.0.0:8080->80/tcp my-nginx
# リソース使用状況を確認
$ docker stats --no-stream
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O
a1b2c3d4e5f6 my-nginx 0.00% 3.5MiB / 7.77GiB 0.04% 1.45kB / 0B 0B / 0B
|
コンテナへの接続と操作#
| コマンド |
説明 |
期待される結果 |
docker exec -it <container> /bin/bash |
コンテナ内でbashを実行 |
コンテナ内のシェルに接続 |
docker exec -it <container> /bin/sh |
shを使用(Alpine等) |
コンテナ内のシェルに接続 |
docker exec <container> <command> |
コマンドを1回実行 |
コマンド結果が表示 |
docker attach <container> |
コンテナのメインプロセスに接続 |
コンテナの標準入出力に接続 |
docker cp <src> <container>:<dest> |
ホストからコンテナへコピー |
ファイルがコンテナ内にコピー |
docker cp <container>:<src> <dest> |
コンテナからホストへコピー |
ファイルがホストにコピー |
1
2
3
4
5
6
7
8
9
|
# コンテナ内でシェルを起動
$ docker exec -it my-nginx /bin/bash
root@a1b2c3d4e5f6:/#
# 期待される結果: プロンプトがコンテナ内に切り替わる
# ファイルをコンテナにコピー
$ docker cp ./index.html my-nginx:/usr/share/nginx/html/
Successfully copied 2.05kB to my-nginx:/usr/share/nginx/html/
|
イメージ操作コマンド#
イメージの取得と一覧#
| コマンド |
説明 |
期待される結果 |
docker pull <image> |
Docker Hubからイメージ取得 |
イメージがローカルにダウンロード |
docker pull <image>:<tag> |
タグ指定でイメージ取得 |
指定バージョンがダウンロード |
docker images |
ローカルイメージ一覧 |
イメージ名、タグ、サイズ等を表示 |
docker images -q |
イメージIDのみ表示 |
短縮IDの一覧が表示 |
docker image ls |
イメージ一覧(新構文) |
docker imagesと同等 |
docker search <keyword> |
Docker Hubを検索 |
キーワードに一致するイメージ一覧 |
1
2
3
4
5
6
7
8
9
10
11
|
# Python公式イメージを取得
$ docker pull python:3.12-slim
3.12-slim: Pulling from library/python
...
Status: Downloaded newer image for python:3.12-slim
# ローカルのイメージを確認
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
python 3.12-slim abc123def456 2 weeks ago 125MB
nginx latest xyz789uvw012 3 weeks ago 188MB
|
イメージのビルドと管理#
| コマンド |
説明 |
期待される結果 |
docker build -t <name>:<tag> . |
Dockerfileからビルド |
イメージが作成される |
docker build -f <file> . |
Dockerfile指定でビルド |
指定ファイルでビルド |
docker build --no-cache . |
キャッシュを使わずビルド |
全レイヤーを再ビルド |
docker tag <image> <new-name> |
イメージにタグ付け |
新しいタグが追加 |
docker push <image> |
レジストリにプッシュ |
イメージがアップロード |
docker save -o <file>.tar <image> |
イメージをtarファイルに保存 |
tarファイルが作成 |
docker load -i <file>.tar |
tarファイルからイメージ復元 |
イメージがロード |
docker rmi <image> |
イメージを削除 |
イメージが削除される |
docker rmi -f <image> |
強制削除 |
使用中でも削除 |
docker image prune |
未使用イメージを削除 |
danglingイメージが削除 |
docker image prune -a |
全未使用イメージを削除 |
コンテナ未使用のイメージを削除 |
1
2
3
4
5
6
7
8
|
# Dockerfileからイメージをビルド
$ docker build -t my-app:1.0.0 .
[+] Building 15.2s (10/10) FINISHED
=> [internal] load build definition from Dockerfile
...
=> => naming to docker.io/library/my-app:1.0.0
# 期待される結果: docker images で my-app:1.0.0 が表示される
|
イメージの詳細確認#
| コマンド |
説明 |
期待される結果 |
docker inspect <image> |
イメージの詳細情報 |
レイヤー、環境変数等のJSON |
docker history <image> |
イメージのレイヤー履歴 |
各レイヤーのコマンドとサイズ |
docker image inspect <image> |
イメージ詳細(新構文) |
docker inspectと同等 |
1
2
3
4
5
6
7
|
# イメージのレイヤー履歴を確認
$ docker history nginx:latest
IMAGE CREATED CREATED BY SIZE
a1b2c3d4e5f6 2 weeks ago CMD ["nginx" "-g" "daemon off;"] 0B
<missing> 2 weeks ago EXPOSE map[80/tcp:{}] 0B
<missing> 2 weeks ago STOPSIGNAL SIGQUIT 0B
...
|
ボリュームとネットワーク#
ボリューム管理#
| コマンド |
説明 |
期待される結果 |
docker volume create <name> |
ボリュームを作成 |
名前付きボリュームが作成 |
docker volume ls |
ボリューム一覧 |
全ボリュームを表示 |
docker volume inspect <name> |
ボリューム詳細 |
マウントポイント等を表示 |
docker volume rm <name> |
ボリュームを削除 |
ボリュームが削除される |
docker volume prune |
未使用ボリュームを削除 |
未使用のボリュームを一括削除 |
1
2
3
4
5
6
7
8
|
# ボリュームを作成して使用
$ docker volume create my-data
my-data
$ docker run -d -v my-data:/app/data nginx
a1b2c3d4e5f6...
# 期待される結果: /app/data のデータがボリュームに永続化される
|
ネットワーク管理#
| コマンド |
説明 |
期待される結果 |
docker network create <name> |
ネットワークを作成 |
ブリッジネットワークが作成 |
docker network create --driver bridge <name> |
ドライバ指定で作成 |
指定ドライバのネットワーク作成 |
docker network ls |
ネットワーク一覧 |
全ネットワークを表示 |
docker network inspect <name> |
ネットワーク詳細 |
サブネット、接続コンテナ等 |
docker network connect <network> <container> |
コンテナをネットワークに接続 |
コンテナがネットワークに参加 |
docker network disconnect <network> <container> |
ネットワークから切断 |
コンテナがネットワークから離脱 |
docker network rm <name> |
ネットワークを削除 |
ネットワークが削除される |
docker network prune |
未使用ネットワークを削除 |
未使用のネットワークを一括削除 |
1
2
3
4
5
6
7
8
|
# カスタムネットワークを作成してコンテナを接続
$ docker network create my-network
abc123def456...
$ docker run -d --name web --network my-network nginx
$ docker run -d --name db --network my-network postgres
# 期待される結果: webコンテナから db という名前で接続可能
|
システム管理コマンド#
クリーンアップ#
| コマンド |
説明 |
期待される結果 |
docker system prune |
未使用リソースを一括削除 |
コンテナ、ネットワーク、イメージを削除 |
docker system prune -a |
全未使用リソースを削除 |
より積極的に削除 |
docker system prune --volumes |
ボリュームも含めて削除 |
ボリュームも一括削除 |
docker system df |
ディスク使用量を表示 |
イメージ、コンテナ、ボリュームの容量 |
docker container prune |
停止コンテナを一括削除 |
Exitedコンテナを削除 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# ディスク使用量を確認
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 10 3 2.5GB 1.8GB (72%)
Containers 5 2 150MB 100MB (66%)
Local Volumes 3 1 500MB 400MB (80%)
Build Cache 20 0 800MB 800MB
# 未使用リソースを削除
$ docker system prune -a
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all images without at least one container associated to them
- all build cache
Are you sure you want to continue? [y/N] y
Deleted Containers: ...
Total reclaimed space: 2.1GB
|
Docker Composeコマンド#
基本操作#
| コマンド |
説明 |
期待される結果 |
docker compose up |
サービスを起動 |
compose.yamlに基づいてコンテナ起動 |
docker compose up -d |
バックグラウンドで起動 |
デタッチモードで起動 |
docker compose up --build |
ビルドしてから起動 |
イメージを再ビルドして起動 |
docker compose down |
サービスを停止・削除 |
コンテナ、ネットワークを削除 |
docker compose down -v |
ボリュームも含めて削除 |
データも含めて完全削除 |
docker compose down --rmi all |
イメージも含めて削除 |
関連イメージも削除 |
docker compose stop |
サービスを停止(削除しない) |
コンテナを停止のみ |
docker compose start |
停止中のサービスを起動 |
停止したコンテナを再起動 |
docker compose restart |
サービスを再起動 |
全サービスを再起動 |
1
2
3
4
5
6
7
8
|
# サービスをバックグラウンドで起動
$ docker compose up -d
[+] Running 3/3
✔ Network my-app_default Created
✔ Container my-app-db-1 Started
✔ Container my-app-web-1 Started
# 期待される結果: 定義した全サービスが起動
|
サービスの確認と操作#
| コマンド |
説明 |
期待される結果 |
docker compose ps |
サービス一覧 |
実行中のサービスを表示 |
docker compose ps -a |
全サービス(停止含む) |
すべてのサービスを表示 |
docker compose logs |
全サービスのログ |
全コンテナのログを表示 |
docker compose logs -f |
ログをリアルタイム表示 |
継続的にログを表示 |
docker compose logs <service> |
特定サービスのログ |
指定サービスのログのみ |
docker compose exec <service> <command> |
サービス内でコマンド実行 |
コマンド結果が表示 |
docker compose run <service> <command> |
新コンテナでコマンド実行 |
一時コンテナで実行 |
docker compose top |
各サービスのプロセス |
全サービスのプロセス一覧 |
1
2
3
4
5
6
7
8
|
# webサービスのシェルに接続
$ docker compose exec web /bin/bash
root@abc123:/app#
# 特定サービスのログを確認
$ docker compose logs -f web
web-1 | 2026/01/01 10:00:00 [notice] 1#1: nginx/1.27.0
web-1 | 2026/01/01 10:00:00 [notice] 1#1: start worker processes
|
ビルドと設定確認#
| コマンド |
説明 |
期待される結果 |
docker compose build |
サービスをビルド |
Dockerfileからイメージ作成 |
docker compose build --no-cache |
キャッシュなしでビルド |
全レイヤーを再ビルド |
docker compose build <service> |
特定サービスをビルド |
指定サービスのみビルド |
docker compose pull |
イメージをプル |
最新イメージを取得 |
docker compose config |
設定ファイルを検証・表示 |
最終的な設定内容を表示 |
docker compose config --services |
サービス名一覧 |
定義済みサービス名を表示 |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 設定ファイルを検証
$ docker compose config
name: my-app
services:
web:
build:
context: .
ports:
- "8080:80"
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: secret
|
compose.yamlの基本構文#
Docker Composeで使用するcompose.yamlの基本構文をまとめます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# compose.yaml
services:
# Webアプリケーションサービス
web:
build: . # Dockerfileからビルド
# image: nginx:latest # または既存イメージを使用
ports:
- "8080:80" # ポートマッピング
volumes:
- ./src:/app # バインドマウント
- app-data:/app/data # 名前付きボリューム
environment:
- NODE_ENV=development # 環境変数
env_file:
- .env # 環境変数ファイル
depends_on:
- db # 依存サービス
networks:
- app-network # カスタムネットワーク
restart: unless-stopped # 再起動ポリシー
# データベースサービス
db:
image: postgres:16
volumes:
- db-data:/var/lib/postgresql/data
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
healthcheck: # ヘルスチェック
test: ["CMD-SHELL", "pg_isready -U user -d mydb"]
interval: 10s
timeout: 5s
retries: 5
networks:
- app-network
# ボリューム定義
volumes:
app-data:
db-data:
# ネットワーク定義
networks:
app-network:
driver: bridge
|
期待される結果#
上記のcompose.yamlでdocker compose up -dを実行すると、以下の状態になります。
webサービスがビルドされ、ポート8080でアクセス可能
dbサービスがPostgreSQL 16で起動
- 両サービスが
app-networkで接続され、webからdbという名前でDBにアクセス可能
- データは
db-dataボリュームに永続化
便利なワンライナー集#
実務でよく使う便利なコマンドをまとめます。
コンテナ操作の一括処理#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 全コンテナを停止
$ docker stop $(docker ps -q)
# 全コンテナを削除
$ docker rm $(docker ps -aq)
# 停止中のコンテナを一括削除
$ docker container prune -f
# 全イメージを削除(注意)
$ docker rmi $(docker images -q)
# 未使用リソースを完全クリーンアップ
$ docker system prune -a --volumes -f
|
情報取得#
1
2
3
4
5
6
7
8
9
10
11
|
# コンテナのIPアドレスを取得
$ docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container>
# コンテナのログをファイルに保存
$ docker logs <container> > container.log 2>&1
# イメージのサイズ順にソート
$ docker images --format "{{.Repository}}:{{.Tag}} {{.Size}}" | sort -k2 -h
# 実行中コンテナの環境変数を確認
$ docker exec <container> env
|
トラブルシューティング#
1
2
3
4
5
6
7
8
9
10
11
|
# コンテナが起動しない場合のログ確認
$ docker logs --tail 50 <container>
# コンテナ内のファイルシステムを確認
$ docker exec -it <container> ls -la /app
# コンテナのリソース使用状況を確認
$ docker stats --no-stream
# ネットワーク接続の確認
$ docker exec <container> ping -c 3 <other-container>
|
まとめ#
本記事では、Dockerの基本コマンドからDocker Composeまで、実務で必要なコマンドを網羅的にまとめました。以下のポイントを押さえておくと、日常的なDocker操作がスムーズになります。
- コンテナ操作:
run, stop, start, rm, execが基本
- イメージ管理:
pull, build, images, rmiで管理
- Docker Compose:
up, down, logs, execで複数コンテナを効率的に管理
- クリーンアップ:
prune系コマンドで不要リソースを定期的に削除
このチートシートをブックマークして、必要なときにすぐ参照できるようにしておくと便利です。
参考リンク#