Ruby
docker
docker-registry

private docker distributionをコマンドラインから操作する

はじめに

まだ空きがあったのでせっかくなので投稿させていただきます。
この記事はFujitsu Advent Calender 2017 Part2 6日目の記事です。

お断り

本記事の内容は私個人の見解であり、所属する組織として意見を代表したり保証したりするものではありません。

背景

dockerで自作のコンテナを作成した場合、privateなdocker distributionにコンテナをアップロードしますよね。
docker distributionに何が登録されているかやdocker distribution内のイメージを手軽に削除したいと思い、コマンドラインからdocker distributionを操作するためのツールを作成してみました。
出力例は下記の"各コマンドの解説"の章を参考にしてください。

何ができるのか

コマンドライン上から簡単にdocker distributionに登録されているイメージやタグの一覧を検索でき、削除できる。

ツールのインストール方法

GitHubに公開していますので、git clone等でソースを入手してください。

$ git clone https://github.com/shun-miyoshi-com/docker-registry-cli.git

使い方

もしrubyをインストール済みなら下記コマンドで実行できます。

$ cd /path/to/docker-registry-cli/src
$ ruby docker-registry-cli.rb <command> [options]

rubyをインストールしてなくてもdockerをインストール済みなら下記コマンドで実行できます。

$ ./run.sh <command> [options]

※run.shで何をしているか


Dockerfileを参考にdocker-registory-cli:1.0というdocker imageを作成します。
その後docker runでimageを実行させて引数のコマンドを解釈させています。
なお、docker run時に--rmオプションを指定しているのでコマンド終了時にごみは残りません。

各コマンドの解説

  1. getImagesコマンド
    • docker distributionに存在するimageの一覧を取得します。
    • option
      --url=<url>: docker distributionのURLを指定します。(デフォルトはhttp://localhost:5000です)
    • 出力例
$ ./run.sh getImages --url="http://192.168.0.1:5000"
sample
myruby
  1. getTagsコマンド
    • docker imageのタグ一覧を取得します。
    • option
      --url=<url>: docker distributionのURLを指定します。(デフォルトはhttp://localhost:5000です)
      --image=<image>: imageの名前を指定します(このオプションは必須です)
    • 出力例
$ ./run.sh getTags --url="http://192.168.0.1:5000" --image=sample
v1.0
v2.0
  1. deleteコマンド
    • docker imageを削除します。
    • option
      --url=<url>: docker distributionのURLを指定します。(デフォルトはhttp://localhost:5000です)
      --image=<image>: imageの名前を指定します(このオプションは必須です)
      --tags=['v1.0','v1.1']: 削除したいタグを配列で指定します(このオプションをセットしない場合すべてのタグを削除します)
    • 出力例
$ ./run.sh delete --url="http://192.168.0.1:5000" --image=sample

※毎回--urlオプションをしているするのはだるかったので、環境変数(DOCKER_REGISTRY_URL)を読み込むようにしました。
例: export DOCKER_REGISTRY_URL="http://192.168.0.1:5000" をセットすると--urlオプションを指定する必要はありません。

まとめ

これであなたも素敵なprivate docker distributionライフを!

P.S. PRやISSUEなど積極的に募集しています:grinning:
参考:
docker distribution API(https://github.com/docker/distribution/blob/master/docs/spec/api.md)
別の方によるGoバージョン(https://qiita.com/Mamoru-Izuka/items/f503a82478b3272d9427)