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

コンテナレジストリの利用

Docker及びOCIイメージを、パッケージの名前空間https://ghcr.ioを使用するコンテナレジストリに保存して管理できます。

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


GitHub Packagesは、レガシーのリポジトリごとのプランを使っているアカウントが所有しているプライベートリポジトリでは利用できません。 また、レガシーのリポジトリごとのプランを使っているアカウントは、リポジトリごとに課金されるため、コンテナレジストリにはアクセスできません。 詳しい情報については「[GitHubの製品](/articles/github-s-products)」を参照してください。

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

Dockerレジストリとコンテナレジストリとの比較:

  • コンテナレジストリ(https://ghcr.io)は、コンテナに対して改善されたパフォーマンスを提供し、将来的にはDockerレジストリを置き換えます。
  • Dockerイメージとワークフローは、Dockerレジストリ(docker.pkg.github.com)からコンテナレジストリ(https://ghcr.io)へ、詳細な権限、コンテナストレージの最適化などのために移行できます。 詳しい情報については「Dockerレジストリからコンテナレジストリへの移行」を参照してください。

コンテナレジストリサポートについて

コンテナイメージをプッシュ及びプルするためには、Organizationの管理者もしくは個人アカウントのオーナーは、コンテナレジストリを有効化しなければなりません。 詳しい情報については「コンテナレジストリでの改善されたコンテナサポートの有効化」を参照してください。

Dockerイメージをインストールあるいは公開する際に、コンテナレジストリはWindowsイメージのような外部レイヤーをサポートします。

現在のところ、コンテナレジストリ では以下のコンテナフォーマットをサポートしています。

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

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

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

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

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

GITHUB_TOKENに関する詳しい情報については「ワークフロー中の認証」を参照してください。

ベータの期間にアクションでコンテナレジストリを使いたい場合は、「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にあるコンテナレジストリサービスにサインインしてください。

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

コンテナイメージをプッシュする

以下の例では、IMAGE-NAME の最新バージョンをプッシュします。

$ docker push ghcr.io/OWNER/IMAGE_NAME:latest

以下の例では、イメージのバージョン 2.5 をプッシュします。

$ docker push ghcr.io/OWNER/IMAGE-NAME:2.5

パッケージを最初に公開する際のデフォルトの可視性はプライベートです。 可視性を変更したりアクセス権限を設定するには、「パッケージのアクセス制御と可視性の設定」を参照してください。

コンテナイメージをプルする

ダイジェストによるプル

常に同一のイメージを使用するため、digest SHA 値でプルするコンテナイメージのバージョンを指定できます。

  1. docker inspect または docker pull を使用してダイジェスト SHA 値を調べ、その SHA 値を Digest: の後にコピーします。

    $ docker inspect ghcr.io/OWNER/IMAGE_NAME
  2. 必要に応じてローカルでイメージを削除します。

    $ docker rmi  ghcr.io/OWNER/IMAGE_NAME:latest
  3. イメージ名の後に @YOUR_SHA_VALUE を付けてコンテナイメージをプルします。

    $ docker pull ghcr.io/OWNER/IMAGE_NAME@sha256:82jf9a84u29hiasldj289498uhois8498hjs29hkuhs

名前によるプル

$ docker pull ghcr.io/OWNER/IMAGE_NAME

名前とバージョンによるプル

名前と 1.14.1 バージョンタグにより Docker CLI でイメージをプルする例を以下に示します。

$ docker pull ghcr.io/OWNER/IMAGE_NAME:1.14.1
  > 5e35bd43cf78: Pull complete
  > 0c48c2209aab: Pull complete
  > fd45dd1aad5a: Pull complete
  > db6eb50c2d36: Pull complete
  > Digest: sha256:ae3b135f133155b3824d8b1f62959ff8a72e9cf9e884d88db7895d8544010d8e
  > Status: Downloaded newer image for ghcr.io/orgname/image-name/release:1.14.1
  > ghcr.io/orgname/image-name/release:1.14.1

名前と最新バージョンによるプル

$ docker pull ghcr.io/OWNER/IMAGE_NAME:latest
  > latest: Pulling from user/image-name
  > Digest: sha256:b3d3e366b55f9a54599220198b3db5da8f53592acbbb7dc7e4e9878762fc5344
  > Status: Downloaded newer image for ghcr.io/user/image-name:latest
  > ghcr.io/user/image-name:latest

コンテナイメージを構築する

以下の例では hello_docker イメージを構築します。

$ docker build -t hello_docker .

コンテナイメージにタグ付けする

  1. タグ付けする Docker イメージの ID を調べます。

    $ docker images
    > REPOSITORY                                            TAG                 IMAGE ID            CREATED             SIZE
    > ghcr.io/my-org/hello_docker         latest              38f737a91f39        47 hours ago        91.7MB
    > ghcr.io/my-username/hello_docker    latest              38f737a91f39        47 hours ago        91.7MB
    > hello-world                                           latest              fce289e99eb9        16 months ago       1.84kB
  2. イメージ ID を使用して、Docker イメージを任意のイメージ名とホスティング先でタグ付けします。

    $ docker tag 38f737a91f39 ghcr.io/OWNER/NEW_IMAGE_NAME:latest

このドキュメントは役立ちましたか? プライバシーポリシー

これらのドキュメントを素晴らしいものにするのを手伝ってください!

GitHubのすべてのドキュメントはオープンソースです。間違っていたり、はっきりしないところがありましたか?Pull Requestをお送りください。

コントリビューションを行う

OR, コントリビューションの方法を学んでください。

問題がまだ解決していませんか?

GitHubコミュニティで質問する サポートへの連絡