コンテナリストの表示・取得
docker psはコンテナリストを表示するコマンドです。
現在起動または存在しているコンテナをpsコマンドのようにリストにしてくれます。調べてみると結構いろんな表示の仕方ができるようで、まとめてみました。
シェルスクリプト等と組み合わせることが結構あるので、しっかり覚えておきたいと思います。
デフォルトの表示
オプション無しの場合は「現在起動しているコンテナ」を表示してくれます。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4deb6920a8d4 wordpress "/entrypoint.sh apach" 7 days ago Up 11 minutes 0.0.0.0:8099->80/tcp wps
2f531d2c033b mysql "/entrypoint.sh mysql" 10 days ago Up 11 minutes 3306/tcp db
各項目の意味は以下の様になります。
| 項目 | 意味 |
|---|---|
| CONTAINER ID | コンテナIDの最初の12桁 |
| IMAGE | コンテナの元イメージ |
| COMMAND | 起動時に与えられたコマンド |
| CREATED | コンテナの作成日からの経過 |
| STATUS | 起動してからの経過・または停止してからの経過 |
| PORTS | バインドしているポート |
| NAMES | コンテナの名前 |
最後に起動したコンテナを表示する
-lオプションをつけた場合には「最後に起動したコンテナ」を表示してくれます。
$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d7f37176aa03 busybox "sh" 7 minutes ago Exited (0) 7 minutes ago grave_wozniak
最後に起動したコンテナから数えてn個のコンテナを表示する
-nオプションをつけた場合には「最後に起動したコンテナから指定数分のコンテナ」を表示してくれます。
この場合は2つ。
$ docker ps -n=2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d7f37176aa03 busybox "sh" 19 minutes ago Exited (0) 19 minutes ago grave_wozniak
8a18883e78a5 mysql "/entrypoint.sh mysql" 3 days ago Exited (0) 2 days ago testdb
すべてのコンテナを表示する
-a、--allオプションをつけた場合は「すべてのコンテナ」を表示してくれます。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d7f37176aa03 busybox "sh" 9 minutes ago Exited (0) 9 minutes ago grave_wozniak
8a18883e78a5 mysql "/entrypoint.sh mysql" 3 days ago Exited (0) 2 days ago testdb
649ffa5ac962 peco/testunit "/bin/bash /app" 3 days ago Exited (126) 3 days ago furious_fermi
4deb6920a8d4 wordpress "/entrypoint.sh apach" 7 days ago Up 21 minutes 0.0.0.0:8099->80/tcp wps
6c6aece1d119 busybox "sh" 7 days ago Created unskilleds
68ff33192210 wordpress "/entrypoint.sh apach" 10 days ago Exited (0) 7 days ago wp
2f531d2c033b mysql "/entrypoint.sh mysql" 10 days ago Up 21 minutes 3306/tcp db
0458141158a7 busybox "sh" 10 days ago Created unskilled
eaea95226b5d busybox "sh" 2 weeks ago Created dc02
508f42b2ba6b busybox "sh" 2 weeks ago Exited (0) 2 weeks ago dc01
起動中のコンテナの省略IDを表示する
-q、--quietオプションをつけた場合は「起動しているコンテナのIDのみ」を表示してくれます。表示されるIDは省略IDです。
$ docker ps -q
4deb6920a8d4
2f531d2c033b
情報をフル表示させる
--no-truncオプションをつけた場合には「情報を省略しないで」表示してくれます。IDはフルIDとなります。
$ docker ps --no-trunc
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4deb6920a8d493205f6a9ce3a2d03072319ae736018c1b0d6c0aeb63bbffa51e wordpress "/entrypoint.sh apache2-foreground" 7 days ago Up 36 minutes 0.0.0.0:8099->80/tcp wps
2f531d2c033bb06307e5ed84a691b10b9e23959dff62804f7284128a9eb46b09 mysql "/entrypoint.sh mysqld" 10 days ago Up 36 minutes 3306/tcp db,wp/mysql,wps/mysql
サイズを確認する
-s、--sizeオプションをつけた場合には「コンテナのサイズ」を表示してくれます。
例ではSIZEに2B、4Bと表示されていますが、2バイト、4バイトという意味です。
容量がかなり少ない様に思えますが、これはイメージ (virtualで表示されている)との差分容量のようです。コンテナの中でファイルを作ったり、アプリケーションをインストールするなどすると直ぐに増えるかと思います。
$ docker ps -s
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
4deb6920a8d4 wordpress "/entrypoint.sh apach" 7 days ago Up 41 minutes 0.0.0.0:8099->80/tcp wps 2 B (virtual 510.8 MB)
2f531d2c033b mysql "/entrypoint.sh mysql" 10 days ago Up 41 minutes 3306/tcp db 4 B (virtual 358.5 MB)
フィルタリングする
-f、--filterオプションはフィルタリングです。
単一のフィルタの場合は以下のようなります。
--filter key=value
複数のフィルタの場合は以下の様にオプションを並べます。
--filter key=value --filter key=value --filter key=value
フィルタに使えるkeyは以下です。
| Key | 意味 |
|---|---|
| id | コンテナのID |
| name | コンテナの名前 |
| label | コンテナのLabel |
| status | コンテナの状態 |
| exited | 終了コード |
| ancestor | 祖先(イメージ) |
| since | 指定したIDまたは名前がついたコンテナ以降のコンテナ |
| before | 指定したIDまたは名前がついたコンテナ以前のコンテナ |
名前でフィルタリング
$ docker ps --f name=db
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2f531d2c033b mysql "/entrypoint.sh mysql" 10 days ago Up About an hour 3306/tcp db
IDでフィルタリング
$ docker ps -f id=4deb6920a8d4
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4deb6920a8d4 wordpress "/entrypoint.sh apach" 8 days ago Up About an hour 0.0.0.0:8099->80/tcp wps
状態でフィルタリング
状態でフィルタリングするときに使えるvalueは以下です。
| 状態 | 意味 |
|---|---|
| created | 作られただけで起動されてないコンテナ |
| restarting | 再起動したコンテナ |
| running | 起動中のコンテナ |
| paused | 一時停止中のコンテナ |
| exited | 停止中のコンテナ |
| dead | 異常終了した(落ちた)コンテナ |
running
runningでは起動中のコンテナを表示できます。
$ docker ps -f status=running
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4deb6920a8d4 wordpress "/entrypoint.sh apach" 8 days ago Up About an hour 0.0.0.0:8099->80/tcp wps
2f531d2c033b mysql "/entrypoint.sh mysql" 10 days ago Up 41 seconds 3306/tcp db
paused
pausedではpauseコマンドで一時停止中のコンテナを表示できます。
$ docker run -i -t -d --name test busybox
$ docker pause test
$ docker ps -f status=paused
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ac0e10831d45 busybox "sh" 36 seconds ago Up 35 seconds (Paused) test
指定したイメージから作られたコンテナを表示する
ancestorでは指定したイメージから作られたコンテナを表示することができます。
指定にはimage、image:tag、image:tag@digest、省略ID、フルIDが使えます。
イメージ名でフィルタリング
$ docker ps -f ancestor=wordpress
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4deb6920a8d4 wordpress "/entrypoint.sh apach" 8 days ago Up 2 hours 0.0.0.0:8099->80/tcp wps
イメージIDでフィルタリング
$docker ps -f ancestor=f2c489928dc3
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4deb6920a8d4 wordpress "/entrypoint.sh apach" 8 days ago Up 2 hours 0.0.0.0:8099->80/tcp wps
テンプレートを使って表示する
docker psではテンプレートをつかって表示を整形することができます。
| プレースホルダ | 意味 |
|---|---|
| .ID | コンテナID |
| .Image | イメージID |
| .Command | コマンド |
| .CreatedAt | コンテナが作成された日時 |
| .RunningFor | コンテナが起動してからの経過時間 |
| .Ports | バインドしているポート |
| .Status | コンテナの状態 |
| .Names | コンテナの名前 |
| .Labels | コンテナに割り当てられたすべてのラベル |
| .Label | 特定のラベル |
IDと状態で表示
デフォルトでは項目名は出力されないようです。
$ docker ps --format "{{.ID}} {{.Status}}"
b14e79aed553 Up 36 minutes
ac0e10831d45 Up 44 minutes (Paused)
8a18883e78a5 Up 39 minutes
4deb6920a8d4 Up 2 hours
2f531d2c033b Up 49 minutes
区切り文字で整形してみる
項目の区切り文字を指定することができます。
$ docker ps --format "{{.ID}} | {{.Status}}"
b14e79aed553 | Up 38 minutes
ac0e10831d45 | Up 46 minutes (Paused)
8a18883e78a5 | Up 41 minutes
4deb6920a8d4 | Up 2 hours
2f531d2c033b | Up 50 minutes
テーブル形式で整形してみる
tableとtをつかってきっちり整形することができます。tableにすると項目名が出力されます。tは項目名と項目の頭を揃えてくれます。
$ docker ps --format "table {{.ID}}t{{.Status}}"
CONTAINER ID STATUS
b14e79aed553 Up 40 minutes
ac0e10831d45 Up 48 minutes (Paused)
8a18883e78a5 Up 43 minutes
4deb6920a8d4 Up 2 hours
2f531d2c033b Up 52 minutes
おまけ
-qオプションがIDしか表示しないので結構便利だったりします。-qオプションをつけた場合にはこんな感じでIDを取得することができます。配列的な感じでしょうか?
$ conid=$(docker ps -q)
$ echo $conid
b14e79aed553 ac0e10831d45 8a18883e78a5 4deb6920a8d4 2f531d2c033b
コンテナに一気に処理を行う
一気にコンテナを削除したい場合には以下の様にすると便利デス。(停止中のコンテナ全部消えるので注意)
$ docker rm $(docker ps -q)
フィルタと組み合わせる
-fオプションと組み合わせると特定のコンテナに絞って削除することもできます。例ではwordpressイメージから作ったコンテナを削除しマス。
$ docker rm $(docker ps -q -f ancestor=wordpress)
後記
docker psのまとめをしてみました。結構いろんなオプションがあり、いろんな表示のさせ方ができるものだなと思いました。