Dockerfile でイメージをビルドする前に、すでに Docker イメージが作成されているかシェル(特に
bash
)で確認したい。つまり、ビルド前の事前確認をしたいのです。
「docker
イメージ
存在
確認
」で Qiita 記事に絞ってググっても、ドンピシャでヒットしなかったので、未来の自分のググラビリティとして。
検証環境:Docker v18.09.0, macOS High Sierra
検証環境
$ date
2019年 1月 4日 金曜日 01時34分05秒 JST
$
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.13.6
BuildVersion: 17G4015
$
$ docker version
Client: Docker Engine - Community
Version: 18.09.0
API version: 1.39
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:47:43 2018
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.0
API version: 1.39 (minimum version 1.12)
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:55:00 2018
OS/Arch: linux/amd64
Experimental: false
TL; DR (今北産業)
-
docker
のimage
もしくはcontainer
コマンドに-q
もしくは--quiet
オプションで ID のみを表示させて確認できます -
-q
オプションを付けると、イメージが存在する場合は値(ID)のみが戻って来ます-q, --quiet Only show image IDs
- その戻り値の「ある・なし」で
if
分岐してprune
するなり、rm
で削除するなりできます。そのためbash
に限らず他のシェルでも確認できます。詳しくは TS; DR 参照
以下は、既存のイメージ/コンテナ/ボリューム確認の基本構文です。
基本構文(イメージ)
docker image ls -q $NAME_IMAGE
docker image ls -q $NAME_IMAGE:$TAG
基本構文(コンテナ)
# 起動中コンテナ
docker container ls -q -f name="$NAME_CONTAINER"
# 停止中も含めたコンテナ
docker container ls -q -f -a name="$NAME_CONTAINER"
基本構文(ボリューム)
docker volume ls -q -f name="$NAME_VOLUME"
イメージの場合の例
$ # 既存イメージの確認
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 3a093384ac30 2 days ago 1.2MB
alpine latest 3f53bb00af94 13 days ago 4.41MB
$
$ # 存在しないイメージの場合
$ docker image ls -q alpaca
$
$ # 存在するイメージの場合
$ docker image ls -q alpine
3f53bb00af94
TS; DR (応用)
指定したイメージがない場合に新規イメージをビルドする例。
find_image.sh
#!/bin/bash
NAME_IMAGE='sample/hoge';
if [ "$(docker image ls -q "$NAME_IMAGE")" ]; then
echo "Image ${NAME_IMAGE} already exist."
# Do something
exit 1
fi
echo "Image ${NAME_IMAGE} does not exist."
# Do something
echo 'Now building image ...'
docker build -t "$NAME_IMAGE" .
実行サンプル
$ # 既存イメージの手動確認
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 3a093384ac30 2 days ago 1.2MB
alpine latest 3f53bb00af94 13 days ago 4.41MB
jwilder/nginx-proxy latest 1e3c23efda58 7 weeks ago 148MB
$
$ # イメージがない場合に自動作成するスクリプトの実行
$ ./find_image.sh
Image sample/hoge does not exist.
Now building image ...
Sending build context to Docker daemon 4.608kB
Step 1/8 : FROM alpine:3.8
3.8: Pulling from library/alpine
Digest: sha256:46e71df1e5191ab8b8034c5189e325258ec44ea739bba1e5645cff83c9048ff1
(以下略)
あわせて読みたい
- Dockerコマンド一覧 @ Qiita