レジストリ認証
nerdctl は、イメージ レジストリでの認証に ${DOCKER_CONFIG}/config.json
を使用します。
$DOCKER_CONFIG
の既定値は $HOME/.docker
です。
安全でないレジストリの使用
HTTPSを指定したクライアントに対してHTTPへのリダイレクトをサーバが指定する
場合や、レジストリに TLS を設定できない場合は、--insecure-registry
フラグを試してください。
例
証明書の指定
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)
- ログイン
- リポジトリの作成
- イメージのプッシュ
- Azure Container Registry (ACR)
- レジストリーの作成
- ログイン
- リポジトリの作成
- イメージのプッシュ
- Docker Hub
- ログイン
- リポジトリの作成
- イメージのプッシュ
- GitHub コンテナレジストリ (GHCR)
- ログイン
- リポジトリの作成
- イメージのプッシュ
- GitLabコンテナレジストリ
- ログイン
- リポジトリの作成
- イメージのプッシュ
- Google アーティファクト レジストリ (pkg.dev)
- ログイン
- リポジトリの作成
- イメージのプッシュ
- Google Container Registry (GCR) [サポート終了]
- ログイン
- リポジトリの作成
- イメージのプッシュ
- JFrog Artifactory (Cloud/On-Prem)
- ログイン
- リポジトリの作成
- イメージのプッシュ
- Quay.io
- ログイン
- リポジトリの作成
- イメージのプッシュ
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`:
`~/.aws/credentials`: > **注意**: 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.
ログイン
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/ も参照してください。
ログイン
注意:v0.16.1より前のnerdctlには、Enterキーを2回押す必要があるバグがありました。
リポジトリの作成
パブリック イメージの場合は、リポジトリを明示的に作成する必要はありません。
プライベートリポジトリを作成するには、https://hub.docker.com/repositories を参照してください。
イメージのプッシュ
プッシュされたイメージは https://hub.docker.com/repositories に表示されます。 既定では Public です。
GitHub Container Registry (GHCR)
ログイン
<USERNAME>
は GitHub のユーザー名ですが、小文字を使用してください。
ここで "Password" は、 read:packages
と write: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/ も参照してください
ログイン
<USERNAME>
はGitLabのユーザー名です。
ここで "Password" は GitLab Personal access token か GitLab 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 $ 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.
リポジトリの作成
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.
リポジトリの作成
リポジトリを明示的に作成する必要はありません。
イメージのプッシュ
$ 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回押す必要があるバグがありました。
リポジトリの作成
- ローカルDockerリポジトリを追加する
https://<server-name>.jfrog.io/ui/admin/repositories/local/new
を使用して Docker パッケージ タイプの新しいローカル リポジトリを追加します。- 仮想Dockerリポジトリを追加する
https://<server-name>.jfrog.io/ui/admin/repositories/virtual/new
を使用して Docker パッケージ タイプの新しい仮想リポジトリを追加します。- 手順 1 で作成したローカルの Docker リポジトリを追加します (矢印ボタンを使用して [Available Repositories] から [Selected Repositories] に移動します)。
- ローカルリポジトリをデフォルトのローカルデプロイメントリポジトリとして設定します。
イメージのプッシュ
$ 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 も参照してください。
ログイン
注意: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がデフォルトです。