LoginSignup
8
2

More than 1 year has passed since last update.

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)のみが戻って来ます。
    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
    (以下略)
    

    あわせて読みたい

8
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
8
2