kakakakakku blog

Weekly Tech Blog: Keep on Learning!

簡単に Docker Hub の情報を取得できる Docker Hub CLI Tool(hub-tool コマンド)

「Docker Hub CLI Tool(hub-tool コマンド)」を使うと,Docker Hub の情報取得を CLI で行えるようになる.2020年12月にリリースされて,2021年1月に OSS として GitHub リポジトリも公開された.個人的には「イメージタグを検索する hub-tool tag ls コマンド」が便利すぎて頻繁に使っている.他には「レート制限の状況を確認する hub-tool account rate-limiting コマンド」も便利!

github.com

なお Docker Blog の記事を読むと,hub-tool コマンドの機能は将来的に Docker CLI に組み込まれる可能性があり,現時点ではフィードバックを集めるためにあくまで「実験用」としてリリースしているとのこと.詳しくは以下に載っている.

This does mean that this tool is going to be an experiment so we do expect it to go away sometime in 2021. We plan to use the lessons we learn here to make something awesome as part of the Docker CLI.

www.docker.com

www.docker.com

準備 1 : hub-tool コマンドをインストールする 🧪

Docker Desktop のリリースノートにも載っている通り,Docker Desktop Community 3.0.0 からデフォルトで同梱されているため,Docker Desktop を使っていれば,特にインストールをしなくても hub-tool コマンド v0.2.0 を使える.GitHub リポジトリを見ると,最新バージョンは v0.3.0 までリリースされている.今回はインストールされている v0.2.0 を使う.

$ hub-tool version
Version:    v0.2.0
Git commit: 0edf43ac9091e7cac892cbc4cbc6efbafb665aa4

準備 2 : ログインする(Two-Factor Authentication 対応)🧪

最初に hub-tool login コマンドでログインをしておく.Docker Hub「Two-Factor Authentication (2FA)」にも対応している.ただし 2FA を有効化している場合,hub-tool コマンドを実行する度に OPT (One Time Password) の入力が求められるため,正直言って使いにくいと思う.関連する Issue も出ている.

# Two-Factor Authentication なし
$ hub-tool login kakakakakku
Password:
Login Succeeded

# Two-Factor Authentication あり
$ hub-tool login kakakakakku
Password:
2FA required, please provide the 6 digit code: 123456
Login Succeeded

準備 3 : 必要ならエイリアスを設定する 🧪

何となく hub-tool という名前に違和感があり,GitHub 関連の hub コマンドにも似ている.GitHub 関連だと,現在は gh コマンドがよく使われていることもあり,個人的に dh というエイリアスを設定して使っている.

$ alias dh=hub-tool

コマンド一覧 🧪

現状だと hub-tool コマンドに関するドキュメントはなさそうで,hub-tool help コマンドから使えるコマンドを整理した.

  • hub-tool account
    • info
    • rate-limiting
  • hub-tool help
  • hub-tool login
  • hub-tool logout
  • hub-tool org
    • ls
    • teams
    • members
  • hub-tool repo
    • ls
    • rm
  • hub-tool tag
    • ls
    • rm
    • inspect
  • hub-tool token
    • activate
    • create
    • deactivate
    • inspect
    • ls
    • rm
  • hub-tool version
$ hub-tool help
A tool to manage your Docker Hub images

Usage:
  hub-tool
  hub-tool [command]

Available Commands:
  account     Manage your account
  help        Help about any command
  login       Login to the Hub
  logout      Logout of the Hub
  org         Manage organizations
  repo        Manage repositories
  tag         Manage tags
  token       Manage Personal Access Tokens
  version     Version information about this tool

Flags:
  -h, --help      help for hub-tool
      --verbose   Print logs
      --version   Display the version of this tool

Use "hub-tool [command] --help" for more information about a command.

hub-tool account コマンド 🧪

hub-tool account info コマンドを実行すると Docker Hub のアカウント情報を取得できる.hub-tool account rate-limiting コマンドを実行すると「レート制限」の状況を確認できる.また --format json オプションを使うと JSON 形式で結果を取得できるため,API 連携などをするときに便利!

$ hub-tool account info
Username:   kakakakakku
Full name:  kakakakakku
Company:    Tech Blogger
Location:   Tokyo
Joined:     5 years ago
Plan:       free
Limits:
  Seats:        1
  Private repositories: 1
  Parallel builds:  1
  Collaborators:    unlimited
  Teams:        unlimited

$ hub-tool account rate-limiting
Limit:     200, 6 hours window
Remaining: 200, 6 hours window

$ hub-tool account info --format json

$ hub-tool account rate-limiting --format json

hub-tool help コマンド 🧪

コマンド一覧を確認するときに紹介したため割愛する.

hub-tool login コマンド 🧪

準備 2 で紹介したため割愛する.

