Docker CLI

Common Flags

FlagDescription
-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-server

pause / unpause

# コンテナを一時停止
docker pause CONTAINER [CONTAINER...]
docker pause nginx-server

# 一時停止したコンテナを再開
docker unpause CONTAINER [CONTAINER...]
docker unpause nginx-server

rm

コンテナを削除(さくじょ) します。

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    # インタラクティブ shell

cp

コンテナとホスト(かん) でファイルを複製(ふくせい) します。

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.conf

commit / 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:restored

attach

実行(じっこう) (ちゅう) のコンテナにアタッチします。

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:latest

rmi

イメージを削除(さくじょ) します。

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-docker

build

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-web

history / 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.tar

Information & 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-server

stats / 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-server

System 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 --version

Network 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 -f

Volume 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/_catalog

System 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 ubuntu

Sleep

docker run ubuntu:latest sleep 10

Docker Swarm

init

docker swarm init --advertise-addr 192.168.1.12
Docker Swarm Setup

Service

Docker Swarm (よう) 。マネージャーノードでコマンドを実行(じっこう) する必要(ひつよう) があります。

docker service create --replicas=3 my-web-server
docker service create --replicas=3 -p 8080:80 --network frontend my-web-server
docker service create --replicas=3 --network frontend my-web-server
Docker Swarm Service

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 bridge

awk

# コンテナ 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 rm

jq

# 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 aux

Log 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

~/.dockerconfig.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-management
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:4.0.4-management

Databases

Redis:

docker run -p 6379:6379 -v "{PATH}/redis":/data -v "{PATH}/redis/redis.conf":/usr/local/etc/redis/redis.conf redislabs/redismod:latest

MySQL:

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:latest

Postgres:

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