docker image ls
コマンドで表示されるCreatedSince
は、2 weeks ago
とかざっくりした表現になっている。
$ docker image ls --format '{{.ID}}\t{{.CreatedSince}}' eiryu/q-text-as-data
67e7356ad630 41 hours ago
2fbfdfb6e5d8 43 hours ago
作られた日から15日経過したものを消すなど、もっと細かい指定がしたい場合はCreatedAt
をparseして時刻判定をすれば良い。
ちなみにJavaだとyyyy-MM-dd HH:mm:ss Z z
でparse出来る形式で出力される。
$ docker image ls --format '{{.CreatedAt}}' eiryu/q-text-as-data
2019-03-02 03:01:10 +0900 JST
2019-03-02 00:24:42 +0900 JST
結果は以下。minusHours
の部分はminusDays
等での調整も可。詳細はjava.time.LocalDateTime
のJavadocを参照。
$ docker image ls --format '{{.ID}}\t{{.CreatedAt}}' eiryu/q-text-as-data | groovy -npe "def createdAt = line.split('\t')[1]; def parsed = java.time.format.DateTimeFormatter.ofPattern('yyyy-MM-dd HH:mm:ss Z z').parse(createdAt); def time = java.time.LocalDateTime.from(parsed); if (time.isBefore(java.time.LocalDateTime.now().minusHours(42))) line"
2fbfdfb6e5d8 2019-03-02 00:24:42 +0900 JST
あとはawk
なりxargs
でIMAGE IDをdocker image rm
に渡せば良い。
DockerのGroovyで動かしても良いし便利。
$ docker image ls --format '{{.ID}}\t{{.CreatedAt}}' eiryu/q-text-as-data | docker container run --rm -i groovy:2.5.0-jdk8 groovy -npe "..."
環境
$ docker -v
Docker version 18.09.2, build 6247962
$ groovy -v
Groovy Version: 2.5.0 JVM: 1.8.0_181 Vendor: Azul Systems, Inc. OS: Mac OS X