ドキュメントには頻繁に更新が加えられ、その都度公開されています。本ページの翻訳はまだ未完成な部分があることをご了承ください。最新の情報については、英語のドキュメンテーションをご参照ください。本ページの翻訳に問題がある場合はこちらまでご連絡ください。

Docker イメージを GitHub Container Registry に移行する

Docker イメージを保存するため GitHub パッケージ Docker レジストリを使っている場合には、新しい container registry に移行できます。

GitHub PackagesはGitHub Free、GitHub Pro、GitHub FreeのOrganization、GitHub Team、GitHub Enterprise Cloud、GitHub Enterprise Server 2.22、GitHub One、GitHub AEで利用できます。


GitHub Packagesは、レガシーのリポジトリごとのプランを使っているアカウントが所有しているプライベートリポジトリでは利用できません。 GitHub PackagesはGitHub Free、GitHub Pro、GitHub FreeのOrganization、GitHub Team、GitHub Enterprise Cloud、GitHub Oneで利用できます。 詳しい情報については「[GitHubの製品](/articles/github-s-products)」を参照してください。

ここには以下の内容があります:

GitHub Container Registry と Docker パッケージレジストリとの主な違い

注釈: GitHub Container Registry は現在パブリックベータであり、変更されることがあります。 ベータ期間中は、ストレージおよび帯域幅の制限はありません。 GitHub Container Registryを使用するには、機能プレビューを有効化しなければなりません。 詳しい情報については「GitHub Container Registryについて」及び「改善されたコンテナサポートの有効化」を参照してください。

GitHub Container Registry は既存の Packages Docker レジストリに取って代わるもので、コンテナ固有のニーズのいくつかをサポートできるよう最適化されています。

コンテナレジストリを使用すると、以下が行えます。

  • コンテナイメージを、リポジトリではなくOrganization及びユーザアカウント内に保存する。
  • リポジトリの権限と可視性とは独立に、詳細な権限と可視性を設定する。
  • 匿名でパブリックなコンテナイメージにアクセスする。

詳しい情報については「GitHub Container Registryについて」を参照してください。

支払いの変更

GitHub Container Registryがベータの間は、新しいcontainer registryと既存のGitHub Packages Dockerレジストリはどちらも無料です。 GitHub Packages Dockerレジストリに関する詳しい情報については、「GitHub Packagesで使用するためのDockerの設定」を参照してください。

ベータの後は、他のGitHub Packagesレジストリの利用と同じ支払いとストレージのレートがコンテナレジストリに適用されます。 詳しい情報については「GitHub Packagesの支払いについて」を参照してください。

ドメインの変更

container registry のドメインは ghcr.io です。

レジストリURLの例
GitHub Packages Docker レジストリdocker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME
GitHub Container Registryghcr.io/OWNER/IMAGE_NAME

コンテナレジストリで認証する

ノート: GitHub Container Registryを使う前に、アカウントでこの機能を有効化しなければなりません。 詳しい情報については、「改善されたコンテナサポートを有効化する」を参照してください。

container registry は、 ベース URL ghcr.io で認証する必要があります。 container registry を使用するために、新しいアクセストークンの作成をお勧めします。

PATはアカウントに対する広汎なアクセスを許可できます。 container registryでの認証のためのPATを作成する際には、必要なread:packageswrite:packagesdelete:packagesスコープだけを選択すべきです。

GitHub Actionsワークフロー内でGitHub Container Registryの認証を受けるには、最善のセキュリティと体験のためにGITHUB_TOKENを使ってください。

個人アクセストークンでghcr.ioの認証を受けるワークフローの更新に関するガイダンスとしては、「ghcr.ioにアクセスするワークフローのアップグレード」を参照してください。

GitHub Container Registryは、ワークフロー内での容易でセキュアな認証のためにGITHUB_TOKENをサポートするようになりました。 ワークフローがghcr.ioでの認証のために個人アクセストークン(PAT)を使っているなら、GITHUB_TOKENを使うようにワークフローを更新することを強くおすすめします。

GITHUB_TOKENに関する詳しい情報については「暗号化されたシークレット」及び「ワークフロー内での認証」を参照してください。

ベータの期間にアクションでcontainer registryを使いたい場合は、「GitHub Actionsのセキュリティ強化」にあるPATのセキュリティベストプラクティスに従ってください。

  1. 実行したいタスクに対して適切なスコープを持つ新しい個人アクセストークン(PAT)を作成してください。 OrganizationがSSOを必須としている場合は、新しいトークンでSSOを有効化しなければなりません。

    ノート: デフォルトでは、ユーザインターフェース内で個人アクセストークン(PAT)に対してwrite:packagesスコープを選択すると、repoスコープも選択されます。 repoは不要に広いアクセス権を提供するので、特にGitHub Actionsのワークフローでの利用は避けることをおすすめします。 詳しい情報については「GitHub Actionsのためのセキュリティ強化」を参照してください。 回避策として、以下のURLでユーザインターフェース内でPATにwrite:packagesスコープだけを選択することができます。 https://github.com/settings/tokens/new?scopes=write:packages

    • コンテナイメージをダウンロードし、そのメタデータを読むためにはread:packagesスコープを選択してください。
    • コンテナイメージのダウンロードとアップロード、及びそのメタデータの読み書きのためには、write:packagesスコープを選択してください。
    • コンテナイメージを削除するにはdelete:packagesスコープを選択してください。

    詳しい情報についてはコマンドラインのための個人のアクセストークンの作成を参照してください。

  2. PATを保存してください。 PATは環境変数として保存することをおすすめします。

    $ export CR_PAT=YOUR_TOKEN
  3. コンテナタイプにあったCLIを利用して、 ghcr.ioにあるGitHub Container Registryサービスにサインインしてください。

    $ echo $CR_PAT | docker login ghcr.io -u USERNAME --password-stdin
      > Login Succeeded

