dockerfile拉取私库镜像_从私有仓库拉取镜像

从私有仓库拉取镜像

浏览 0

扫码

分享

2019-10-27 17:16:54

origin_last_modified:2019-06-06 06:18(#14740) 译文原文 英文原文

版权声明:本文为 码农文档 原创译文,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接和本声明。

公告:如果您也想加入翻译队伍,或者您有相关中文文档想要贡献给大家,请联系coderdocument@163.com ,谢谢!

这个页面展示了如何创建一个Pod,它使用一个secret从私有Docker reigstry或仓库中拉取镜像。

开始之前

你需要有一个Kubernetes集群,并且必须配置kubectl命令行工具来与集群通信。如果你还没有集群,你可以使用Minikube创建一个集群,或者你可以使用一个Kubernetes游乐场:

要检查版本,请输入kubectl version。

要完成这个练习,你需要Docker ID和密码。

登录Docker

在你的笔记本电脑上,你必须在镜像仓库上进行认证,才能拉取私有镜像:

docker login

当提示时,输入Docker用户名和密码。

登录后会创建或更新config.json,其包含授权令牌。

查看config.json文件:

cat ~/.docker/config.json

其输出包含类似如下部分内容:

{

"auths": {

"https://index.docker.io/v1/": {

"auth": "c3R...zE2"

}

}

}

@alert_info@注意:如果你使用Docker凭据store,你将不会看到该auth条目,但是会看到以store名称作为值的 credsStore 条目。

根据已有的Docker凭据创建secret

Kubernetes集群使用docker-registry类型的secret与容器仓库进行认证,以获取私有镜像。

如果你已经运行了 docker login命令,你可以复制其凭据至Kubernetes:

kubectl create secret generic regcred \

--from-file=.dockerconfigjson= \

--type=kubernetes.io/dockerconfigjson

如果需要更多的控制(例如,在新secret上设置命名空间或标签),那么可以在存储secret之前自定义该secret。请确保:

将数据项的名称设置为.dockerconfigjson。

对dockerd文件进行base64编码并粘贴该字符串,完整字符串作为 data[".dockerconfigjson"]字段值。

将type设置为 kubernetes.io/dockerconfigjson。

例如:

apiVersion: v1

kind: Secret

metadata:

name: myregistrykey

namespace: awesomeapps

data:

.dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==

type: kubernetes.io/dockerconfigjson

如果你得到了错误消息 error: no objects passed to create,这可能意味着base64编码的字符串无效。如果你得到了一个类似错误消息Secret "myregistrykey" is invalid: data[.dockerconfigjson]: invalid value ...,这意味着数据中的base64编码字符串已成功解码,但不能解析为.docker/config.json文件。

根据命令行提供的凭据创建secret

将这个创建的secret命名为 regcred:

kubectl create secret docker-registry regcred --docker-server= --docker-username= --docker-password= --docker-email=

其中:

是你的私有Docker registryFQDN(对于DockerHub是https://index.docker.io/v1/ )

是Docker用户名

是Docker密码

是Docker邮箱

你已经成功地将集群中的Docker凭据设置为一个名为regcred的secret。

@alert_info@注意:在命令行上键入secret可能会将它们存储在不受保护的shell历史记录中,而且在kubectl运行期间,这些secret也可能对PC上的其他用户可见。

检查secret regcred

要了解你刚刚创建的regcred Secret的内容,可以从查看YAML格式的secret开始:

kubectl get secret regcred --output=yaml

输出类似如下:

apiVersion: v1

kind: Secret

metadata:

...

name: regcred

...

data:

.dockerconfigjson: eyJodHRwczovL2luZGV4L ... J0QUl6RTIifX0=

type: kubernetes.io/dockerconfigjson

.dockerconfigjson字段的值是Docker凭据的base64编码值。

要理解.dockerconfigjson字段值,请将secret数据转换成可读格式:

kubectl get secret regcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode

输出类似如下:

{"auths":{"your.private.registry.example.com":{"username":"janedoe","password":"xxxxxxxxxxx","email":"jdoe@example.com","auth":"c3R...zE2"}}}

要理解 auth 字段是什么,请将base64编码的数据转换成可读格式:

echo "c3R...zE2" | base64 --decode

输出内容中,户名和密码使用:字符进行连接,类似如下:

janedoe:xxxxxxxxxxx

注意,secret数据包含的授权token类似于本地的~/.docker/config.json 文件。

你已经成功地将Docker凭据设置为集群中名为regcred的secret。

创建pod使用secret

这是一个Pod的配置文件,需要访问你的Docker凭证所在的regcred secret:

apiVersion: v1

kind: Pod

metadata:

name: private-reg

spec:

containers:

- name: private-reg-container

image:

imagePullSecrets:

- name: regcred

下载上面的文件:

wget -O my-private-reg-pod.yaml https://k8s.io/examples/pods/private-reg-pod.yaml

在 my-private-reg-pod.yaml文件中,将 替换为包含镜像的私有registry(仓库)路径,例如:

your.private.registry.example.com/janedoe/jdoe-private:v1

要从私有仓库拉取镜像,Kubernetes需要凭证。配置文件中的imagePullSecrets字段指定Kubernetes应该从名为regcred的secret获取凭据。

创建一个使用secret的Pod,并验证该Pod正在运行:

kubectl apply -f my-private-reg-pod.yaml

kubectl get pod private-reg

接下来


版权声明:本文为weixin_39566593原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。