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)のみが戻って来ます。 - その戻り値の「ある・なし」で
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
-