K8S系列学习之DockerHub自有镜像库搭建和使用

Kubernetes学习路上的那些事儿,很有必要分享出来

K8S系列学习之DockerHub自有镜像库搭建和使用_第1张图片

 

为什么要搭建私有镜像仓库

无论我们使用docker pull 【具体镜像名称】命令拉取镜像,还是在Kubernetes中编写yaml文件的时候,使用image: 【具体镜像名称】,其实都是从docker公共镜像仓库拉取的,一般公共镜像仓库中有很多通用的镜像文件,比如MySQL,Redis,Nginx,busybox等等。

但是对于一个私有项目来说,不可能将定制化的应用镜像放到docker的公共镜像仓库中,这时,搭建一个私有镜像仓库就非常有必要了。

本实验主要测试一下在DockerHub上创建个人镜像仓库的操作。

实验过程

实验准备:

1)DockerHub,需要注册账号,本次实验使用的账号tianyangqi.

2)Docker环境,使用docker命令测试镜像

3)K8S集群环境,用于测试从私有镜像拉取busybox镜像

步骤一:在Docker环境下,向DockerHub上推送和拉取自定义镜像。进入docker环境,确定安装了docker,然后查看本地镜像。

docker version  //查看安装的Docker版本

docker images  //查看下载到本地的镜像

 

K8S系列学习之DockerHub自有镜像库搭建和使用_第2张图片

既然看到了busybox镜像,那么就用这个镜像来制作“自定义镜像”,其实就是重命名一下。如果要制作一个纯的“自定义镜像”,那就要自己开发代码,然后通过dockerfile打包成镜像,由于本实验主要的目的是演示镜像仓库,所以就来个不纯的吧。

docker tag [本地镜像id] [账号]/[自定义镜像名称]  //打包镜像

 

然后推送自定义镜像到DockerHub中的tianyangqi账户下的镜像仓库中,在推动镜像之前,需要通过docker login命令登录DockerHub,根据提示输入用户名和密码。否则访问会被拒绝。

 

K8S系列学习之DockerHub自有镜像库搭建和使用_第3张图片

登录DockerHub官网,然后可以看到已推送的“自定义镜像”——busybox-test.

K8S系列学习之DockerHub自有镜像库搭建和使用_第4张图片

 

验证一下拉取镜像,为了避免混淆,先删除本地刚才打包的“自定义镜像”——busybox-test,然后再从DockerHub的tianyangqi个人镜像仓库中拉取镜像。

 

K8S系列学习之DockerHub自有镜像库搭建和使用_第5张图片

步骤二:通过k8s集群,从DockerHub的个人镜像仓库拉取镜像。首先仍然确认docker login的,只有登录了,才会在当前账号的家目录下生成一个config.json文件,在k8s集群中要通过这个json文件制作secret凭证。

cat ~/.docker/config.json | base64 -w 0  //务必记录好生成的这串信息,不要换行

然后新建一个secret的yaml文件,就叫myregistry-secret.yaml.

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
  namespace: default
type: kubernetes.io/dockerconfigjson
data:
  .dockerconfigjson: 替换成刚才用config.json生成的那串老长的信息。

创建并检查secret凭证

kubectl apply -f myregistry-secret.yaml  //创建secret

kubectl get secret mysecret  //查看secret

 

K8S系列学习之DockerHub自有镜像库搭建和使用_第6张图片

创建Pod资源来测试一下,看看是否可以从DockerHub的tianyangqi镜像仓库中拉取busybox-test镜像。既然前面已经演示过Deployment资源了,就索性用Deployment创建pod完成测试。此测试文件命名为dockerhub-myregistry-dep.yaml.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myreg-dep
spec:
  replicas: 2
  selector:
    matchLabels:
      app: busybox
  template:
    metadata:
      labels:
        app: busybox
    spec:
      containers:
      - name: busybox
        image: tianyangqi/busybox-test:latest
      imagePullSecrets:
         - name: mysecret

相关代码的主要解释如下图:

K8S系列学习之DockerHub自有镜像库搭建和使用_第7张图片

 

创建测试deployment资源,查看pod创建信息。

kubectl apply -f dockerhub-myregistry-dep.yaml  //创建

kubectl get pod  //查看Pod

kubectl describe pod [pod名称]   //查看具体pod的描述信息

 

K8S系列学习之DockerHub自有镜像库搭建和使用_第8张图片

“自定义镜像”(tianyangqi/busybox-test)确实拉取成功了,之所以由Deployment创建的两个pod的运行状态不是Running,这跟busybox镜像本身有关,此镜像就是一个包含很多Linux命令的工具包,安装完成后就结束了。

实验总结

DockerHub中的tianyangqi相当于一个线上的私有镜像仓库,可以推送自定义镜像到该仓库中,而docker本身是负责推送和拉取镜像,以及打包镜像,k8s中的Secret资源就是一个在集群中的登录凭证,相当于令牌或密钥,里面包含了tianyangqi账号的相关登录信息;最后使用deployment创建pod测试镜像的拉取。

最后附上一个更换了Nginx镜像的实验截图,即tianyangqi/nginx-test(基于nginx镜像自定义的)。可以看到,Pod运行正常,处于Running状态了。

 

K8S系列学习之DockerHub自有镜像库搭建和使用_第9张图片

 

K8S系列学习之DockerHub自有镜像库搭建和使用_第10张图片

 

你可能感兴趣的:(技术交流,docker,kubernetes,centos,云计算)