Githubリポジトリにコミットしたら、自動的に”Docker Hub”でDockerイメージを作成させる

2023-05-08Bash,Docker

はじめに

僕は Docker Hub 上で Docker イメージをいくつも公開しています。

  • genzouw/mkr : mkr - Command Line Tool For Mackerel written in Go.
  • genzouw/gpg : Docker image that give gpg command.
  • genzouw/td : This is a Docker image wrapping the command line client tool td of" Treasure Data ". Ruby installation, Gem installation, authentication information, etc. can all be managed by Docker container.
  • genzouw/jq : This is Dockerfile repository that wrap jq command.
  • genzouw/trim-text : This Docker image is intended to provide a UI that integrates command line text cut operations.
  • genzouw/ansize : Convert image to text ( ascii art ) .

いずれも自分の公開 Github リポジトリコミットしたタイミングで、 "Docker Hub"でイメージを自動的に作成するようにしています。

この設定方法を紹介します。

検証環境

$ uname -moi
x86_64 MacBookPro16,1 Darwin

$ bash -version | head -n 1
GNU bash, version 5.0.18(1)-release (x86_64-apple-darwin19.5.0)

前提

1. Docker Hub のアカウントをもっていること

既に "Docker Hub" でアカウントを作成していることを前提としています。

もしまだアカウント作成されていない場合には、以下のサイトトップページの裏アカウントを作成できます。

作成しておきましょう。

2. Github のアカウントを持っていること

今回は Github のリポジトリを連携するため、Github のアカウントを持っていることを前提としています。

Docker イメージ自動作業の設定方法

1. "Docker Hub" にログインする

"Docker Hub" にログインします。

ログイン後のトップページ右上に 「Create Repository」 と言うボタンがあるので、これをクリックします。

2. Docker イメージ名を入力する

今回作成したい Docker イメージ名を入力します。

この後に指定する連携対象の 公開 Github リポジトリ名 と同じ値を入力するのが分かりやすいと思います。

ここでは、 後ほど指定します genzouw/hey という Github リポジトリをもとに Docker イメージを作成する想定なので、同じ名前を入力しておきました。

入力したら、一番下にある Github アイコンをクリックして連携設定に進みましょう

3. 連携対象の "公開 Github リポジトリ名" を選択する

Github アイコンをクリックして Github との連携が完了すれば、先程のページで Github リポジトリが選択できるようになっているはずです。

genzouw/hey という Github リポジトリ を連携させるべく、選択しました。

4. 最期に "Docker Hub" でイメージビルドをさせるためのトリガーを設定する

連携した Github リポジトリにどんな操作が行われた時にイメージに入ると実行させるかを設定します。

ここでは以下の 2 つの条件設定しています。
いずれかの条件が満たされた場合に Docker イメージのビルド処理が実行されます。

  • master ブランチに対して Push されたタイミング → Docker のタグは latest というタグで作成
  • vX.Y.Z のようなバージョンタグが Push されたタイミング → Docker のタグは vX.Y.Z というタグで作成

設定が終了したら、 「Create & Build」 ボタンをクリックして終了です。

5. 正しく設定されたかを確認

正しく設定が行われていれば以下のようなページが表示されるはずです。

設定された情報が正しく反映されていることがわかります。

作成されたイメージを使ってみる

ことの発端はベンチマークのために hey コマンドを使いたかったと言うことにあります。

brew でインストールすればよかったのですが、Mac 以外の環境で利用することも想定されたために Docker イメージを作成しました。

正しくビルドされていれば Mac 環境でもどこでも利用できるはずです。
ヘルプを引いてみます。

$ docker run -it --rm genzouw/hey --help
Unable to find image 'genzouw/hey:latest' locally
latest: Pulling from genzouw/hey
b168ae6de529: Pull complete
8020684f1c70: Pull complete
762d362e9268: Pull complete
0bf0f9014622: Pull complete
Digest: sha256:c766841ea5896ee6b045c6f268d661e81e86878bdfce55bdecba5987e3d55524
Status: Downloaded newer image for genzouw/hey:latest
Usage: hey [options...] <url>

Options:
  -n  Number of requests to run. Default is 200.
  -c  Number of workers to run concurrently. Total number of requests cannot
      be smaller than the concurrency level. Default is 50.
  -q  Rate limit, in queries per second (QPS) per worker. Default is no rate limit.
  -z  Duration of application to send requests. When duration is reached,
      application stops and exits. If duration is specified, n is ignored.
      Examples: -z 10s -z 3m.
  -o  Output type. If none provided, a summary is printed.
      "csv" is the only supported alternative. Dumps the response
      metrics in comma-separated values format.

  -m  HTTP method, one of GET, POST, PUT, DELETE, HEAD, OPTIONS.
  -H  Custom HTTP header. You can specify as many as needed by repeating the flag.
      For example, -H "Accept: text/html" -H "Content-Type: application/xml" .
  -t  Timeout for each request in seconds. Default is 20, use 0 for infinite.
  -A  HTTP Accept header.
  -d  HTTP request body.
  -D  HTTP request body from file. For example, /home/user/file.txt or ./file.txt.
  -T  Content-type, defaults to "text/html".
  -a  Basic authentication, username:password.
  -x  HTTP Proxy address as host:port.
  -h2 Enable HTTP/2.

  -host HTTP Host header.

  -disable-compression  Disable compression.
  -disable-keepalive    Disable keep-alive, prevents re-use of TCP
                        connections between different HTTP requests.
  -disable-redirects    Disable following of HTTP redirects
  -cpus                 Number of used cpu cores.
                        (default for current machine is 6 cores)

うまく動作しました。

ひとこと

ということで、Go で作成されたコマンドラインのベンチマークツール heyDocker イメージとして公開しました

よかったらお使いくださいませ。

2023-05-08Bash,Docker