Docker CLI
Common Flags
| Flag | Description |
|---|---|
-d | バックグラウンド実行 |
-p host:container | ポートマッピング |
-it | インタラクティブターミナル |
--name | コンテナ名 を指定 |
--network | ネットワークを指定 |
--rm | 停止 時 に自動 削除 |
-e key=value | 環境 変数 を設定 |
--env-file | 環境 ファイルを使用 |
Container Management
run
コンテナを作成 して起動 します。
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run -d --name nginx-server -p 80:80 nginx
docker run -it ubuntu /bin/bashインタラクティブモード:
docker run -i/-it [コンテナ]環境 変数 設定 :
docker run -e パラメータ=値 [イメージ]環境 ファイルを使用 :
docker run -d -p 8080:80 --env-file .env [イメージ]start / stop / restart
# 既存のコンテナを起動
docker start [OPTIONS] CONTAINER [CONTAINER...]
docker start nginx-server
# コンテナを停止
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker stop nginx-server
docker stop $(docker ps -a -q) # すべてのコンテナを停止
# コンテナを再起動
docker restart [OPTIONS] CONTAINER [CONTAINER...]
docker restart nginx-serverpause / unpause
# コンテナを一時停止
docker pause CONTAINER [CONTAINER...]
docker pause nginx-server
# 一時停止したコンテナを再開
docker unpause CONTAINER [CONTAINER...]
docker unpause nginx-serverrm
コンテナを削除 します。
docker rm [OPTIONS] CONTAINER [CONTAINER...]
docker rm nginx-server
docker rm -f nginx-server # 強制削除exec
コンテナ内 でコマンドを実行 します。
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec -it nginx-server /bin/bash
docker exec -u root nginx-server whoami
docker exec -it [コンテナ] bash # インタラクティブ shellcp
コンテナとホスト間 でファイルを複製 します。
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
docker cp nginx-server:/etc/nginx/nginx.conf ./nginx.confcommit / export / import
# コンテナのスナップショットを作成
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker commit nginx-server my-nginx:v1.0
# コンテナを tar ファイルにエクスポート
docker export [OPTIONS] CONTAINER
docker export nginx-server > nginx-backup.tar
# tar ファイルからイメージをインポート
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
docker import nginx-backup.tar my-nginx:restoredattach
実行 中 のコンテナにアタッチします。
docker attach [コンテナ]container update
既存 コンテナの設定 を更新 します。
docker container update --publish <ホストポート>:<コンテナポート> <コンテナ名またはID>Image Commands
images / image ls
イメージを一覧 表示 します。
docker images [OPTIONS] [REPOSITORY[:TAG]]
docker images
docker images --filter "dangling=true"
docker image ls
docker image prune -a # 未使用のイメージを削除search / pull / push
# イメージを検索
docker search [OPTIONS] TERM
docker search nginx
# イメージをダウンロード
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
docker pull nginx:latest
docker pull ubuntu:20.04
# イメージをアップロード
docker push [OPTIONS] NAME[:TAG]
docker push my-registry.com/my-image:latestrmi
イメージを削除 します。
docker rmi [OPTIONS] IMAGE [IMAGE...]
docker rmi nginx:latest
docker rmi -f $(docker images -q) # すべてのイメージを削除
docker rmi -f $(docker images -aq) # すべてのイメージを削除tag
ローカルの既存 イメージに新 しい名前 またはタグを指定 します。
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker tag nginx:latest my-nginx:v1.0
docker tag hello-docker lexyu/hello-dockerbuild
Dockerfile からイメージを構築 します。
docker build [OPTIONS] PATH | URL | -
docker build -t my-app:latest .
docker build -f Dockerfile.prod -t my-app:prod .
docker build --no-cache -t my-app:latest .
docker build . -t my-simple-webhistory / inspect
# イメージ履歴
docker history [OPTIONS] IMAGE
docker history nginx:latest
# イメージの詳細情報を確認
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
docker inspect nginx:latest
# 特定の IP を取得
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' [コンテナ]save / load
# イメージを tar ファイルに保存
docker save [OPTIONS] IMAGE [IMAGE...]
docker save -o nginx.tar nginx:latest
docker save [オプション] [イメージ] > [ファイル名].tar
# tar ファイルからイメージをロード
docker load [OPTIONS]
docker load -i nginx.tarInformation & Monitoring
ps
コンテナを一覧 表示 します。
docker ps [OPTIONS]
docker ps # 実行中のコンテナ
docker ps -a # すべてのコンテナ
docker ps -q # コンテナ ID のみ表示
docker ps -aq # すべてのコンテナ ID
docker ps --filter "status=exited"logs
コンテナのログを表示 します。
docker logs [OPTIONS] CONTAINER
docker logs nginx-server
docker logs -f nginx-server # リアルタイム追跡
docker logs --tail 100 nginx-serverstats / top / diff
# コンテナ統計情報
docker stats [OPTIONS] [CONTAINER...]
docker stats
docker stats nginx-server
# コンテナプロセス
docker top CONTAINER [ps OPTIONS]
docker top nginx-server
# コンテナ変更
docker diff CONTAINER
docker diff nginx-serverSystem Information
# システム情報
docker system info
docker info
# ディスク使用量
docker system df
docker system df -v
# システムイベント
docker system events [OPTIONS]
docker events
docker events --filter container=nginx-server
# バージョン情報
docker version
docker --versionNetwork Management
# ネットワークを一覧表示
docker network ls
# ネットワークを作成
docker network create [OPTIONS] NETWORK
docker network create my-network
docker network create --driver bridge my-bridge
docker network create --driver bridge --subnet 182.18.0.1/24 --gateway 182.18.0.1 [ネットワーク名]
# ネットワークの詳細情報を確認
docker network inspect [OPTIONS] NETWORK [NETWORK...]
docker network inspect my-network
# コンテナをネットワークに接続
docker network connect [OPTIONS] NETWORK CONTAINER
docker network connect my-network nginx-server
# コンテナのネットワーク接続を切断
docker network disconnect [OPTIONS] NETWORK CONTAINER
docker network disconnect my-network nginx-server
# ネットワークを削除
docker network rm NETWORK [NETWORK...]
docker network rm my-network
# 未使用のネットワークをクリーンアップ
docker network prune [OPTIONS]
docker network prune -fVolume Management
# ボリュームを一覧表示
docker volume ls
# ボリュームを作成
docker volume create [OPTIONS] [VOLUME]
docker volume create my-volume
# ボリュームの詳細情報を確認
docker volume inspect [OPTIONS] VOLUME [VOLUME...]
docker volume inspect my-volume
# ボリュームを削除
docker volume rm [OPTIONS] VOLUME [VOLUME...]
docker volume rm my-volume
# 未使用のボリュームをクリーンアップ
docker volume prune [OPTIONS]
docker volume prune -f
# データを永続化
docker run -v /opt/data:/var/lib/mysql mysql
# マウント
docker run --mount type=bind,source=/ホストパス,target=/コンテナパス [イメージ]Registry Operations
# レジストリにログイン
docker login [OPTIONS] [SERVER]
docker login
docker login my-registry.com
# レジストリからログアウト
docker logout [SERVER]
docker logout
docker logout my-registry.com
# プライベートレジストリサーバーをデプロイ
docker run -d -p 5000:5000 --restart=always --name registry registry:2
# プライベートレジストリにプッシュ
docker tag [イメージ] localhost:5000/[イメージ]
docker push localhost:5000/[イメージ]
# レジストリの内容を確認
curl -X GET localhost:5000/v2/_catalogSystem Maintenance
# システムをクリーンアップ
docker system prune [OPTIONS]
docker system prune -f # 停止したコンテナ、未使用のネットワーク、イメージをクリーンアップ
docker system prune -a -f # すべての未使用リソースをクリーンアップ
# 特定のリソースをクリーンアップ
docker container prune [OPTIONS] # 停止したコンテナをクリーンアップ
docker image prune [OPTIONS] # 未使用のイメージをクリーンアップ
docker network prune [OPTIONS] # 未使用のネットワークをクリーンアップ
docker volume prune [OPTIONS] # 未使用のボリュームをクリーンアップDocker Run Options
# 基本オプション
-d, --detach # バックグラウンド実行
-i, --interactive # STDIN を開いたままにする
-t, --tty # 擬似ターミナルを割り当て
--name string # コンテナ名
--rm # コンテナ停止時に自動削除
# ネットワークオプション
-p, --publish list # ポートを公開
-P, --publish-all # すべてのポートを公開
--network string # ネットワークに接続
# ストレージオプション
-v, --volume list # ボリュームをマウント
--mount mount # ファイルシステムをマウント
-w, --workdir string # 作業ディレクトリ
# リソース制限
-m, --memory bytes # メモリ制限
--cpus decimal # CPU 制限
--memory-swap bytes # メモリ + Swap 制限
# 環境変数
-e, --env list # 環境変数を設定
--env-file list # ファイルから環境変数を読み込み
# 再起動ポリシー
--restart string # 再起動ポリシー (no|on-failure|always|unless-stopped)Resource Limited
# CPU
docker run -cpus=.5 ubuntu
# Memory
docker run -memory=100m ubuntuSleep
docker run ubuntu:latest sleep 10Docker Swarm
init
docker swarm init --advertise-addr 192.168.1.12
Service
Docker Swarm 用 。マネージャーノードでコマンドを実行 する必要 があります。
docker service create --replicas=3 my-web-serverdocker service create --replicas=3 -p 8080:80 --network frontend my-web-serverdocker service create --replicas=3 --network frontend my-web-server
Tool Combinations
grep
# コンテナ名をフィルタ
docker ps | grep nginx
docker ps -a | grep "Exited"
# イメージをフィルタ
docker images | grep ubuntu
docker images | grep -v "none"
# ログをフィルタ
docker logs nginx-server | grep "error"
docker logs nginx-server | grep -i "warning"
# ネットワークをフィルタ
docker network ls | grep bridgeawk
# コンテナ ID を抽出
docker ps | awk '{print $1}'
docker ps -a | awk 'NR>1 {print $1}'
# コンテナ名を抽出
docker ps | awk '{print $NF}'
docker ps --format "table {{.Names}}\t{{.Status}}"
# イメージサイズを計算
docker images | awk 'NR>1 {sum+=$7} END {print "Total size: " sum " MB"}'
# 特定のフィールドを抽出
docker ps | awk '{print $2, $NF}' # イメージ名とコンテナ名sed
# ヘッダーを削除
docker ps | sed '1d'
# テキストを置換
docker ps | sed 's/CONTAINER/Container/'
# 特定の行を抽出
docker ps | sed -n '2,5p' # 2-5 行目を表示xargs
# すべてのコンテナを停止
docker ps -q | xargs docker stop
# すべての停止したコンテナを削除
docker ps -aq --filter "status=exited" | xargs docker rm
# タグなしのイメージを削除
docker images -f "dangling=true" -q | xargs docker rmi
# バッチでコマンドを実行
docker ps --format "{{.Names}}" | xargs -I {} docker logs {}
# すべてのコンテナを停止して削除
docker ps -aq | xargs docker stop | xargs docker rmjq
# inspect 出力をフォーマット
docker inspect nginx-server | jq '.[0].Config.Env'
docker inspect nginx-server | jq '.[0].NetworkSettings.IPAddress'
# 特定の情報を抽出
docker inspect $(docker ps -q) | jq '.[] | {Name: .Name, Status: .State.Status}'Complex Command Examples
# すべてのコンテナを停止して削除
docker stop $(docker ps -q) && docker rm $(docker ps -aq)
# すべての未使用リソースを削除
docker system prune -a -f && docker volume prune -f
# 最もメモリを消費しているコンテナを表示
docker stats --no-stream | sort -k4 -hr | head -5
# コンテナの起動時間をソートして表示
docker ps --format "table {{.Names}}\t{{.Status}}" | sort -k2
# 特定のコンテナの CPU 使用率を監視
watch -n 1 "docker stats --no-stream | grep nginx-server"
# 100MB 以上のイメージを検索
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" | \
awk '$3 ~ /[0-9]+GB|[1-9][0-9][0-9]+MB/'
# 特定の名前を含むコンテナをバッチで再起動
docker ps --format "{{.Names}}" | grep "web" | xargs docker restart
# コンテナの環境変数を表示
docker ps --format "{{.Names}}" | \
xargs -I {} sh -c 'echo "=== {} ==="; docker exec {} env'Performance Monitoring
# すべてのコンテナのリソース使用をリアルタイム監視
docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"
# コンテナのファイルシステム変更を表示
docker ps -q | xargs -I {} sh -c 'echo "=== {} ==="; docker diff {}'
# コンテナのネットワークトラフィックを監視
docker exec nginx-server cat /proc/net/dev
# コンテナのプロセスツリーを表示
docker ps --format "{{.Names}}" | xargs -I {} docker exec {} ps auxLog Analysis
# エラーログを分析
docker logs nginx-server 2>&1 | grep -i error | wc -l
# 時間範囲内のログを抽出
docker logs nginx-server --since "2024-01-01T00:00:00" --until "2024-01-02T00:00:00"
# アクセスログ統計を分析
docker logs nginx-server | awk '{print $1}' | sort | uniq -c | sort -nr
# 複数のコンテナのログをリアルタイム監視
docker ps --format "{{.Names}}" | grep "web" | \
xargs -I {} bash -c 'docker logs -f {} > {}.log 2>&1 &'Format Docker Info
export FORMAT="ID\t{{.ID}}\nNAME\t{{.Names}}\nImage\t{{.Image}}\nPORTS\t{{.Ports}}\nCOMMAND\t{{.Command}}\nCREATED\t{{.CreatedAt}}\nSTATUS\t{{.Status}}\n"
docker ps --format=$FORMAT~/.docker の config.json に設定
を追加
して、永続的
に変更
できます:
{
"psFormat": "ID\t{{.ID}}\nNAME\t{{.Names}}\nImage\t{{.Image}}\nPORTS\t{{.Ports}}\nCOMMAND\t{{.Command}}\nCREATED\t{{.CreatedAt}}\nSTATUS\t{{.Status}}\n"
}Casual Notes
MQ
RabbitMQ
docker pull rabbitmq:4.0.4-managementdocker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:4.0.4-managementDatabases
Redis:
docker run -p 6379:6379 -v "{PATH}/redis":/data -v "{PATH}/redis/redis.conf":/usr/local/etc/redis/redis.conf redislabs/redismod:latestMySQL:
docker run --name mysql-container \
-e MYSQL_USER=root \
-e MYSQL_ROOT_PASSWORD=p@ssw0rd \
-p 3307:3306 \
-v "{PATH}":/var/lib/mysql \
-d mysql:latestPostgres:
docker run --name postgres-container \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=p@ssw0rd \
-p 5432:5432 \
-v "{PATH}":/var/lib/postgresql/data \
-d postgres:latest