Docker笔记之私有仓库

Docker仓库分为公有仓库和私有仓库。

  • 公有仓库值的是Docker Hub(官方库)等开放给用户使用的仓库。
  • 私有仓库指的是由用户自行搭建的存放镜像的环境。
    Docker Hub一般情况下,都是从上边下拉对应的环境,其他的用的不太多。这里主要做一下私有仓库的各种笔记。

在搭建之前必须安装docker,然后从docker hub 下拉registry,registry是一个特殊的镜像,主要用来搭建仓库。

0. 搭建无认证私有仓库

# 第一步: 在仓库的服器上运行registry
docker run -d  --restart always --name my_registry -p 5000:5000 -v /my_registry/registry:/var/lib/registry registry

执行完这一步,相当于私有仓库搭好了,在本地浏览器上查看 ip:5000/v2/_catalog中可以查看到存放的镜像列表,现在为空:`{repositories: [ ]}`
参数含义:
 --restart  是否跟随docker服务重启
 --name 仓库名称
 -p  端口映射,前为宿主机的端口,后边是容器的端口,容器端口不可变
 -v 挂载数据卷,防止容器删除导致上传的镜像丢失 ,/var/lib/registry路径是固定的

# 第二步:重命名需要上传的镜像,在本地服务器上执行
  docker tag IMAGES ip:port/IMAGES_NAME   # 必须重命名为这种格式
# 第三步:利用docker push 上传刚才重命名的镜像
  docker push ip:port/IMAGES_NAME
  # 不出意外,会抛出以下错误
    The push refers to repository [ip:5000/centos_test]
    Get https://ip:5000/v2/: http: server gave HTTP response to HTTPS client
这个错误是因为服务器没证书,不支持https导致,这时候只需要在服务其的配置文件/etc/docker/daemon.json添加 "insecure-registries":[ip:port],然后再执行push

1.搭建带认证的私有仓库

# 第一步:在服务器中,创建存放认证用户名和密码的文件
   mkdir -p /my_registry/auth 
# 第二步:在服务器上,创建密码验证文件。
   docker run  --entrypoint htpassword registry -Bbn username password > /my_registry/auth /htpassword 
# 第三步:重新启东仓库镜像
    docker run -d -p 5001:5000 --restart=always 
    --name docker-registry 
    -v /my_registry/registry:/var/lib/registry
    -v /my_registry/auth:/auth 
    -e "REGISTRY_AUTH=htpasswd" 
    -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"
    -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry
参数: -p、--restart、--name,-v不再赘述
  第二个-v 表示容器验证文件挂载路径,将宿主机的验证文件复制到容器中的空/auth下,使容器使用宿主机上生成的文件
  REGISTRY_AUTH 、REGISTRY_AUTH_HTPASSWD_REALM 验证方式,固定写法
  REGISTRY_AUTH_HTPASSWD_PATH:容器中验证文件的路径,要写文件的路径
# 第四步:重命名需要上传的镜像,在本地服务器上执行
  docker tag IMAGES ip:port/IMAGES_NAME   # 必须重命名为这种格式
# 第五步:利用docker push 上传刚才重命名的镜像
  docker push ip:port/IMAGES_NAME

1. 查看私有仓库中的镜像

1.1 在本地shell中可以通过curl进行查询,也可以在浏览器中通过http://ip:port/v2/_catalog进行访问:

无认证的私有仓库:
    curl -X GET http://ip:port/v2/_catalog
带认证的私有仓库
  curl -u username:password -X GET http://ip:port/v2/_catalog
  带认证的不带-u参数,因验证不通过会报如下错误:
    {"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"registry","Class":"","Name":"catalog","Action":"*"}]}]}

1.2 获取获取某个镜像的标签列表,也可以在浏览其中通过http:/v2/image_name/tags/list进行访问:

无认证的私有仓库:
    curl -X GET http://ip:port/v2/image_name/tags/list
带认证的私有仓库
  curl -u username:password -X GET http:/v2/image_name/tags/list

2.删除私有仓库中的镜像

第一步:查看digest
    curl -I --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -u dongxiaojian:dongxiaojian -X GET  http://ip:port/v2/centos_test/manifests/latest
    在返回值中的Docker-Content-Digest的值就是digest
第二步:删除镜像
    curl -u dongxiaojian:dongxiaojian -X DELETE ip:port/v2/centos_test/manifests/sha:365fc7f33107869dfcf2b3ba220ce0aa42e16d3f8e8b3c21d72af1ee622f0cf0
    这一步不一定成功,可能会抛出 {"errors":[{"code":"UNSUPPORTED","message":"The operation is unsupported."}]}异常
    解决方案:在启动registry时指定以下环境变量:-e REGISTRY_STORAGE_DELETE_ENABLED=true
第三步:进行垃圾回收
  看似已经删除了,其实硬盘地址并没有释放。是因为docker删除image只是删除的image的元数据信息。层数据并没有删除。现在进入registry中进行垃圾回收
  这里先坑着,稍后补充。可以参考博客:http://blog.51cto.com/302876016/1966816

注:其中带-u 都是带认证私有仓库的操作,如果是不需要认证的仓库,把这个参数去掉就行。关于删除镜像,进行垃圾回收大都是通过yum文件进行操作的,待我整体学习完了之后再回来填坑


作者:董小贱
链接:https://www.jianshu.com/p/3ef44bcfd177
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值