目录
前言
环境
问题缘起
安装本地Registry
minikube访问共享image
前言
上篇我们对Docker整体有了一定了解,知道了其中一个核心概念是Registry,下来就进行更深入的学习
环境
环境:mac mini M1芯片;docker desktop(自带k8s)和minikube
问题缘起
之前确实对docker和k8s没有深入和体系化的学习,就是跑跑对应的一些示例。我在跑最新的springcloud k8s(
https://github.com/spring-cloud/spring-cloud-kubernetes)项目时遇到了一个非常不爽的问题(就是jkube的下载,特别慢 【见我之前的头条描述】)
好不容易我在凌晨较快的下载了jkube,但在后来我实验minikube的时候,又需要下载一次jkube,被折磨坏了;同时之前我在非minikube下build的镜像,通过kubectl create deployment时都会发生ImagePullBackOff错误,详细提示为: “repository does not exist or may require 'docker login': denied: requested access to the resource is denied”错误
所以我就在想如何共享镜像,否则太麻烦了,而且这镜像包非常大,这么搞几个实验我的硬盘就吃紧了
对于image镜像和registry,当时我专门写了文章(只是时间紧还没跑出来结果 还有人挑战我对这些概念理解是不正确的)
今天终于跑起来并验证了,特此记录。
安装本地Registry
这里我使用独立的registry而非minikube的registry插件(addons)
docker run -d -p 5000:5000 --restart=always --name registry registry
如图:
registry容器
registry默认是http部署的,push时会出现“http: server gave HTTP response to HTTPS client”错误
解决方案:
一、https方式安装运行(暂未实验)
二、更改docker daemon配置(通过docker desktop界面更改)
"insecure-registries": [
"192.168.31.192:5000" //换成自己的ip和端口
],
浏览器访问:
http://localhost:5000/v2/_catalog正常访问即ok
这个时候push即会成功,这里也需要注意下相关命令:
红线部分就是可访问url
minikube访问共享image
按照理论,现在就应该可以访问共享的镜像了,但还是报错,和上面的一样,不过这次不是push而是k8s启动容器pull时,我们通过k8s dashboard可以看到对应错误:
这个问题也很容易找到解决方案,就是在minikube start时增加--insecure-registry参数,官方文档:
https://minikube.sigs.k8s.io/docs/handbook/registry/
这是因为之前已经产生了K8S集群,需要删除重建
minikube delete
minikube start --insecure-registry='192.168.31.192:5000'
部署服务:
kubectl create deployment hello-minikube-7 --image=192.168.31.192:5000/ng:0.0.2
这次再看,已经成功
大功告成!
我们再从业务层面看看服务是否正常
kubectl expose deployment hello-minikube-7 --type=NodePort --port=8080
查看对应访问端口
kubectl get service
访问http://localhost:32144 ok
镜像通过registry在不同容器间共享了。
关于minikube和docker desktop间image问题,这个说的非常经典,请看
- Use Kubernetes from Docker Desktop instead of Minikube (Docker Desktop comes with Kubernetes cluster built-in).
- Build your Docker image with Docker Engine from Minikube (instead of Docker Desktop).
- Use external Docker registry (you can use Docker Hub or set up your own registry)