メインコンテンツまでスキップ

Docker チートシート:目的別コマンドリファレンス

タグ:

業務で Docker を使っていると、オプションや構文を都度調べ直すことがよくあります。本記事では、業務でよく使う Docker コマンドを目的別にまとめました。操作したいことからすばやく引けるリファレンスとして活用してみましょう。

イメージ

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 execenv コマンドを組み合わせます。

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>

ネットワークの一覧を確認します。デフォルトで bridgehostnone の 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]ボリュームの詳細情報を表示

まとめ

  • コンテナを動かすまでの基本的な流れは「イメージ取得 → コンテナ起動 → 状態確認」です
  • 環境変数は実行時オプションで外部から注入し、設定値をイメージに含めないようにしましょう
  • データの永続化が必要な場合は、ボリュームまたはバインドマウントを使いましょう
  • 問題が起きたときはログを確認し、コンテナ内部に入って調べましょう
  • 定期的にディスク使用量を確認し、不要なリソースをクリーンアップする習慣をつけましょう