3.8. 将 docker 凭证用于私有容器镜像仓库
您可以为构建提供 .docker/config.json
文件,在文件中包含私有容器 registry 的有效凭证。这样,您可以将输出镜像推送到私有容器镜像 registry 中,或从需要身份验证的私有容器镜像 registry 中拉取构建器镜像。
您可以为同一 registry 中的多个存储库提供凭证,每个软件仓库都有特定于该 registry 路径的凭证。
对于 Red Hat OpenShift Service on AWS 容器镜像 registry,这不是必需的,因为 Red Hat OpenShift Service on AWS 会自动为您生成 secret。
默认情况下,.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"
您可以定义多个容器镜像 registry,或在同一 registry 中定义多个存储库。或者,也可以通过运行 docker login
命令将身份验证条目添加到此文件中。如果文件不存在,则会创建此文件。
Kubernetes 提供Secret
对象,可用于存储配置和密码。
先决条件
-
您必须有一个
.docker/config.json
文件。
流程
输入以下命令从本地
.docker/config.json
文件创建 secret:$ oc create secret generic dockerhub \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
这将生成名为
dockerhub
的 secret 的 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
命令在构建配置上设置推送 secret:$ oc set build-secret --push bc/sample-build dockerhub
您还可以将 push secret 与构建使用的服务帐户链接,而不指定
pushSecret
字段。默认情况下,构建使用builder
服务帐户。如果 secret 包含与托管构建输出镜像的存储库匹配的凭证,则 push secret 会自动添加到构建中。$ oc secrets link builder dockerhub
通过指定
pullSecret
字段(构建策略定义的一部分),从私有容器镜像 registry 拉取构建器容器镜像:strategy: sourceStrategy: from: kind: "DockerImage" name: "docker.io/user/private_repository" pullSecret: name: "dockerhub"
您可以使用
oc set build-secret
命令在构建配置上设置拉取 secret:$ oc set build-secret --pull bc/sample-build dockerhub
注意本例在 Source 构建中使用
pullSecret
,但也适用于 Docker 构建和 Custom 构建。您还可以将 pull secret 链接到构建使用的服务帐户,而不指定
pullSecret
字段。默认情况下,构建使用builder
服务帐户。如果 secret 包含与托管构建的输入镜像的存储库匹配的凭证,pull secret 会自动添加到构建中。要将 pull secret 链接到构建使用的服务帐户,而不指定pullSecret
字段,请输入以下命令:$ oc secrets link builder dockerhub
注意您必须在
BuildConfig
spec 中指定一个from
镜像,才能利用此功能。由oc new-build
或oc new-app
生成的 Docker 策略构建在某些情况下可能无法进行这个操作。