GitHub Actionsを使ってNode.jsのDockerイメージをDocker Hubレジストリに公開する方法
2021年8月9日
0 分で読めます前回の記事では、GitHub Actionsを使ってNode.jsのDockerイメージをGitHub Packagesレジストリに公開する方法を、手順に沿って解説しました。今回は、ビルドしたDockerイメージをパブリックDocker Hubレジストリに公開する方法に焦点を当てます。
これがなぜ便利なのか、と思うかもしれません。Dockerのコマンドラインアプリケーションdockerでは、デフォルトのレジストリがdocker.ioに設定されており、Docker Hubレジストリを指しています。そのため、次のように<user>/<repository>形式でイメージを取得でき、開発者にとって使いやすい環境になります。たとえば、Snyk CLIをDockerイメージとして使う場合は、次のようにします。
この記事では、Dockerイメージを新たにビルドして公開するワークフローの設定方法を、手順に沿って説明します。このワークフローは、前回紹介したGitHub Packagesレジストリ向けのワークフローと並行して実行できます。
前回の記事と同様、この記事では、CLIからDockerコンテナを管理するオープンソースのNode.jsコマンドラインツールDocklyを取り上げ、DockerイメージをDocker Hubにプッシュする方法を紹介します。DocklyのGitHubリポジトリで最終的なワークフローを確認できます。
GitHub Actionsワークフローを作成する
新しいワークフローを追加するには、.github/workflows/ディレクトリに新しいファイルを作成するか、GitHubでオープンソースリポジトリを開き、ActionsタブをクリックしてからNew Workflowをクリックし、新しいワークフローを作成します。

Docker Hubへの公開に使うワークフローファイルに、docker-publish-to-dockerhub.ymlなどのファイル名を付けます。
GitHubのUIから作成する場合、ワークフローファイルに内容があらかじめ入力されていることがあります。その場合は削除して、以下を追加してください。
それぞれの詳細は前回の記事で説明していますが、ここで要点を振り返ります。
このDocker Hubワークフローは、リポジトリのmainブランチへのプッシュ、タグのリリース、プルリクエストのたびに実行されます。
グローバル環境変数では、
REGISTRYをdocker.ioに設定します。これにより、イメージはDocker Hubにプッシュされ、そこから利用できるようになります。また、IMAGE_NAMEにはGitHubのユーザー名とリポジトリ名を設定します。Docker Hubのユーザー名が異なる場合は、この値を変更してください。
次にジョブを定義し、Dockerイメージをビルドしてから公開するまでの処理を設定します。
Docker Hubにログインし、Dockerイメージをビルドして公開する
次に、以下の操作を行います。
Docker Hubにログインします。そのためにDocker Hubでトークンを作成し、GitHubリポジトリの設定でリポジトリシークレットとして登録する必要があります。
ビルドするDockerイメージのメタデータを抽出し、イメージのビルドプロセスで利用できるようにします。
ビルドしたDockerイメージをDocker Hubにプッシュします。
これらの設定を次のコードスニペットで行います。前の手順で作成したワークフローの内容に追加してください。
ワークフローファイルを適用してmainブランチにマージすると、ビルドが成功し、新しいDockerイメージがDocker Hubレジストリにプッシュされるはずです。

既知の注意点として、現時点では、イメージの公開先であるDocker Hubリポジトリに、適切な説明やREADMEの内容が自動的に反映されません。公式のGitHub Actiondocker/build-and-pushでは、この機能が提供されていないためです。
この機能を利用したい場合、メンテナーはマーケットプレイスにあるGitHub ActionDocker Hub Descriptionを推奨しており、ドキュメントに採用可能な使用例も紹介しています。
Docker HubレジストリからDockerイメージを取得する
Docker Hubから新しいDockerイメージを取得するには、使い慣れたdocker pull コマンドを実行するだけです。たとえば、次のようにします。
脆弱なDockerイメージをプッシュしていませんか?
ここで終わりではありません。Snykを使えば、Dockerイメージの脆弱性を検出、監視し、修正することもできます。CLIを使う方法や、Docker HubからDockerイメージを直接インポートしてセキュリティ上の脆弱性を監視する方法など、ニーズに合ったワークフローを選べます。
同僚のEric Smallingが、知識を深めたい方に向けて、開発者主導のワークフロー – Dockerfileとイメージのスキャン、優先順位付け、修正に関するベストプラクティスガイドを詳しく執筆しています。最後に、GitHub Actionsのエコシステムで利用できるSnyk GitHub Actionを使えば、オープンソースライブラリやコンテナイメージのセキュリティ上の脆弱性をスキャンできます。
さらに詳しく
Dockerイメージのビルドに関するベストプラクティスをさらに詳しく知りたい方は、以下をご覧ください。
前回の記事をまだ読んでおらず、DockerイメージをGitHub Packagesに公開したい場合は、GitHub Actionsを使ってDockerイメージをGitHub Packagesレジストリに公開する方法をご覧ください。
開発者ファーストのコンテナセキュリティ
Snykは、コンテナイメージとKubernetesワークロードの脆弱性を検出し、自動的に修正します。