image増えがちなので一括で消したかった。
テスト用で都度都度 docker build
してたら、imageが多くなって邪魔だった。
強制的に消しても良かったので、コードで一括に消せるようにした。
コード実行時は、消したいイメージに含まれる文字列をコマンドライン引数で渡す。
コマンドの実行は subprocess を用いた。
開発環境
> docker -v
Docker version 19.03.12, build 48a66213fe
> python -V
Python 3.7.5
コード
import sys
import subprocess
def main():
args = sys.argv
if len(args) != 2:
exit("INCORRECT INPUT")
# awkで空白区切り出力はカンマ
cmd = "docker images | grep " + args[1] + " | awk '{ print $1,$2 }'"
# パイプでコマンドをつなぐ場合は run が使えないため Popen を使用
result = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
stdout, strerr = result.communicate()
# 改行区切りでsplitした場合、配列の最後に空文字が残るため [:-1]
docker_images = [i.replace(' ', ':') for i in stdout.decode('utf-8').split('\n')[:-1]]
for docker_image in docker_images:
subprocess.run(['docker', 'rmi', '-f', docker_image])
main()
実行
python main.py {消したいimageの部分文字列}
見境なしにイメージを整理
docker system prune -a -f
保有している image が全て捨てて良いものなら上記で事足りそう。