hub-tool logout コマンド 🧪

hub-tool logout コマンドを実行すると,ログアウトできる.ポイントは Docker Hub のウェブサイトではなく,あくまで hub-tool コマンドとしてログアウトするところ.

$ hub-tool logout
Logout Succeeded

hub-tool org コマンド 🧪

hub-tool org コマンドを使うと,Docker Hub の Organizations や Teams の情報を取得できる.現在は Free プランで個人的に使っているため,取得できる情報がなかった.残念!

$ hub-tool org ls

$ hub-tool org teams my-org

$ hub-tool org members my-org

docs.docker.com

hub-tool repo コマンド 🧪

hub-tool repo コマンドを使うと,リポジトリ一覧を取得したり,リポジトリを削除できる.hub-tool repo ls コマンドを iTerm2 で実行すると REPOSITORY の部分がリンク形式になっていて,直接ブラウザを開けるようになっている.細かい工夫もあって便利!

$ hub-tool repo ls
REPOSITORY                             DESCRIPTION                                              LAST UPDATE      PULLS    STARS    PRIVATE
kakakakakku/mysql-world-database       Dockerized MySQL pre-loaded world database 🐳          42 hours ago     1244     0        false
kakakakakku/cfn-lint                   Dockerized CloudFormation Linter (cfn-lint) 👮         2 weeks ago      1597     0        false
kakakakakku/htmllint-cli               Dockerized htmllint-cli ✏️                           3 months ago     993      0        false
kakakakakku/apex                       Dockerized Apex 🐳                                     20 months ago    308      0        false
kakakakakku/git                        Dockerized Git Command 🐙                              20 months ago    15       0        false
kakakakakku/rubocop                    Dockerized RuboCop 👮                                  21 months ago    1060     0        false
kakakakakku/gin-example                gin-example                                              2 years ago      24770    0        false
kakakakakku/foodcritic                 Dockerized Foodcritic 🍕                               2 years ago      975      0        false
kakakakakku/docker-hands-on-nginx      docker-hands-on-nginx                                    2 years ago      19       0        false
kakakakakku/mkr                        Dockerized mkr 🐟                                      2 years ago      264      0        false
kakakakakku/amazonlinux-bats           Dockerized Bats for Amazon Linux 👾                    2 years ago      33       0        false
kakakakakku/mysql-56-world-database    Deprecated : Use kakakakakku/mysql-world-database:5.6    3 years ago      27       0        false
kakakakakku/mysql-57-world-database    Deprecated : Use kakakakakku/mysql-world-database:5.7    3 years ago      433      0        false
kakakakakku/httpd                      My sandbox : httpd                                       5 years ago      110      1        false
kakakakakku/nginx                      My sandbox : nginx                                       5 years ago      68       1        false

hub-tool tag コマンド 🧪

hub-tool tag コマンドを使うと,指定したリポジトリのタグ一覧を取得したり,タグを削除したり,タグに紐付くイメージの詳細情報を取得できる.特に hub-tool tag ls コマンドは便利で,Docker Hub に公開されているオフィシャルリポジトリも対象にできるため,例えば「nginx リポジトリのタグを調べたい」という場面で使える.今までは毎回 Docker Hub のウェブサイトを確認していた.

他にもオプションはある.--all オプションを使えば,全タグを取得できるし,--platforms オプションを使えば,対応しているプラットフォームも取得できるし,--sort オプションを使えば,最終更新日とタグ名でソートもできる.

$ hub-tool tag ls kakakakakku/mysql-world-database
TAG                                        DIGEST                                                                     STATUS    LAST UPDATE     LAST PUSHED    LAST PULLED    SIZE
kakakakakku/mysql-world-database:latest    sha256:872265c1d95ef7d501a63d2b6b185570173be3b658d3ea9f8b43c020bbc143cc    active    42 hours ago    42 hours       13 minutes     154.7MB
kakakakakku/mysql-world-database:5.7       sha256:98eb9d7f531ed1cbbe42c03ca08fd703d24f02117573d2c144d847f94d6b225d    active    42 hours ago    42 hours       13 minutes     154.7MB
kakakakakku/mysql-world-database:5.6       sha256:985fb7485de021a5fc8bd50b106b27b3f495d9f63e4245854118dd72eca32784    active    42 hours ago    42 hours       13 minutes     103.1MB
kakakakakku/mysql-world-database:8.0       sha256:62db58969cd30fdd82617d8f6dcf35abb09a835b1d05007a0753591a855f26ae    active    42 hours ago    42 hours       13 minutes     159.4MB
kakakakakku/mysql-world-database:5.5       sha256:d100ead4d2eacf74ad110b5f1ad3d87e2e410d66a7f5da26b0b6af7ade585141    active    42 hours ago    42 hours       13 minutes     66.16MB

