zoukankan      html  css  js  c++  java
  • centos7.3 docker registry(使用版本 2.6.1) 私有仓库 建立 查询 删除(未成功删除文件和元数据,好像是实际当前官方版本不支持) 回收垃圾(未成功,好像是实际当前官方版本不支持) 安全认证(仅限用户名密码)

    参考:http://www.cnblogs.com/xcloudbiz/articles/5497037.html

    参考:http://www.07net01.com/2016/08/1636248.html

    参考:http://blog.csdn.net/sunshingheavy/article/details/54143764

    参考:http://hanqunfeng.iteye.com/blog/2331644

    想尝试一下基本的

    mkdir /registry-var

    mkdir /registry-var/my_registry

    docker run  --restart=always --name registry -d -p 5000:5000 -v /registry-var/my_registry:/var/lib/registry registry

    push到该容器的镜像会保存在宿主机的/registry-var/my_registry下  如果使用比如nfs 分布式的存储等大概 就能双活了

     registry版本默认就是v2的了  并且我试验下来 镜像保存目录不是很多文章里的tmp 而是/var/lib

    • Create or modify /etc/docker/daemon.json

      { "insecure-registries":["192.168.2.200:5000"] }

    • 注意 192.168.2.200是我仓库的ip  也可以是域名 别傻乎乎照抄哦 哈哈哈 如果使用域名配合内部dns 加速分布式存储 应该就能多仓库实例多活了 (或者双docker+虚ip方案灾备高可用)
    • 注意:1.12以后 这里这个json文件会影响是否能登录http而非https的仓库,如果你的仓库是http的,没在这个json文件里加上端口域名或者ip,会报:
    • Error response from daemon: Get https://registry.x.com:5000/v2/: http: server gave HTTP response to HTTPS client 这个错

    • 加了以后就可以http协议登陆而不用把服务器端改成https

     systemctl restart docker.service

    完美解决。

    上传到私有仓库示例:

    首先存在 比如centos 镜像

    然后重新tag标记

    docker tag centos 192.168.2.200:5000/centos

    然后就可以推送到私库了

    docker push 192.168.2.200:5000/centos

    下载示例:

    docker pull 192.168.2.200:5000/centos

    补充参考:http://blog.csdn.net/kunloz520/article/details/52640581

    补充方案:

    下面是老的docker 大概1.10以前的做法 在1.12没用了

    vi /usr/lib/systemd/system/docker.service

    改这句 加后缀参数

    ExecStart=/usr/bin/dockerd --insecure-registry=192.168.2.200:5000


    [root@localhost ~]# systemctl daemon-reload
    [root@localhost ~]# systemctl restart docker.service

    查询有哪些镜像:(registry.x.com:5000是我假定的镜像地址和端口,-u是用户名密码)

    curl -u xxx:123abc -X GET http://registry.x.com:5000/v2/_catalog

    返回:{"repositories":["centos"]} 

    centos是我测试上传的一个centos最新版的镜像

    查看一个镜像有哪些tag 也就是版本吧

    curl -u xxx:123abc -X GET http://registry.x.com:5000/v2/centos/tags/list

    返回 

    {"name":"centos","tags":["latest"]}

    目前我只有唯一的tag latest

    加可以远程删除镜像 要改配置文件

    位置:/etc/docker/registry/config.yml

    version: 0.1
    log:
    fields:
    service: registry
    storage:
    delete:
    enable:true
    cache:
    blobdescriptor: inmemory
    filesystem:
    rootdirectory: /var/lib/registry
    http:
    addr: :5000
    headers:
    X-Content-Type-Options: [nosniff]
    health:
    storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

     

     构建仓库用的密码文件:username 123abc是用户名密码

    docker run --entrypoint htpasswd registry -Bbn username 123abc  >> /registry-var/auth/htpasswd)

    下面是完整的加上自定义配置文件、存储目录的命令了:

    docker run  -d -p 5000:5000 --restart=always    -v /registry-var/auth/:/auth/   -e "REGISTRY_AUTH=htpasswd"   -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"   -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd   -v /registry-var/my_registry:/var/lib/registry/   -v /registry-var/config.yml:/etc/docker/registry/config.yml  --name registry   registry

     docker run  -d -p 5000:5000 --restart=always    -v /registry-var/auth/:/auth/   -e "REGISTRY_AUTH=htpasswd"   -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"   -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" -e "REGISTRY_STORAGE_DELETE_ENABLED=true"   -v /registry-var/my_registry:/var/lib/registry/    --name registry   registry

    登陆测试:

     docker login -u 用户名-p 密码  registry.x.com:5000

    出来Login Succeeded

    就是成功了  可以随意push和pull了 当然  要加上registry.x.com:5000

    比如 docker pull registry.x.com:5000/centos

    删除镜像

    首先获取镜像名和tag 

    获取到镜像名列表

    curl -u xxx:123abc -X GET http://registry.x.com:5000/v2/_catalog 

    {"name":"centos","tags":["latest"]}

    name就是景象名 tag 就是tag了  连接起来 用: 才是具体的某个镜像

    根据镜像名获取tag列表 这里是镜像名centos 为例

    curl -u xxx:123abc  -X GET http://registry.x.com:5000/v2/centos/tags/list

    然后获取digest_hash参数

    curl -u xxx:123abc  --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -X GET http://registry.x  .com:5000/v2/centos/manifests/latest

    拿到:

    {
    "schemaVersion": 2,
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "config": {
    "mediaType": "application/vnd.docker.container.image.v1+json",
    "size": 1833,
    "digest": "sha256:3bee3060bfc81c061ce7069df35ce090593bda584d4ef464bc0f38086c11371d"
    },
    "layers": [
    {
    "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
    "size": 72267384,
    "digest": "sha256:d3aeceeb0289bf97c2474366cfcdaf66e29b409d45d6ed91be3335f16915f1b0"
    }
    ]

    根据某个sha删除

    (失败 表现为第二次运行可以发现不同的回复信息 表示找不到

    {"errors":[{"code":"MANIFEST_UNKNOWN","message":"manifest unknown"}]}

    但是实际并无效果的样子

     curl -u xxx:123abc -X DELETE http://registry.x.com:5000/v2/centos/manifests/sha256:3bee3060bfc81c061ce7069df35ce090593bda584d4ef464bc0f38086c11371d

    启动仓库容器的时候 加 -e "REGISTRY_STORAGE_DELETE_ENABLED=true"可以使得这句话第一次运行不报错 否则报错 说不支持的操作, 配置文件加不上delete 加了就报错{"errors":[{"code":"UNSUPPORTED","message":"The operation is unsupported."}]})

    回收数据(失败  配置文件加不上delete 加了报错 不加能运行但是并未删除文件)

    docker exec -it registry sh 进入registry容器内

    在容器内执行:

    registry garbage-collect config.yml

     下面来自摘录:

    使用第三方删除工具:
     
    安装:
    curl https://raw.githubusercontent.com/burnettk/delete-docker-registry-image/master/delete_docker_registry_image.py | sudo tee /usr/local/bin/delete_docker_registry_image >/dev/null
    sudo chmod a+x /usr/local/bin/delete_docker_registry_image
     
    指定本地仓库的路径,这里用环境变量没有起作用,所以使用了软连接方式
    sudo ln -s /docker_registry_dir/registryDir /opt/registry_data
     
    删除指定tag
    sudo /usr/local/bin/delete_docker_registry_image --image mysql:latest
    此时:

    sudo curl --cacert /docker_registry_dir/certs/domain.crt  --basic --user admin:admin https://docker.registry.server:5000/v2/_catalog

    {"repositories":["mysql","swarm"]}

     

    看到mysql还在,但是其下面对应的tag已经不见了:

    sudo curl --cacert /docker_registry_dir/certs/domain.crt  --basic --user admin:admin https://docker.registry.server:5000/v2/mysql/tags/list

    {"name":"mysql","tags":null}

     
    删除指定仓库
    sudo /usr/local/bin/delete_docker_registry_image --image mysql
    删除成功

    sudo curl --cacert /docker_registry_dir/certs/domain.crt  --basic --user admin:admin https://docker.registry.server:5000/v2/_catalog

    {"repositories":["swarm"]}

     

     

    https://docs.docker.com/registry/spec/api/#deleting-an-image

  • 相关阅读:
    js 数组去重的几种方式及原理
    js replace
    gulp的使用方法
    gulp 安装部署
    gulp 的5个方法
    fiddler 监听手机的http请求
    vsCood
    browser-sync使用方法
    browser-sync 安装
    npm 移除第三方包
  • 原文地址:https://www.cnblogs.com/sfissw/p/6071741.html
Copyright © 2011-2022 走看看