Skip to content

レジストリ認証

nerdctl は、イメージ レジストリでの認証に ${DOCKER_CONFIG}/config.json を使用します。

$DOCKER_CONFIG の既定値は $HOME/.docker です。

安全でないレジストリの使用

HTTPSを指定したクライアントに対してHTTPへのリダイレクトをサーバが指定する場合や、レジストリに TLS を設定できない場合は、--insecure-registry フラグを試してください。

$ nerdctl --insecure-registry run --rm 192.168.12.34:5000/foo

証明書の指定

⚡ 必要条件 nerdctl >= 0.16

~/.config/containerd/certs.d/<HOST:PORT>/hosts.toml (ルートフル の場合は/etc/containerd/certs.d/...) を作成して、CA 証明書を指定します。

# An example of ~/.config/containerd/certs.d/192.168.12.34:5000/hosts.toml
# (The path is "/etc/containerd/certs.d/192.168.12.34:5000/hosts.toml" for rootful)

server = "https://192.168.12.34:5000"
[host."https://192.168.12.34:5000"]
  ca = "/path/to/ca.crt"

hosts.toml の構文については、 https://github.com/containerd/containerd/blob/main/docs/hosts.md を参照してください。

Docker スタイルのディレクトリもサポートされています。 パスは、ルートレスの場合は~/.config/docker/certs.d、ルートフルの場合は/etc/docker/certs.d です。

ルートレスnerdctlから127.0.0.1にアクセスする

現在、ルートレス nerdctl は 127.0.0.1 からイメージをプルできません。 プル操作は RootlessKit のネットワーク名前空間で行われます。

回避策については、https://github.com/containerd/nerdctl/issues/86 を参照してください。


管理対象レジストリー・サービスの使用

Amazon Elastic Container Registry (ECR)

https://aws.amazon.com/ecr も参照してください。

ログイン

$ aws ecr get-login-password --region <REGION> | nerdctl login --username AWS --password-stdin <AWS_ACCOUNT_ID>.dkr.ecr.<REGION>.amazonaws.com
Login Succeeded
別の方法: docker-credential-ecr-login この方法はより安全ですが、外部依存関係が必要です。

https://github.com/awslabs/amazon-ecr-credential-helper から `docker-credential-ecr-login` をインストールし、次のファイルを作成します。 `~/.docker/config.json`:

{
  "credHelpers": {
    "public.ecr.aws": "ecr-login",
    "<AWS_ACCOUNT_ID>.dkr.ecr.<REGION>.amazonaws.com": "ecr-login"
  }
}
`~/.aws/credentials`:
[default]
aws_access_key_id = ...
aws_secret_access_key = ...
> **注意**: VM (Lima、Colima、Rancher Desktop、WSL2 を含む) 内で nerdctl を実行している場合は、`docker-credential-ecr-login` をホストではなくゲスト内にインストールする必要があります。 > `~/.docker/config.json` と `~/.aws/credentials` のパスにも同じことが当てはまります。

リポジトリの作成

https://console.aws.amazon.com/ecr/home/ を使用してリポジトリを作成する必要があります。

イメージのプッシュ

$ nerdctl tag hello-world <AWS_ACCOUNT_ID>.dkr.ecr.<REGION>.amazonaws.com/<REPO>
$ nerdctl push <AWS_ACCOUNT_ID>.dkr.ecr.<REGION>.amazonaws.com/<REPO>

プッシュされたイメージは、前の手順で手動で作成したリポジトリに表示されます。

Azure Container Registry (ACR)

https://azure.microsoft.com/en-us/services/container-registry/#overview も参照してください

レジストリーの作成

You have to create a "Container registry" resource manually via the Azure portal.

ログイン

$ nerdctl login -u <USERNAME> <REGISTRY>.azurecr.io
Enter Password: ********[Enter]

Login Succeeded

The login credentials can be found as "Access keys" in the Azure portal. https://docs.microsoft.com/en-us/azure/container-registry/container-registry-authentication も参照してください。

注意:v0.16.1より前のnerdctlには、Enterキーを2回押す必要があるバグがありました。

リポジトリの作成

リポジトリを明示的に作成する必要はありません。

イメージのプッシュ

$ nerdctl tag hello-world <REGISTRY>.azurecr.io/hello-world
$ nerdctl push <REGISTRY>.azurecr.io/hello-world

プッシュされたイメージが Azure portal に表示されます。 Privateがデフォルトです。

Docker Hub

https://hub.docker.com/ も参照してください。

ログイン

$ nerdctl login -u <USERNAME>
Enter Password: ********[Enter]

Login Succeeded

注意:v0.16.1より前のnerdctlには、Enterキーを2回押す必要があるバグがありました。

リポジトリの作成

パブリック イメージの場合は、リポジトリを明示的に作成する必要はありません。

プライベートリポジトリを作成するには、https://hub.docker.com/repositories を参照してください。

イメージのプッシュ

$ nerdctl tag hello-world <USERNAME>/hello-world
$ nerdctl push <USERNAME>/hello-world

