k8s系列-离线Docker仓库搭建
背景
1.本系列k8s文章全部为内网离线部署。
2.全部为root用户执行。
3.k8s版本为1.22.2
k8s-系列目录
k8s-系列教程-目录
Docker仓库在离线k8s集群中的作用非常明显,例如在部署一个全节点都需要运行的组件镜像时,一个image往往需要在每一个节点中导入docker load,这样的弊端非常明显,当集群越来越大的时候,这个步骤就开始变的非常繁琐,而且频繁。但是有了Docker离线仓库后,我们就只需要将镜像push到仓库,后面k8s的运行都基于仓库,就不需要我们再手动操作每一台节点了。
准备
本案例使用192.168.0.1作为离线仓库的提供机器。
下载导入镜像镜像
需要的镜像registry:latest。
参照上一篇文章操作
部署仓库
1. 创建存储目录
在本地创建一个用于存储Docker镜像的目录,比如 /data/docker-registry。
2. 在daemon.json文件中添加私有镜像仓库的地址并重启
注意:每一台想要连接此仓库的机器都要配置这个。
vim /etc/docker/daemon.json
{
"insecure-registries": ["192.168.0.1:5000"], #添加此段,“,”不可少,ip是本机IP地址
"exec-opts": ["native.cgroupdriver=systemd"] #此段的作用跟本篇无关,为k8s部署需要
}
重启
systemctl daemon-reload
systemctl restart docker.service
3.启动Registry容器
执行以下命令启动Registry容器:
docker run -d -p 5000:5000 --restart=always --name registry \
-v /data/docker-registry:/var/lib/registry registry:latest
4. 推送和拉取镜像
使用docker tag将本地构建好的镜像打标签,并推送到私有仓库中。
#打标签
docker tag nginx:latest 192.168.0.1:5000/nginx:v3
#上传
docker push 192.168.0.1:5000/nginx:v3
查看是否上传成功
curl -XGET http://192.168.0.1:5000/v2/_catalog
# 若成功会返回以下值
{"repositories":["nginx"]}
5.测试-拉取私有仓库中的镜像:
#删除原有镜像
docker rmi 192.168.0.1:5000/nginx:latest
#查看镜像
docker images
#从本地仓库下载镜像
docker pull 192.168.0.1:5000/nginx
#查看镜像
docker images
部署Docker图形化页面(最好跟仓库部署在一个机器上)
下载导入镜像镜像
需要的镜像konradkleine/docker-registry-frontend:v2。
参照上一篇文章操作
将镜像打tag并上传到仓库中
docker tag konradkleine/docker-registry-frontend:v2 192.168.0.1:5000/docker-registry-frontend:v2
docker push 192.168.0.1:5000/docker-registry-frontend:v2
启动
docker run \
-d \
-e ENV_DOCKER_REGISTRY_HOST=192.168.0.1 \
-e ENV_DOCKER_REGISTRY_PORT=5000 \
-e ENV_MODE_BROWSE_ONLY=true \
-p 8082:80 \
192.168.0.1:5000/docker-registry-frontend:v2
参数解析:
-e ENV_DOCKER_REGISTRY_HOST=10.244.1.3,指定docker registry的host ip,由于前端配置了nginx所以直接连接nginx的IP。
-e ENV_DOCKER_REGISTRY_PORT=443,指定docker registry的host port ,由于前端配置了nginx所以直接连接nginx的端口。
-e ENV_DOCKER_REGISTRY_USE_SSL=1,开启SSL认证。
-p 8082:80 ,映射主机端口为8082。