Skip to main content

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

Docker イメージと OCI イメージは、パッケージの名前空間 https://ghcr.io が使われている Container registry に保存して管理できます。

GitHub Packages は、GitHub Free、GitHub Pro、Organization の GitHub Free、GitHub Team、GitHub Enterprise Cloud、GitHub Enterprise Server 3.0 以降、GitHub AE で利用できます。
GitHub Packagesは、レガシーのリポジトリごとのプランを使っているアカウントが所有しているプライベートリポジトリでは利用できません。 また、レガシーのリポジトリごとのプランを使っているアカウントは、リポジトリごとに課金される Container registry にはアクセスできません。 詳細については、「GitHub's products」を参照してください。

Container registry について

Container registry は、Organization または個人アカウント内にコンテナー イメージを格納し、イメージをリポジトリに関連付けることができます。 権限をリポジトリから継承するか、リポジトリとは別に細かい権限を設定するかを選ぶことができます。 パブリック コンテナー イメージに匿名でアクセスすることもできます。

Container registryサポートについて

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

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

Container registryでの認証

GitHub Actions ワークフロー内で Container registry (ghcr.io) の認証を受けるには、最高のセキュリティとエクスペリエンスのために GITHUB_TOKEN を使用します。 お使いのワークフローで個人アクセス トークン (PAT) を使用してレジストリの認証を受ける場合、GITHUB_TOKEN を使用するようにワークフローを更新することを強くお勧めします。

個人用アクセス トークンでレジストリの認証を行うワークフローの更新についてのガイダンスは、「PAT を使ってレジストリにアクセスするワークフローをアップグレードする」をご覧ください。

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

アクションでレジストリを使用するときのベスト プラクティスについて詳しくは「GitHub Actions のセキュリティ強化」をご覧ください。

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

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

    • read:packages スコープを選択すると、コンテナー イメージがダウンロードされ、そのメタデータが読み取られます。
    • write:packages スコープを選択すると、コンテナー イメージがダウンロードされ、アップロードされ、そのメタデータが読み書きされます。
    • delete:packages スコープを選択すると、コンテナー イメージが削除されます。

    詳細については、コマンド ライン用の個人アクセス トークンの使用に関するページを参照してください。

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

    $ export CR_PAT=YOUR_TOKEN
  3. コンテナーの種類に CLI を使用し、ghcr.io で Container registry サービスにサインインします。

    $ 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