プッシュされたイメージは https://hub.docker.com/repositories に表示されます。 既定では Public です。

GitHub Container Registry (GHCR)

https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry も参照してください。

ログイン

$ nerdctl login ghcr.io -u <USERNAME>
Enter Password: ********[Enter]

Login Succeeded

<USERNAME>は GitHub のユーザー名ですが、小文字を使用してください。

ここで "Password" は、 read:packageswrite:packagesの権限をもったGitHub パーソナルアクセストークンです。

注意:v0.16.1より前のnerdctlには、Enterキーを2回押す必要があるバグがありました。

リポジトリの作成

リポジトリを明示的に作成する必要はありません。

イメージのプッシュ

$ nerdctl tag hello-world ghcr.io/<USERNAME>/hello-world
$ nerdctl push ghcr.io/<USERNAME>/hello-world

プッシュされたイメージは、GitHubのプロファイルの "Packages" タブで参照できるようになります。 Privateがデフォルトです。

GitLab Container Registry

https://docs.gitlab.com/ee/user/packages/container_registry/ も参照してください

ログイン

$ nerdctl login registry.gitlab.com -u <USERNAME>
Enter Password: ********[Enter]

Login Succeeded

<USERNAME>はGitLabのユーザー名です。

ここで "Password" は GitLab Personal access tokenGitLab Deploy tokenです。どちらのオプションでも、プル アクセスには最小read_registryスコープが必要であり、プッシュ アクセスには write_registry スコープと read_registry スコープの両方が必要です。

注意:v0.16.1より前のnerdctlには、Enterキーを2回押す必要があるバグがありました。

リポジトリの作成

GitLabのコンテナレジストリは、プロジェクトレベルで作成されます。GitLabのプロジェクトは、コンテナレジストリの操作を開始する前に、まず存在している必要があります。

イメージのプッシュ

この例では、myproject という名前の GitLab プロジェクトを作成しました。

$ nerdctl tag hello-world registry.gitlab.com/<USERNAME>/myproject/hello-world:latest
$ nerdctl push registry.gitlab.com/<USERNAME>/myproject/hello-world:latest

プッシュされたイメージは、GitLabの "Packages & Registries -> Container Registry" タブで参照できるようになります。

Google Artifact Registry (pkg.dev)

https://cloud.google.com/artifact-registry/docs/docker/quickstart も参照してください。

ログイン

GCPサービスアカウントを作成し、 Artifact Registry Reader ロールと Artifact Registry Writer ロールを割り当て、キーを JSON ファイルとしてダウンロードします。

次に、次のコマンドを実行します。

$ cat <GCP_SERVICE_ACCOUNT_KEY_JSON> | nerdctl login -u _json_key --password-stdin https://<REGION>-docker.pkg.dev
WARNING!パスワードは暗号化されずに /home/<USERNAME>/.docker/config.json に保存されます。
この警告を削除するように資格情報ヘルパーを構成します。https://docs.docker.com/engine/reference/commandline/login/#credentials-storeも参照してください。

Login Succeeded

https://cloud.google.com/artifact-registry/docs/docker/authentication も参照してください

別の方法: docker-credential-gcloud(gcloud auth configure-docker) この方法はより安全ですが、外部依存関係が必要です。

`gcloud auth configure-docker -docker.pkg.dev`を実行します。例

$ gcloud auth configure-docker asia-northeast1-docker.pkg.dev
Adding credentials for: asia-northeast1-docker.pkg.dev
After update, the following will be written to your Docker config file located at [/home/<USERNAME>/.docker/config.json]:
 {
  "credHelpers": {
    "asia-northeast1-docker.pkg.dev": "gcloud"
  }
}

Do you want to continue (Y/n)?y

