Docker チートシート:目的別コマンドリファレンス
業務で Docker を使っていると、オプションや構文を都度調べ直すことがよくあります。本記事では、業務でよく使う Docker コマンドを目的別にまとめました。操作したいことからすばやく引けるリファレンスとして活用してみましょう。
docker
Description
イメージ
Docker Hub などのレジストリからイメージを取得します。タグを省略すると latest が使われます。
docker pull nginx:latest
Dockerfile からイメージをビルドします。-t でイメージ名とタグを指定します。キャッシュを使わずにクリーンビルドしたい場合は --no-cache を付けます。
docker build -t my-app:latest .
docker build --no-cache -t my-app:latest .
Dockerfile 内で ARG を使っている場合は --build-arg でビルド時に値を渡せます。
docker build --build-arg NODE_ENV=production -t my-app:latest .
ローカルに保存されているイメージの一覧を表示します。-a を付けると中間イメージも含めてすべて表示されます。
docker images
docker images -a
ビルドしたイメージにタグを付けます。同じイメージに複数のタグを付けておくと、バージョン管理がしやすくなります。
docker tag my-app:latest my-app:1.0.0
Docker Hub や GitHub Container Registry などのレジストリにプッシュする前に、ログインしておきます。プライベートレジストリの場合はレジストリの URL を指定します。
docker login
docker login <レジストリURL>
ログイン後、イメージをレジストリにプッシュします。Docker Hub の場合はイメージ名を <ユーザー名>/<イメージ名>:<タグ> の形式にしておく必要があります。
docker tag my-app:latest <ユーザー名>/my-app:latest
docker push <ユーザー名>/my-app:latest
ローカルのイメージを削除します。タグを指定すると特定バージョンだけ削除できます。-f を付けると実行中のコンテナが使っているイメージでも強制削除できます。
docker rmi my-app:latest
docker rmi -f my-app:latest
起動
イメージからコンテナを新規作成して起動するには docker run を使います。-d でバックグラウンド実行、--name でコンテナ名を指定できます。
docker run -d --name my-container nginx
ポートのマッピングには -p オプションを使います。<ホスト側ポート>:<コンテナ側ポート> の形式で指定します。
docker run -d -p 8080:80 --name my-nginx nginx
--rm と -it を付けるとフォアグラウンドで対話的に起動できます。--rm を付けておくと終了時にコンテナが自動で削除されます。コンテナ内の動作を手動で確認したいときに使います。
docker run --rm -it my-app:latest bash
停止中のコンテナを起動します。docker run で新規作成せずに、既存のコンテナをそのまま再開したいときに使います。
docker start <コンテナ名またはID>
実行中のコンテナを再起動します。サービスの設定を反映させたいときなどに使います。
docker restart <コンテナ名またはID>
環境変数
コンテナ起動時に環境変数を渡すには -e オプションを使います。データベースの接続情報や API キーなど、環境ごとに変わる設定値を外部から注入するときに役立ちます。イメージに設定値を埋め込まずに済むため、同じイメージを開発・ステージング・本番で使い回せます。
docker run -e DB_HOST=localhost -e DB_PORT=5432 my-app
.env ファイルにまとめた環境変数を一括で渡すには --env-file を使います。変数が多い場合はファイルにまとめると管理しやすくなります。
docker run --env-file .env my-app
コンテナ内で設定されている環境変数を確認したい場合は docker exec と env コマンドを組み合わせます。
docker exec <コンテナ名またはID> env
ボリューム
コンテナを削除するとその内部のデータも失われます。データを永続化するにはボリュームを使います。docker volume create でボリュームを作成し、-v オプションでコンテナにマウントします。
docker volume create my-volume
docker run -v my-volume:/app/data my-app
ホストのディレクトリをコンテナ内に直接マウントするにはバインドマウントを使います。開発中にホスト側のファイル変更をコンテナ内にリアルタイムで反映させたいときに役立ちます。
docker run -v $(pwd)/src:/app/src my-app
ボリュームの一覧を確認します。
docker volume ls
ボリュームの詳細情報(マウント先のパスなど)を確認します。コンテナがどのパスにマウントしているかを調べるときに使います。
docker volume inspect <ボリューム名>
使われていないボリュームをまとめて削除します。コンテナを削除してもボリュームは残るため、定期的に整理しましょう。
docker volume prune
ネットワーク
コンテナ間の通信を分離したい場合は、カスタムネットワークを作成します。同じネットワークに接続されたコンテナ同士はコンテナ名で名前解決できます。
docker network create my-network
コンテナをネットワークに接続しながら起動します。
docker run -d --name my-app --network my-network my-app:latest
すでに起動中のコンテナをネットワークに接続・切断することもできます。
docker network connect my-network <コンテナ名またはID>
docker network disconnect my-network <コンテナ名またはID>
ネットワークの一覧を確認します。デフォルトで bridge・host・none の 3 つが存在し、作成したカスタムネットワークも合わせて表示されます。
docker network ls
接続しているコンテナや設定の詳細を確認します。コンテナ間の名前解決が期待通りに動いているか調べるときに役立ちます。
docker network inspect <ネットワーク名>
不要になったネットワークを削除します。使われていないネットワークをまとめて削除するには docker network prune が便利です。
docker network rm my-network
docker network prune
コンテナ状態
コンテナの一覧を確認します。-a を付けると停止中のコンテナも含めてすべて表示されます。
docker ps
docker ps -a
特定のコンテナの詳細情報(IPアドレス、マウント、環境変数など)を確認します。設定が意図通りに反映されているかチェックするときに使います。
docker inspect <コンテナ名またはID>
コンテナのリソース使用状況(CPU・メモリ)をリアルタイムで確認します。
docker stats
Docker 全体のディスク使用量(イメージ・コンテナ・ボリューム・キャッシュ)を確認します。削除前に空き容量を把握するときに役立ちます。
docker system df
コンテナのログを確認します。-f でリアルタイム追跡、--tail で表示行数を絞れます。
docker logs <コンテナ名またはID>
docker logs -f <コンテナ名またはID>
docker logs --tail 100 <コンテナ名またはID>
コンテナ操作
実行中のコンテナに入ります。bash が入っていないコンテナ(Alpine Linux ベースなど)では sh を使います。
docker exec -it <コンテナ名またはID> bash
docker exec -it <コンテナ名またはID> sh
コンテナに入らずコマンドを実行したいときは、コマンドを直接渡します。ファイルの存在やプロセスをその場で確認するときに使います。
docker exec <コンテナ名またはID> ls /etc
ホストからコンテナにファイルをコピーします。設定ファイルの送り込みに使います。
docker cp <ホスト側パス> <コンテナ名またはID>:<コンテナ側パス>
コンテナからホストにファイルをコピーします。ログファイルや設定ファイルの取り出しに使います。
docker cp <コンテナ名またはID>:<コンテナ側パス> <ホスト側パス>
トラブルシューティング
コンテナの起動・停止・クラッシュなどのイベントをリアルタイムで追跡します。クラッシュループしているサービスの検出や問題の発生タイミングを特定するときに役立ちます。特定のコンテナに絞り込むには --filter を使います。
docker events
docker events --filter container=my-app
ポートが意図通りに公開されているか確認します。LISTEN しているポートの一覧が表示されます。
docker port <コンテナ名またはID>
イメージのレイヤー構成を確認したい場合は docker history を使います。どのコマンドでどれだけのサイズが追加されたか把握できます。
docker history my-app:latest
停止/削除
実行中のコンテナを停止します。SIGTERM を送信し、一定時間後に応答がなければ SIGKILL で終了します。
docker stop <コンテナ名またはID>
停止したコンテナを削除します。-f を付けると実行中でも強制削除できます。
docker rm <コンテナ名またはID>
docker rm -f <コンテナ名またはID>
停止済みのコンテナや未使用のイメージをまとめて削除するには prune が便利です。
docker container prune
docker image prune
停止中コンテナ・未使用イメージ・未使用ネットワーク・キャッシュをまとめて削除します。--volumes を付けるとボリュームも対象になります。
docker system prune
docker system prune --volumes
コマンド早見表
よく使うコマンドの構文をまとめました。引数の順序を忘れたときの確認にご活用いただけます。
| コマンド | 内容 |
|---|---|
docker pull [image] | レジストリからイメージを取得 |
docker build [path] | Dockerfile からイメージをビルド |
docker tag [src] | イメージに別のタグを付ける |
docker push [image] | レジストリにイメージをプッシュ |
docker rmi [image] | イメージを削除 |
docker run [image] | コンテナを作成して起動 |
docker exec [container] | 実行中のコンテナでコマンドを実行 |
docker cp [src] | ホストとコンテナ間でファイルをコピー |
docker logs [container] | コンテナのログを表示 |
docker inspect [container] | コンテナの詳細情報を表示 |
docker stop [container] | コンテナを停止 |
docker rm [container] | コンテナを削除 |
docker network connect [network] | コンテナをネットワークに接続 |
docker volume inspect [volume] | ボリュームの詳細情報を表示 |
まとめ
- コンテナを動かすまでの基本的な流れは「イメージ取得 → コンテナ起動 → 状態確認」です
- 環境変数は実行時オプションで外部から注入し、設定値をイメージに含めないようにしましょう
- データの永続化が必要な場合は、ボリュームまたはバインドマウントを使いましょう
- 問題が起きたときはログを確認し、コンテナ内部に入って調べましょう
- 定期的にディスク使用量を確認し、不要なリソースをクリーンアップする習慣をつけましょう