3.8. プライベートレジストリーでの docker 認証情報の使用
プライベートコンテナーレジストリーの有効な認証情報を指定して、.docker/config.json
ファイルでビルドを提供できます。これにより、プライベートコンテナーイメージレジストリーにアウトプットイメージをプッシュしたり、認証を必要とするプライベートコンテナーイメージレジストリーからビルダーイメージをプルすることができます。
同じレジストリー内に、レジストリーパスに固有の認証情報を指定して、複数のリポジトリーに認証情報を指定できます。
OpenShift Container Platform コンテナーイメージレジストリーでは、OpenShift Container Platform が自動的にシークレットを生成するので、この作業は必要ありません。
デフォルトでは、.docker/config.json
ファイルはホームディレクトリーにあり、以下の形式となっています。
auths: index.docker.io/v1/: 1 auth: "YWRfbGzhcGU6R2labnRib21ifTE=" 2 email: "user@example.com" 3 docker.io/my-namespace/my-user/my-image: 4 auth: "GzhYWRGU6R2fbclabnRgbkSp="" email: "user@example.com" docker.io/my-namespace: 5 auth: "GzhYWRGU6R2deesfrRgbkSp="" email: "user@example.com"
複数のコンテナーイメージレジストリーを定義するか、同じレジストリーに複数のリポジトリーを定義することができます。または docker login
コマンドを実行して、このファイルに認証エントリーを追加することも可能です。ファイルが存在しない場合には作成されます。
Kubernetes では Secret
オブジェクトが提供され、これを使用して設定とパスワードを保存することができます。
前提条件
-
.docker/config.json
ファイルが必要です。
手順
ローカルの
.docker/config.json
ファイルからシークレットを作成します。$ oc create secret generic dockerhub \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
このコマンドにより、
dockerhub
という名前のシークレットの JSON 仕様が生成され、オブジェクトが作成されます。pushSecret
フィールドをBuildConfig
のoutput
セクションに追加し、作成したsecret
の名前 (上記の例では、dockerhub
) に設定します。spec: output: to: kind: "DockerImage" name: "private.registry.com/org/private-image:latest" pushSecret: name: "dockerhub"
oc set build-secret
コマンドを使用して、ビルド設定にプッシュするシークレットを設定します。$ oc set build-secret --push bc/sample-build dockerhub
pushSecret
フィールドを指定する代わりに、プッシュシークレットをビルドで使用されるサービスアカウントにリンクできます。デフォルトで、ビルドはbuilder
サービスアカウントを使用します。シークレットにビルドのアウトプットイメージをホストするリポジトリーに一致する認証情報が含まれる場合、プッシュシークレットはビルドに自動的に追加されます。$ oc secrets link builder dockerhub
ビルドストラテジー定義に含まれる
pullSecret
を指定して、プライベートコンテナーイメージレジストリーからビルダーコンテナーイメージをプルします。strategy: sourceStrategy: from: kind: "DockerImage" name: "docker.io/user/private_repository" pullSecret: name: "dockerhub"
oc set build-secret
コマンドを使用して、ビルド設定でプルシークレットを設定します。$ oc set build-secret --pull bc/sample-build dockerhub
注記以下の例では、ソールビルドに
pullSecret
を使用しますが、Docker とカスタムビルドにも該当します。pullSecret
フィールドを指定する代わりに、プルシークレットをビルドで使用されるサービスアカウントにリンクできます。デフォルトで、ビルドはbuilder
サービスアカウントを使用します。シークレットにビルドのインプットイメージをホストするリポジトリーに一致する認証情報が含まれる場合、プルシークレットはビルドに自動的に追加されます。pullSecret
フィールドを指定する代わりに、プルシークレットをビルドで使用されるサービスアカウントにリンクするには、以下を実行します。$ oc secrets link builder dockerhub
注記この機能を使用するには、
from
イメージをBuildConfig
仕様に指定する必要があります。oc new-build
またはoc new-app
で生成される Docker ストラテジービルドは、場合によってこれを実行しない場合があります。