Docker configuration file updated.
Google Cloud SDK(`gcloud`、`docker-credential-gcloud`)をインストールする必要があります(https://cloud.google.com/sdk/docs/quickstart をご覧ください)。 > **注意**: VM(Lima、Colima、Rancher Desktop、WSL2 など)内で nerdctl を実行している場合は、ホストではなくゲスト内に Google Cloud SDK をインストールする必要があります。

リポジトリの作成

https://console.cloud.google.com/artifacts を介してリポジトリを作成する必要があります。 リポジトリフォーマットとして "Docker" を選択してください。

イメージのプッシュ

$ nerdctl tag hello-world <REGION>-docker.pkg.dev/<GCP_PROJECT_ID>/<REPO>/hello-world
$ nerdctl push <REGION>-docker.pkg.dev/<GCP_PROJECT_ID>/<REPO>/hello-world

プッシュされたイメージは、前の手順で手動で作成したリポジトリに表示されます。

Google Container Registry(GCR)[サポート終了]

https://cloud.google.com/container-registry/docs/advanced-authentication も参照してください

ログイン

GCP Service Accountを作成し、Storage Object Admin ロールを許諾し、JSONでキーをダウンロードしてください。

次に、次のコマンドを実行します。

$ cat <GCP_SERVICE_ACCOUNT_KEY_JSON> | nerdctl login -u _json_key --password-stdin https://asia.gcr.io
WARNING!パスワードは暗号化されずに /home/<USERNAME>/.docker/config.json に保存されます。
この警告を削除するように資格情報ヘルパーを構成します。https://docs.docker.com/engine/reference/commandline/login/#credentials-storeも参照してください。

Login Succeeded

https://cloud.google.com/container-registry/docs/advanced-authentication も参照してください

別の方法: docker-credential-gcloud(gcloud auth configure-docker) この方法はより安全ですが、外部依存関係が必要です。

$ gcloud auth configure-docker
Adding credentials for all GCR repositories.
WARNING: A long list of credential helpers may cause delays running 'docker build'. レジストリ名を渡して、使用しているレジストリのみを構成することをお勧めします。
更新後、[/home/<USERNAME>/.docker/config.json] にある Docker 構成ファイルに以下が書き込まれます。
 {
  "credHelpers": {
    "gcr.io": "gcloud",
    "us.gcr.io": "gcloud",
    "eu.gcr.io": "gcloud",
    "asia.gcr.io": "gcloud",
    "staging-k8s.gcr.io": "gcloud",
    "marketplace.gcr.io": "gcloud"
  }
}

Do you want to continue (Y/n)?y

Docker configuration file updated.
Google Cloud SDK(`gcloud`、`docker-credential-gcloud`)をインストールする必要があります(https://cloud.google.com/sdk/docs/quickstart をご覧ください)。 > **注意**: VM(Lima、Colima、Rancher Desktop、WSL2 など)内で nerdctl を実行している場合は、ホストではなくゲスト内に Google Cloud SDK をインストールする必要があります。

リポジトリの作成

リポジトリを明示的に作成する必要はありません。

イメージのプッシュ

$ nerdctl tag hello-world asia.gcr.io/<GCP_PROJECT_ID>/hello-world
$ nerdctl push asia.gcr.io/<GCP_PROJECT_ID>/hello-world

プッシュされたイメージが https://console.cloud.google.com/gcr/ に表示されます。 既定ではプライベートです。

JFrog Artifactory(クラウド/オンプレミス)

https://www.jfrog.com/confluence/display/JFROG/Getting+Started+with+Artifactory+as+a+Docker+Registry も参照してください。

ログイン

$ nerdctl login <SERVER_NAME>.jfrog.io -u <USERNAME>
Enter Password: ********[Enter]

Login Succeeded

デフォルトのユーザー名:admin、パスワード:オンプレミスインストールの場合はpassword、クラウドインストールの場合は電子メールで提供された資格情報を使用してログインします。 JFrog PlatformはOAuthと統合されており、認証リクエストを外部プロバイダーに委任できます(サポートされているプロバイダーの種類はGoogle、OpenID Connect、GitHub Enterprise、Cloud Foundry UAAです)

注意:v0.16.1より前のnerdctlには、Enterキーを2回押す必要があるバグがありました。

リポジトリの作成

  1. ローカルDockerリポジトリを追加する
  2. https://<server-name>.jfrog.io/ui/admin/repositories/local/new を使用して Docker パッケージ タイプの新しいローカル リポジトリを追加します。
  3. 仮想Dockerリポジトリを追加する
  4. https://<server-name>.jfrog.io/ui/admin/repositories/virtual/new を使用して Docker パッケージ タイプの新しい仮想リポジトリを追加します。
  5. 手順 1 で作成したローカルの Docker リポジトリを追加します (矢印ボタンを使用して [Available Repositories] から [Selected Repositories] に移動します)。
  6. ローカルリポジトリをデフォルトのローカルデプロイメントリポジトリとして設定します。

イメージのプッシュ

$ nerdctl tag hello-world <SERVER_NAME>.jfrog.io/<VIRTUAL_REPO_NAME>/hello-world
$ nerdctl push <SERVER_NAME>.jfrog.io/<VIRTUAL_REPO_NAME>/hello-world

SERVER_NAMEは、環境用に指定された URL の最初の部分 https://<SERVER_NAME>.jfrog.io です。

VIRTUAL_REPO_NAMEは、2.iで仮想リポジトリに割り当てた「docker」という名前です。

プッシュされたイメージは https://<SERVER_NAME>.jfrog.io/ui/repos/tree/General/<VIRTUAL_REPO_NAME> に表示されます。 既定ではプライベートです。

Quay.io

https://docs.quay.io/solution/getting-started.html も参照してください。

ログイン

$ nerdctl login quay.io -u <USERNAME>
Enter Password: ********[Enter]

Login Succeeded

注意:v0.16.1より前のnerdctlには、Enterキーを2回押す必要があるバグがありました。

リポジトリの作成

リポジトリを明示的に作成する必要はありません。

イメージのプッシュ

$ nerdctl tag hello-world quay.io/<USERNAME>/hello-world
$ nerdctl push quay.io/<USERNAME>/hello-world

The pushed image appears in https://quay.io/repository/ . Privateがデフォルトです。