• Docker——Registry搭建私有镜像仓库


    前言

    在 Docker 中,当我们执行 docker pull xxx 的时候,它实际上是从 registry.hub.docker.com 这个地址去查找,这就是Docker公司为我们提供的公共仓库,上面的镜像,大家都可以看到,也可以使用。

    所以,我们也可以带上仓库地址去拉取镜像,如:docker pull jenkins

    在公司中使用 Docker,我们不可能把商业项目上传到公共仓库中,所以要搭建私有仓库。

    1.部署仓库

    准备1台安装好docker的服务器 (主机名为registry):docker私有仓库服务器,运行registry容器。

    • 下载镜像registry
    docker pull registry:2.6.0

    注:这里指定了2.6.0版本的,因为最新版本的会有问题,文章后面会提到

    • 查看镜像registry
    docker images

    •  运行registry容器
    docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2.6.0

     参数说明
      -d:在后台运行;
      -v:把宿主机的/opt/registry目录绑定 到 容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;
      -p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了;
      --restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器;
      --name registry:创建容器命名为registry,你可以随便命名;
      registry:2.6.0:这个是刚才pull下来的镜像;

    • 查看镜像仓库中的镜像
    curl http://127.0.0.1:5000/v2/_catalog

     注:现在是空的,因为才刚运行,里面没有任何镜像内容。

    2.测试仓库

    准备1台安装好docker的服务器,在这台服务器上下载一个测试镜像busybox,然后上传到registry服务器进行测试。

    • 下载镜像whalesay
    docker pull docker/whalesay

    • 查看镜像whalesay
    docker images

    • 为镜像打标签
    docker tag docker/whalesay 10.0.29.22:5000/cwx/whalesay:v1

     参数说明

      docker/whalesay 这是源镜像,也是刚才pull下来的镜像文件;

      10.0.29.22:5000/cwx/whalesay:v1:这是目标镜像,也是registry私有镜像服务器的IP地址和端口;

    • 上传到镜像服务器
    docker push 10.0.29.22:5000/cwx/whalesay:v1

    1、注意了,如果这里报以下错(CentOS 7):

    解决方法:需要https的方法才能上传,我们可以修改docker配置文件vi /etc/docker/daemon.json 添加 insecure-registries配置信息来解决: 

    [root@node ~]# vim /etc/docker/daemon.json 
    {
      "registry-mirrors": [ "https://registry.docker-cn.com"],
      //关键配置项,将仓库将入到不安全的仓库列表中
      "insecure-registries": [ "10.0.29.22:5000"]
    }

    然后重启docker服务:

    systemctl daemon-reload
    systemctl restart docker

    2、注意了,如果这里报以下错(CentOS 6.5):

    则在/etc/sysconfig/docker文件添加以下选项:

    注:上面的IP映射的就是10.0.29.22:5000

    然后重启docker服务:

    service docker restart

    再次上传镜像,【registry版本2.7.0或更高】会报以下的错误:

    查看registry服务器容器的日志:

    docker logs -f -t --since="2020-01-15" --tail=500 registry        #(其中 -f 为查看实时日志, -t为时间 --since为从何时起)

    解决方法:版本问题,把registry版本降到2.6.0或以下。

    镜像上传成功结果如下:

    • 测试下载镜像

    先删除本地的镜像:

    docker rmi 10.0.29.22:5000/cwx/whalesay:v1

    再从搭建好的仓库中下载镜像:

    docker pull 10.0.29.22:5000/cwx/whalesay:v1

    •  列出所有镜像
    curl  http://10.0.29.22:5000/v2/_catalog

    • 列出cwx/whalesay镜像有哪些tag
    curl  http://10.0.29.22:5000/v2/cwx/whalesay/tags/list

    3.删除镜像

    官方推荐删除方案

    • registry默认配置不允许删除

      删除需要在启动时指定: -e REGISTRY_STORAGE_DELETE_ENABLED=true

    docker run -d -e REGISTRY_STORAGE_DELETE_ENABLED=true -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2.6.0
    • 删除镜像操作

      1)找出你想要的镜像名称的tag

    curl <protocol>://<registry_host>/v2/<镜像名>/tags/list
     例如:
    curl http://10.0.29.104:5000/v2/ucop/tags/list

      2) 拿到digest_hash参数

    curl  --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -I -X GET http://<仓库地址>/v2/<镜像名>/manifests/<tag>

      例如:

    curl --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -I -X GET http://10.0.29.104:5000/v2/ucop/manifests/dev-yc_1

      3)复制digest_hash

    Docker-Content-Digest: <digest_hash>

      4)删除清单

    curl -I -X DELETE <protocol>://<registry_host>/v2/<repo_name>/manifests/<digest_hash>

      例如:

    curl -I -X DELETE http://10.0.29.104:5000/v2/ucop/manifests/sha256:3dcf7bdec83462c44c1d717dc0c76c56067f966dc4706a2e8d16eb45261a5985

    • registry删除镜像时,仅删除索引,无法清理文件

      要真正删除文件系统内的文件,需执行以下垃圾回收命令:

    docker exec -it <registry_container_id> bin/registry garbage-collect <path_to_registry_config>

      例如:

    docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml

    注:注意2.4版本以上的registry才有此功能

    简易版删除

      1)打开镜像的存储目录,如有-V操作打开挂载目录也可以,删除镜像文件夹

    docker exec <容器名> rm -rf /var/lib/registry/docker/registry/v2/repositories/<镜像名>

      2)执行垃圾回收操作

    docker exec -it <registry_container_id> bin/registry garbage-collect <path_to_registry_config>

    注:注意2.4版本以上的registry才有此功能

  • 相关阅读:
    List集合中的对象按照某个字段去重实现
    菜单--微信提醒
    fastTime从后台传过来显示格式的处理
    彻底卸载Oracle
    关于这次安装Oracle
    关于下拉选择删选最基本一例(分享内容)
    马拉松参赛人员显示(瞬逝版)
    马拉松参赛人员旧版本最终版(私藏版)
    win 10 初始环境变量
    AngularJS输出helloworld
  • 原文地址:https://www.cnblogs.com/caoweixiong/p/12197602.html
Copyright © 2020-2023  润新知