Docker CLI を使用して Docker イメージを移行する

GitHub Packages Docker レジストリでホストしている Docker イメージを移動するには、イメージを container registry に再公開する必要があります。 既存の Docker イメージを再公開するには、ローカルマシンでコマンドラインを使うことをお勧めします。

  1. 少なくとも read:packages スコープのある一時的な PAT (個人アクセストークン) を使用して、Docker レジストリにサインインします。 この PAT は、Docker レジストリにサインインしてイメージをプルダウンするためにのみ使用され、その後は削除して構いません。

    $ echo $READ_PACKAGES_TOKEN | docker login docker.pkg.github.com -u USERNAME --password-stdin
  2. 移行したいイメージをプルダウンします。OWNER はリポジトリを所有しているユーザまたは Organization アカウントの名前に、REPOSITORY はプロジェクトを含むリポジトリの名前に、IMAGE_NAME はパッケージまたはイメージの名前に、VERSION はインストールするイメージのタグにそれぞれ置き換えてください。 たとえば、docker pull docker.pkg.github.com/octo-org/octoshift/octoshift:latest は octo-org という Organization の octoshift/octoshift イメージの、最新のタグをプルします。

    $ docker pull docker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME:VERSION
  3. 新しいドメインと新しいイメージ名でイメージにタグ付けし直します。 詳しい情報については、Dockerのドキュメンテーションの「Docker tag」を参照してください。 先ほどのステップで用いた URL と同じものを SOURCE URL とします。 TARGET_OWNER はコンテナイメージをの移行先であるユーザまたは Organization に、TARGET_IMAGE_NAME は新しい container registry イメージ名に置き換えます。

    $ docker tag docker.pkg.github.com/SOURCE_OWNER/SOURCE_REPOSITORY/SOURCE_IMAGE_NAME:VERSION ghcr.io/TARGET_OWNER/TARGET_IMAGE_NAME:VERSION
  4. 新しい

container registry. read:packages スコープと write:packages スコープに限定した新しい PAT の作成をお勧めします。repo スコープはもはや不要であり、以前の PAT は write:packages スコープを持っていない場合があるからです。

$ echo $CR_PAT | docker login ghcr.io -u USERNAME --password-stdin
  1. タグ付けし直したイメージを container registry にプッシュします。
    $ docker push ghcr.io/OWNER/IMAGE_NAME:VERSION

GitHub Actions ワークフローを更新する

ノート: GitHub Container Registryを使う前に、アカウントでこの機能を有効化しなければなりません。 詳しい情報については、「改善されたコンテナサポートを有効化する」を参照してください。

GitHub Packages Docker レジストリから Docker イメージを使用する GitHub Actions ワークフローがある場合、ワークフローを container registry に更新するといいでしょう。そうすればパブリックコンテナのイメージへの匿名アクセスが可能になり、きめ細かいアクセス権限を設定でき、コンテナに対するストレージと帯域幅が向上します。

  1. ghcr.io にある新しい container registry に Docker イメージを移行します。 例については、「Docker CLI を使用して Docker イメージを移行する」を参照してください。

  2. GitHub Actions ワークフローファイルで、パッケージ URL を https://docker.pkg.github.com から ghcr.io に更新します。

  3. 新しい container registry 認証個人アクセストークン (PAT) を GitHub Actions シークレットとして追加します。 GitHub Container Registry は PAT において GITHUB_TOKEN の使用をサポートしていないので、CR_PAT などの別のカスタム変数を使用する必要があります。 詳しい情報については「暗号化されたシークレットの作成と保存」を参照してください。

  4. GitHub Actions ワークフローファイルにおいて、Docker レジストリ PAT (${{ secrets.GITHUB_TOKEN }} をコンテナレジストリ container registry PAT の新しい変数 (たとえば ${{ secrets.CR_PAT }}) に置き換えて、認証 PAT を更新します。

更新したワークフローの例

ワークフローの一部が Docker レジストリにホストされた Docker イメージにアクセスした場合は、次のようになります。

echo ${{ secrets.GITHUB_TOKEN }} | docker login https://docker.pkg.github.com -u $GITHUB_ACTOR --password-stdin
docker pull docker.pkg.github.com/github/octoshift/octoshift:latest
docker build . --tag docker.pkg.github.com/github/octoshift/octoshift:$GITHUB_SHA --cache-from docker.pkg.github.com/github/octoshift/octoshift:latest
docker push docker.pkg.github.com/github/octoshift/octoshift:$GITHUB_SHA

そして、ワークフローを新しい container registry URL と PAT で次のように更新する必要があります。

# new login with new container registry url and PAT
echo ${{ secrets.CR_PAT }} | docker login ghcr.io -u $GITHUB_ACTOR --password-stdin
# new container registry urls added
docker pull ghcr.io/github/octoshift:latest
docker build . --tag ghcr.io/github/octoshift:$GITHUB_SHA --cache-from ghcr.io/github/octoshift:latest
docker push ghcr.io/github/octoshift:$GITHUB_SHA

Did this doc help you?

Privacy policy

Help us make these docs great!

All GitHub docs are open source. See something that's wrong or unclear? Submit a pull request.

Make a contribution

OR, learn how to contribute.