docker-镜像注册中心-registry实践

docker-镜像注册中心-registry实践

前言

  • registry - Docker Hub : https://hub.docker.com/_/registry
  • 一般情况下我们需要自己的私有仓库来存储自己的私有镜像,因此需要在内部自己搭建一个仓库中心,而docker已经为我们提供了registry,可以方便我们私有仓库的搭建
  • docker版的registry还欠缺的一点就是没有提供可视化的管理工具

实践

运行

  • 运行容器

    
    sudo docker run -d \
    -v /etc/localtime:/etc/localtime:ro \
    -v $PWD/registry:/var/lib/registry \
    -p 5000:5000 \
    --restart always \
    --name registry \
    registry:2.7
    
  • 上面的命令将会把上传的镜像放置在当前目录的registry目录下

  • 容器运行后访问(ip请根据实际宿主机的ip修改)http://192.168.25.215:5000/v2/ ,出现“{}”字符串则表示正常

  • 如果想修改registry容器里的监听端口,通过参数 -e REGISTRY_HTTP_ADDR,如

    sudo docker run -d \
    -v /etc/localtime:/etc/localtime:ro \
    -p 5001:5001 \
    -e REGISTRY_HTTP_ADDR=0.0.0.0:5001 \
    --restart always \
    --name registry \
    registry:2.7
    

推送push

  • 容器运行成功后即可向私有仓库推送镜像,这里以hello-world为例

  • 首先拉取hello-world的镜像

    sudo docker pull hello-world
    
  • 为hello-world打tag,比如192.168.25.215:5000/hwj/helloworld:1

    sudo docker tag hello-world 192.168.25.215:5000/hwj/helloworld:1
    
    • 其中ip和端口即为私有仓库的ip和端口;hwj表示项目,这里名称可以随意取;helloworld为镜像名,可以随意取;最后的1表示版本号,可以随意取,不写默认latest
  • 执行以下命令将helloworld推送到私有仓库

    sudo docker push 192.168.25.215:5000/hwj/helloworld:1
    
  • 推送时遇到错误:

    The push refers to repository [192.168.25.215:5000/hwj/helloworld:1]
    Get https://192.168.25.215:5000/v2/: http: server gave HTTP response to HTTPS client

  • 原因是docker私有仓库服务器,默认是基于https传输的,所以我们需要在客户端192.168.25.215做相关设置,不使用https传输

  • 修改/etc/docker/daemon.json,增加"insecure-registries": [“192.168.25.215:5000”],如下
    {
    “insecure-registries”:[“192.168.25.215:5000”]
    }

  • 保存后重启下docker

    service docker restart 
     # 或者
    systemctl daemon-reload
    systemctl restart docker
    
  • 再此执行原先的推送命令,推送成功

  • 此时访问 http://192.168.25.215:5000/v2/_catalog ,可以看到已经推送成功的镜像helloworld

拉取pull

  • 如果想拉取私有仓库的镜像,那么则需要加上私有仓库服务的ip和端口,如

    sudo docker pull 192.168.25.215:5000/hwj/helloworld
    
  • 或者在/etc/docker/daemon.json中的registry-mirrors添加 http://192.168.25.215:5000
    {
    “registry-mirrors”: [“http://192.168.25.215:5000”],
    “insecure-registries”:[“192.168.25.215:5000”]
    }

  • 然后重启docker

  • 之后就可以直接使用名称下载,不用每次都加上ip和端口了

    sudo docker pull hwj/helloworld
    

镜像操作api

列出所有的镜像仓库

curl -X GET http://<registry_ip>:<registry_port>/v2/_catalog

  • 输出例子:

    {"repositories":["busybox"]}
    

列出指定镜像的所有标签

curl -X GET http://<registry_ip>:<registry_port>/v2/<image_name>/tags/list

  • 输出例子:
    {"name":"busybox","tags":["latest","0.0.1","0.0.2"]}
    

可视化

  • registry本身并没有提供管理工具,对于镜像的管理只能通过接口调用,不是很方便
  • 在这里推荐用harbor来搭建私有仓库中心,harbor已经包含了registry,并且提供了可视化的管理页面
  • 详情请看 https://blog.csdn.net/huweijian5/article/details/89873618 ,里面有完整的安装介绍

参考

Docker学习之Docker Registry - 简书
https://www.jianshu.com/p/fef890c4d1c2
手把手教你搭建Docker私有仓库 - 屌丝大叔的笔记 - 博客园
https://www.cnblogs.com/subendong/p/9029495.html

发布了126 篇原创文章 · 获赞 37 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/huweijian5/article/details/89641880