動機
稼働中の複数のコンテナのコンテナ名などの情報をシェルスクリプトで取得したいということがあり検証しました。
環境
- Ubuntu 20.04
- Docker version 20.10.14
- Docker Compose version v2.4.1
スクリプト
稼働中のコンテナごとにコンテナIDとコンテナ名を表示させます。
contanier-list.sh
#!/bin/bash
for contanier in `docker ps -q --format '{{.ID}},{{.Names}}'`; do
# カンマ区切りをリスト化
list=(${contanier//,/ })
# リストの表示
# echo ${list[@]}
# コンテナIDと名前を取得
contanier_id=${list[0]}
contanier_name=${list[1]}
echo ${contanier_id} ${contanier_name}
done
テストコンテナの構築
適当にNginxコンテナを10台構築します。
#!/bin/bash
# 構築するコンテナの数
num=10
# 指定した数だけコンテナを構築
for i in `seq 1 ${num}`
do
contanier_name=nginx_${i}
docker run --name ${contanier_name} -d nginx
done
構築したコンテナを確認する。
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b92f31fca31f nginx "/docker-entrypoint.…" About a minute ago Up About a minute 80/tcp nginx_10
7e7d46aed8f5 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 80/tcp nginx_9
54ae367b6c9c nginx "/docker-entrypoint.…" About a minute ago Up About a minute 80/tcp nginx_8
d0881a7a8f5b nginx "/docker-entrypoint.…" About a minute ago Up About a minute 80/tcp nginx_7
1ad4fe86c8e7 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 80/tcp nginx_6
bccf446ebe9e nginx "/docker-entrypoint.…" About a minute ago Up About a minute 80/tcp nginx_5
de1638f5ed11 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 80/tcp nginx_4
e550e98095f7 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 80/tcp nginx_3
1462f40996bf nginx "/docker-entrypoint.…" About a minute ago Up About a minute 80/tcp nginx_2
d9659cce21fb nginx "/docker-entrypoint.…" About a minute ago Up About a minute 80/tcp nginx_1
スクリプト実行
./contanier-list.sh
コンテナIDとコンテナ名を確認することができました。
b92f31fca31f nginx_10
7e7d46aed8f5 nginx_9
54ae367b6c9c nginx_8
d0881a7a8f5b nginx_7
1ad4fe86c8e7 nginx_6
bccf446ebe9e nginx_5
de1638f5ed11 nginx_4
e550e98095f7 nginx_3
1462f40996bf nginx_2
d9659cce21fb nginx_1
掃除
以下のスクリプトで先ほど構築したNginxコンテナを削除できます。--filter
オプションでフィルターをかけてみました。
remove.sh
#!/bin/bash
for contanier in `docker ps -q --filter "name=nginx" --format '{{.ID}}'`; do
# カンマ区切りをリスト化
list=(${contanier//,/ })
# リストの表示
# echo ${list[@]}
# コンテナIDと名前を取得
contanier_id=${list[0]}
docker stop ${contanier_id}
docker rm ${contanier_id}
done
削除されているか確認します。
docker ps -a
削除できていますね。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
まとめ
稼働中の複数のコンテナの情報をシェルスクリプトで表示させることができました。
docker ps
コマンドの--format
オプションで色々な情報が取れるのでもう少し詳細な情報も確認することができます。