docker registry私有镜像仓库

前言

环境:centos 7.9 docker 20
docker仓库一般有:公网上的docker hub,而docker的私有仓库一般有2种,docker registry和harbor,前者是docker官方的私有仓库,比较小巧,在一些小业务场景比较合适使用,且没有web页面,后者harbor是VMware 公司中国团队的开源项目,有web页面,比较人性化,企业使用范围较广。
本篇先来讲解docker公司的registry镜像仓库。harbor仓库的搭建可以参考https://blog.csdn.net/MssGuo/article/details/126210184
挺好的文章:http://events.jianshu.io/p/de8969f17b53

新项目distribution(新的docker register被称为Distribution)代替了registry,两者其实就是一个意思。docker官网的镜像还是registry。
docker-distribution的2种安装方法:

#传统方式使用yum安装,systemd管理
yum install docker-distribution -y
systemctl enable --now docker-distribution.service
#docker安装
docker run xx

我们讲使用docker 安装镜像仓库。

使用docker搭建registry仓库

官网文档:https://docs.docker.com/registry/

#下载镜像
docker pull registry:latest	
#或docker pull registry:2

#使用docker安装并持久化,设置允许删除镜像(这里留了个坑,还没有给registry仓库设置账号密码)
docker run -d -p 5000:5000 --restart always --name registry \
 -v /opt/registry:/var/lib/registry \
 -e REGISTRY_STORAGE_DELETE_ENABLED="true"  registry:latest 
或
docker run -p 5000:5000 --name registry2 \
--restart=always \
-e REGISTRY_STORAGE_DELETE_ENABLED="true" \
-d registry:2

访问registry镜像(无账号密码)

registry镜像仓库没有图形化,访问如下:

#浏览器web页面访问方式
http://192.168.158.130:5000/v2/_catalog
{"repositories":[]}				#[]显示为空,因为没有任何镜像
#或者Linux命令行curl一下
curl -XGET http://192.168.158.130:5000/v2/_catalog
{"repositories":[]}				#[]显示为空,因为没有任何镜像

推送镜像到registry镜像仓库(无账号密码)

#daemon.json文件配置私用镜像仓库地址
vim /etc/docker/daemon.json								
"insecure-registries": ["192.168.158.130:5000"]
#重启docker
systemctl  restart docker
#推送镜像到registry镜像仓库(无账号密码所以不用登录)
docker tag nginx:1.18 192.168.158.130:5000/nginx:1.18
docker push 192.168.158.130:5000/nginx:1.18
#查看镜像仓库已有的镜像,已经上传成功			
curl -XGET -s  http://192.168.158.130:5000/v2/_catalog | python -m json.tool

给registry镜像仓库设置账号密码

前面,我们安装registry镜像仓库并没有设置账号密码,随便一个人都能上传镜像到该镜像仓库,很不安全,现在设置账号密码:

#安装httpd-tools工具
yum install  httpd-tools -y
#创建目录
mkdir -p /etc/registry/auth
touch /etc/registry/auth/passwd
#使用htpasswd工具生成秘钥,并存放于/etc/registry/auth/passwd文件。账号是admin,密码是admin123456
htpasswd -Bbn admin admin123456 > /etc/registry/auth/passwd	
# 重新创建容器
docker stop registry && docker rm registry
docker run -d -p 5000:5000 --restart always --name registry \
-v /opt/registry:/var/lib/registry \
-v /etc/registry/auth:/etc/registry/auth  \
-e REGISTRY_STORAGE_DELETE_ENABLED="true" \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/etc/registry/auth/passwd" \
 registry:latest
#将本地的/etc/registry/auth目录挂载到容器的/etc/registry/auth目录
#REGISTRY_AUTH_HTPASSWD_PATH变量指定passwd文件

账号密码-访问registry镜像

#浏览器页面访问
#弹出一个框显示要输入密码,admin/admin123456
http://192.168.158.130:5000/v2/_catalog

#Linux命令行访问
#没有账号密码访问失败
curl -XGET http://192.168.158.130:5000/v2/_catalog
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"registry","Class":"","Name":"catalog","Action":"*"}]}]}
#账号密码访问
curl -XGET -u admin:admin123456 http://192.168.158.130:5000/v2/_catalog
{"repositories":["nginx"]}

账号密码-推送镜像到registry镜像仓库

docker login -u admin -p admin123456 192.168.158.130:5000
docker tag coredns/coredns:latest 192.168.158.130:5000/coredns/coredns:latest
docker push 192.168.158.130:5000/coredns/coredns:latest
curl -XGET -u admin:admin123456 http://192.168.158.130:5000/v2/_catalog