$ hub-tool tag ls nginx
TAG                           DIGEST                                                                     STATUS    LAST UPDATE      LAST PUSHED    LAST PULLED       SIZE
nginx:latest                  sha256:073effa4d56e0c870597a8e49c7effee02e27c9c65e93cdfcaea34e41615141d    active    2 days ago       2 days         7 minutes         421.3MB
nginx:stable-perl             sha256:8176da19df2afbc068b9be824d11ff1482b5bdc6cd5cf7268f7e64c9c617e1c7    active    2 days ago       2 days         17 minutes        506.1MB
nginx:stable                  sha256:b0e24622e0717d4453ae834cafc39aa8888fe9a55f9a362b13cc7035fa3f3344    active    2 days ago       2 days         11 minutes        421MB
nginx:perl                    sha256:869af316fec24f6b347537a69e07850481b4fbfece958967c909b7b20831a57e    active    2 days ago       2 days         6 minutes         506.4MB
nginx:mainline-perl           sha256:e311064b5b2d9af752ad4147a132ab16ac19874ecc2243ab98523d9f59b38f45    active    2 days ago       2 days         6 minutes         506.4MB
nginx:mainline                sha256:1a53eb723d17523512bd25c27299046cfa034cce309f4ed330c943a304513f59    active    2 days ago       2 days         7 minutes         421.3MB
nginx:1.19.6-perl             sha256:f998053942a5e45c6f5aa4e0516174727e3a2da7c76b8e3656a9173a692b4e88    active    2 days ago       2 days         6 minutes         506.4MB
nginx:1.19.6                  sha256:dd19f44b5a3c4b53947a10fe507afaa4f05e1b8ca64f95f33642d68c974d2b55    active    2 days ago       2 days         7 minutes         421.3MB
nginx:1.19-perl               sha256:869af316fec24f6b347537a69e07850481b4fbfece958967c909b7b20831a57e    active    2 days ago       2 days         6 minutes         506.4MB

(中略)

100/325 listed, use --all flag to show all

$ hub-tool tag ls --platforms --sort name=desc nginx
TAG                           DIGEST                                                                     STATUS    LAST UPDATE      LAST PUSHED    LAST PULLED       SIZE       OS/ARCH
nginx:stable-perl             sha256:8176da19df2afbc068b9be824d11ff1482b5bdc6cd5cf7268f7e64c9c617e1c7    active    2 days ago       2 days         22 minutes        506.1MB    linux/ppc64le,linux/mips64le,linux/arm/v5,linux/arm64/v8,linux/s390x,linux/arm/v7,linux/amd64,linux/386
nginx:stable-alpine-perl      sha256:0c85226446a083d92fbf432faee51d12933eafdcf13eb0b7d06fc465368ae908    active    7 weeks ago      7 weeks        34 minutes        124.8MB    linux/amd64,linux/arm/v6,linux/s390x,linux/386,linux/arm/v7,linux/arm64/v8,linux/ppc64le
nginx:stable-alpine           sha256:da3716611fb965f3fda1f3281882baeb2760ca8bb7317f1d22ed45e75570827b    active    7 weeks ago      7 weeks        7 minutes         64.99MB    linux/amd64,linux/arm/v7,linux/arm64/v8,linux/arm/v6,linux/s390x,linux/ppc64le,linux/386

(中略)

100/325 listed, use --all flag to show all

hub-tool tag inspect コマンドは,v0.3.0 でプラットフォームを指定できるようになったり,出力結果も変更されているため,最新バージョンで使う方が良さそう.CLI でイメージの詳細情報を取得できるのは便利!

$ hub-tool tag inspect nginx

hub-tool token コマンド 🧪

hub-tool token コマンドを使うと,Docker Hub のアクセストークンを管理できる.アクセストークンを作ったり,一覧を取得したり,削除することもできる.

$ hub-tool token create --description sandbox1
Personal Access Token successfully created!
(中略)

$ hub-tool token create --description sandbox2
Personal Access Token successfully created!
(中略)

$ hub-tool token ls
DESCRIPTION    UUID                                    LAST USED    CREATED       ACTIVE
sandbox2       11111111-1111-1111-1111-111111111111    Never        20 seconds    true
sandbox1       22222222-2222-2222-2222-222222222222    Never        40 seconds    true

hub-tool version コマンド 🧪

準備 1 で紹介したため割愛する.

まとめ

「Docker Hub CLI Tool(hub-tool コマンド)」を使うと,Docker Hub の情報取得を CLI で行えるようになる.特に hub-tool tag ls コマンドは便利だと思う!Docker Blog の記事に載っている通り,あくまで「実験用」としてリリースされているとは言え,Docker Desktop にデフォルトで同梱されているし,使ってみてはいかがでしょうか!