9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker のイメージ/コンテナ/ボリュームがすでに存在しているか確認する

Last updated at Posted at 2019-01-03

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 (今北産業)

  1. dockerimage もしくは container コマンドに -q もしくは --quiet オプションで ID のみを表示させて確認できます
  2. -q オプションを付けると、イメージが存在する場合は値(ID)のみが戻って来ます
    -q, --quiet           Only show image IDs
    
  3. その戻り値の「ある・なし」で 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
(以下略)

あわせて読みたい

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?