配置registry镜像仓库可视化

项目位置:https://github.com/Joxit/docker-registry-ui
docker pull joxit/docker-registry-ui:main
# DELETE_IMAGES=true表示允许删除镜像,只有当registry仓库也开启了允许删除镜像后,才能在页面删除成功
# NGINX_PROXY_PASS_URL参数指定镜像仓库的地址
docker run -p 8280:80 --name registry-ui -d \
      -e SINGLE_REGISTRY=true \
      -e REGISTRY_TITLE="Docker Registry UI" \
      -e DELETE_IMAGES=true \		
      -e SHOW_CONTENT_DIGEST=true \
      -e NGINX_PROXY_PASS_URL=http://192.168.544.150:5000 \
      -e SHOW_CATALOG_NB_TAGS=true \
      -e CATALOG_MIN_BRANCHES=1 \
      -e CATALOG_MAX_BRANCHES=1 \       
      -e TAGLIST_PAGE_SIZE=100 \
      -e REGISTRY_SECURED=false \
      -e CATALOG_ELEMENTS_LIMIT=1000 \
joxit/docker-registry-ui:main
#浏览器直接访问即可,如果registry仓库配置有登录密码则需要登录,输入registry的账号密码登录即可

k8s搭建registry

#安装httpd-tools工具
yum install  httpd-tools -y
cat > deploy-registy.yaml <<'EOF'
---
#passwd这个key的内容就是使用htpasswd -Bbn admin admin123456 命令生成的
apiVersion: v1
data:
  passwd: |+
    admin:$2y$05$XmcyIRU8D7w2jUCYHskSZ.dcwFDS0SlYP4xMUBj1QZJIvgGSPlTAq
kind: ConfigMap
metadata:
  name: registry-cm
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: registry-pvc
  labels:
    release: registry
spec:
  accessModes: 
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: nfs-storageclass
---
apiVersion: v1
kind: Service
metadata:
  name: "registry-svc"
  labels:
    release: registry
spec:
  ports:
    - name: http-registry
      port: 5000
      nodePort: 5000
      targetPort: 5000
  type: NodePort
  selector:
    release: registry
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: "registry-deployment"
  labels:
    release: registry
spec:
  replicas: 1
  selector:
    matchLabels:
      release: registry
  template:
    metadata:
      labels:
        release: registry
    spec:
      containers:
      - name: registry
        image: registry:latest
        imagePullPolicy: IfNotPresent
        livenessProbe:
          httpGet:
            path: /
            scheme: HTTP
            port: 5000
          initialDelaySeconds: 300
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /
            scheme: HTTP
            port: 5000
          initialDelaySeconds: 2
          periodSeconds: 10
        env:                                    #容器环境变量,传递3个环境变量
        - name: REGISTRY_AUTH
          value: htpasswd
        - name: REGISTRY_AUTH_HTPASSWD_REALM
          value: "Registry Realm"
        - name: REGISTRY_AUTH_HTPASSWD_PATH
          value: "/etc/registry/auth/passwd"
        ports:
        - containerPort: 5000
        volumeMounts:
        - name: registry-data				#使用pvc持久化
          mountPath: /var/lib/registry
        - name: registry-cm					#挂载configmap进去
          mountPath: /etc/registry/auth/passwd
          subPath: passwd
      volumes:
      - name: registry-cm
        configMap:
          name: registry-cm
          items:
            - key: passwd
              path: passwd
      - name: registry-data					#pvc
        persistentVolumeClaim:
          claimName: registry-pvc			#pvc
---
EOF
kubectl apply -f deploy-registy.yaml

验证镜像仓库是否可用

#每个k8s节点都要配置镜像仓库地址
vim  /etc/docker/daemon.json 						
"insecure-registries": ["192.168.158.128:5000"]
#重启docker
systemctl restart docker
#登录镜像仓库
docker login -u admin -p admin123456 192.168.158.128:5000
#为镜像打个tag
docker tag busybox:1.24.1 192.168.158.128:5000/busybox:1.24.1
#推送镜像到镜像仓库,成功
docker push 192.168.158.128:5000/busybox:1.24.1

#查看后端存储,已经持久化了
[root@node2 ~]# ls /k8s_data/default-registry-pvc-pvc-d336e2f7-7bcc-4a79-8e3f-3ccff46c78c9/docker/registry/v2/repositories/
busybox
[root@node2 ~]# 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值