何をするか?
Docker イメージを作成するための Dockerfile
を GitHub のリポジトリで管理しているとします。
ここでは、GitHub Actions のワークフローを作成して、GitHub リポジトリにコードを push したときに次のような処理が自動で実行されるようにします。
Dockerfile
を使ってイメージをビルド- Docker Hub にイメージを push
前提条件として、Docker Hub のアカウントは作成済みとします。
Dockerfile の準備
GitHub のリポジトリを作成して、ルートディレクトリに次のような Dockerfile
をコミット&プッシュしておきます。
上記のサンプルコードは、軽量の Alpine Linux で Hello World と出力するだけの Dockerfile
ですが、もちろん好きなように記述していただいて構いません。
GitHub Actions の Secrets 情報を登録
GitHub Actions から Docker Hub にイメージをプッシュできるようにするため、GitHub リポジトリの Secrets 情報として、Docker Hub のユーザー名およびアクセストークンを登録しておきます。
Docker Hub のアクセストークンは次のように発行できます。
- Docker Hub にサインイン
- 右上のユーザー名をクリックして、
Account Settings
を選択 Security
→New Access Token
と選択して、トークンの説明文を入力Access Token description
: Deploy hello world など適当に入力Access permissions
: 少なくとも Read, Write を付ける
Generate
ボタンを押して生成
これで、次のような感じのアクセストークンが発行されるので、どこかにコピーしておきます(後から確認することはできません)。
dckr_pat_Wy1rW3PCchFgwW2dtES8x8C4AGo
アクセストークンを用意できたら、GitHub Actions の Secrets に登録します。
- 対象の GitHub リポジトリのページを開く
Settings
タブ →Secrets
→Actions
とたどるNew repository secret
ボタンを押して、次のように Secrets を追加するDOCKERHUB_USERNAME
: Docker Hub のユーザー名を設定DOCKERHUB_TOKEN
: Docker Hub のアクセストークンを設定
ワークフローの作成
Docker イメージをビルドして、Docker Hub に push するためのワークフローを作成します。
各アクションの説明
- name: Log in to Docker Hub
uses: docker/login-action@v2.0.0
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
docker/login-action アクション を使って、Docker Hub へサインインします。 ちなみに、このアクションで GitHub Container Registory へのサインインもできます。
- name: Build and push
uses: docker/build-push-action@v3
with:
context: .
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/hello:latest
docker/build-push-action アクション を使って、Docker イメージのビルドと、Docker Hub への push を行います。
context: .
というプロパティは、カレントディレクトリの Dockerfile
を使ってイメージをビルドすることを示しています。
tags
プロパティの値はイメージの識別子(タグ)になるものなので、適切な名前を付けるようにしてください。
上記のようなワークフロー・ファイルを作成したら、GitHub にコミット&プッシュします。 すると、自動的に GitHub Actions が起動して、Docker イメージのビルドと、Docker Hub への push が実行されます。 簡単なイメージなので、わずか数秒でデプロイまで完了します。 GitHub Actions の実行が完了したら、Docker Hub にサインインして、イメージがデプロイされていることを確認してください。
イメージを使ってみる
Docker Hub へのイメージのデプロイが終わったら、docker container run
でイメージを取得&実行できるかを確認します。
イメージ名は適切なものに変更して実行してください。
$ docker container run --rm maku77/hello
...(イメージがダンロードされる)...
Hello World
うまくいきました!
(応用)イメージのタグを自動で付加する
上記の例では、イメージのタグを次のように指定していました。
tags: ${{ secrets.DOCKERHUB_USERNAME }}/hello:latest
docker/metadata-action アクション を使うと、GitHub リポジトリで付けたタグ名などを利用して、Docker イメージのタグをそれっぽく自動で付加してくれます。
例えば、main
ブランチへプッシュしたときにはイメージのタグにも main
を付けるとか、GitHub で v1.0.0
タグを付けた場合はイメージのタグにも v1.0.0
を付けるといったことが可能です。
ワークフローの具体的な記述方法は、上記公式サイトを参照してください。