はじめに
docker ps コマンドで現在稼働中の Docker コンテナを確認できます。
デフォルトでは以下のような情報が出力されます。
| |
ここでは 2 つのコンテナが実行されています。
CONTAINER ID や IMAGE の情報を取り出して、パイプで別の処理に引き渡したい(例えば、実行中プロセスをすべて停止したい)場合は、 cut や awk を使って処理する方法が考えられます。
| |
ヘッダーの除去するための tail や、 任意の列だけを取り出すための cut 、 awk を使わずに --format オプションを使用する方法があります。また--format オプションには少し変わった使い方もあります。
検証環境
| |
--format オプションを使って出力形式を制御する
docker ps コマンドを --format オプション付きで実行することで、任意の情報のみを出力するように制御できます。
--format オプションは引数指定が必須であり、引数は Go 言語テンプレート に従った記法で指定します。
Go 言語テンプレートについては こちら に記載がありました。
PHP の Smarty や Java の Velocity のようなテンプレートエンジンには変数の埋め込みが可能ですが、 Go 言語テンプレートでは {{.VARIABLE}} の形式で変数を埋め込めます。
コンテナ ID だけを出力
--foramt を使って、コンテナ ID だけを出力してみます。
| |
パイプで別のコマンドに情報を引き渡しやすく、ヘッダー情報が表示されません。
docker コマンドでは、コンテナ ID を表す組み込み変数は ID です。
Go 言語テンプレートの形式に乗っ取り、 {{ .ID }} の形式で埋め込みます。
テンプレートエンジンの仕組みを利用しているので、前後の文字列リテラルを埋め込むことも可能です。
| |
コンテナ ID とイメージ ID を出力
コンテナ ID とイメージ ID を出力してみます。
| |
コンテナ名 とイメージ ID をヘッダー付きで出力
ヘッダーも出力したい場合には、 --format の前に table というキーワードを記述します。
カラムの間には任意の文字列を入れて区切りましょう。
| |
if 文を使う
go 言語テンプレートの仕様に則っているので、 if 文も使用できます。
| |
--format オプション内で使える組み込み変数
ここまでの例では、 --format オプション内で {{ .ID }} 、 {{ .Image }} 、 {{ .Names }} という変数を使いました。
他にも利用できる変数があります。
利用可能な変数の一覧は以下のページから確認できます。
JSON フォーマットで出力
すべての情報を JSON 形式で出力することもできます。
--format で利用可能な変数を確認するためにも利用できます。
見にくいので、 jq コマンドをセットで使うことをおすすめします。
| |
docker inspect コマンドでも使える
--format オプションは docker ps 以外でも利用できます。
docker inspect コマンドでも同様の気泡となっています。
| |
ひとこと
便利ですが、ID だけほしいときは調べるのが面倒で docker ps -a | tail -n +2 | awk '{ print $1 }' を実行したほうが早いです。