百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

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

toyiye 2024-06-21 11:57 8 浏览 0 评论

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



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

无论我们使用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  //查看下载到本地的镜像

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

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

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

docker push tianyangqi/busybox-test:latest    //推送镜像

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

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

docker pull tianyangqi/busybox-test:latest   //拉取镜像

步骤二:通过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

创建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

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

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

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

kubectl get pod  //查看Pod

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

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

实验总结

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

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


相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码