docker-registry

docker-registry类型的Secret主要用于存储从私有镜像库中下载容器镜像所需的相关信息,而不是为了向容器中传递数据的,其中主要包括:

  1. 访问Docker私有镜像仓库所需的用户名;

  2. 访问Docker私有镜像仓库所需的密码;

  3. 访问Docker私有镜像仓库账户的Email;

  4. Docker私有镜像仓库的地址(只有当不使用docker hub时,才需要指定,如使用阿里云的镜像仓库);

这里将分作两部分讨论,第一部分是将所需信息传入docker-registry类型的Secret,即创建Secret,第二部分是Pod使用其中保存的信息从私有镜像仓库中下载容器所需镜像。

该类型的Secret的secret.type=kubernetes.io/dockerconfigjson

配置传入Secret

数据传入Secret的过程,即创建Secret的过程,在创建时,可以将需要用来访问私有镜像仓库的信息以键/值对的形式写入Secret中。这里主要包括:访问私有镜像仓库所需的用户名、密码和Email。

创建Secret与ConfigMap同样有两种方式:

  1. 使用指令创建(优选);

  2. 使用配置文件创建;

在这里我们仅展示使用第一种方式创建Secret的方式,即使用指令创建。下面展示一个创建该类型Secret的案例:

kubectl create secret docker-registry mydockerhubsecret --docker-username=myusername --docker-password=mypassword --docker-email=my.email@provider.com --docker-server=registry.cn-hangzhou.aliyuncs.com

--docker-username:(必须)访问镜像仓库的用户名;

--docker-password:(必须)访问镜像仓库的密码;

--docker-email:(必须)访问镜像仓库的账户的Email;

--docker-server:镜像仓库不是Docker Hub时,需要另外指定,这里用的是阿里云的镜像仓库;

查看Secret中保存的数据,可以发现只有一个条目.dockerconfigjson,相当于用户主目录下的 .dockercfg 文件,该文件通常在运行docker login命令时由Docker自动创建。

使用Secret拉取镜像

Pod通过在spec.imagePullSecrets中的name指定包含了从私有镜像仓库中拉取镜像所需的信息的docker-registry类型的Secret名,进而利用该信息,从私有镜像仓库中下载容器镜像。

下面举一个例子,下载一个来自于私有镜像仓库的镜像registry.cn-hangzhou.aliyuncs.com/yangsijie666/test:latest生成容器:

apiVersion: v1
kind: Pod
metadata:
  name: private-pod
spec:
  imagePullSecrets:    # 从私有镜像仓库中拉取镜像所需的登录信息的docker-registry类型的Secret
  - name: mydockerhubsecret    # Secret名
  containers:
  - image: registry.cn-hangzhou.aliyuncs.com/yangsijie666/test:latest    # 来自于私有镜像仓库的镜像
    name: tcpdump
    command:
      - /bin/sh

Last updated

Was this helpful?