docker私有仓库搭建与管理

docker私有仓库搭建与管理(实践可行)

Docker仓库在2.1版本中支持了删除镜像的API,但这个删除操作只会删除镜像元数据,不会删除层数据。在2.4版本中对这一问题进行了解决,增加了一个垃圾回收命令,删除未被引用的层数据。

一 本地仓库搭建步骤

1.拉取最新的官方镜像registry:

[root@docker ~]$ docker pull registry
REPOSITORY   TAG           IMAGE ID            CREATED             VIRTUAL SIZE
registry     latest             ee585077aecf        21 months ago       33.19 MB

2.新建docker配置文件,其内容为

[root@LeoLinux tempfile]# cat /home/user/registry-conf/config.yml
version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
  delete:         # 注意这里是新加入的配置,有了这个配置就可以删除仓库中的镜像了
    enabled: true
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

3.启动容器

[root@docker ~]# docker run -d -p 5000:5000 --restart=always  --name registry -v /home/user/registry-conf/config.yml:/etc/docker/registry/config.yml -v /data/docker/registry:/var/lib/registry registry
  • –restart=always:容器的重启策略,always表示总是重启
  • 分别挂载容器的配置文件和容器中的镜像仓库的存放位置

4.修改访问协议:默认情况下docker仓库的访问是通过https来访问的,要想通过http访问需要增加一个配置,如下是CentOS 6.5中的配置方法:

# 方法一
[root@docker ~]# cat /etc/docker/daemon.json 
{
	"insecure-registries": ["XXX.XXX.XXX:5000"] # 修改这一行,xxx是你仓库的IP地址
}
[root@docker ~]# service docker restart

# 方法二
sudo vim /etc/sysconfig/docker
other_args="--insecure-registry xxx.xxx.xxx.xxx:5000" # 修改这一行,xxx是你仓库的IP地址
sudo /etc/init.d/docker restart

5.上传镜像

  • 首先给需要上传的镜像重命名,命名规则:IP:PORT/image_name:tag,例如:docker tag alpine:latest 192.168.1.1:5000/alpine:latest
  • 然后执行docker push命令:docker push 192.168.1.1:5000/alpine:latest

6.查看仓库

# curl -X GET http://registry:5000/v2/_catalog
# curl -X GET http://registry:5000/v2/image_name/tags/list

二 镜像删除和垃圾回收

1.首先获取镜像的sha256值:

# curl -I -X GET http://registry:5000/v2/your_image_name/manifests/your_image_name_tag
HTTP/1.1 200 OK
Content-Length: 1193
Content-Type: application/vnd.docker.distribution.manifest.v1+prettyjws
Docker-Content-Digest: sha256:01774f52c29287c2fde82a66fb7b2aa4fe7d36ab54ba816b21ae0fa1f212bff2
Docker-Distribution-Api-Version: registry/2.0
Etag: "sha256:01774f52c29287c2fde82a66fb7b2aa4fe7d36ab54ba816b21ae0fa1f212bff2"
X-Content-Type-Options: nosniff
Date: Tue, 30 Jul 2019 02:33:09 GMT
# 这是正常情况下的返回,在registry2.3及其以后的版本,为了防止误删除,在取 digest 的时候,必须提供一个特殊的头:
# curl --header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
  -I \
  -X HEAD http://registry:5000/v2/your_image_name/manifests/your_image_name_tag
# 否则删除的时候会报错{"errors":[{"code":"MANIFEST_UNKNOWN","message":"manifest unknown"}]}  

2.执行删除操作

curl  -X DELETE http://registry:5000/v2/your_image_name/manifests/sha256:01774f52c29287c2fde82a66fb7b2aa4fe7d36ab54ba816b21ae0fa1f212bff2

3.删除成功后,会发现实际上挂载的文件夹的大小并没有改变,还需要进入仓库容器执行垃圾回收,这下就能彻底删除了:

# docker exec -it reqistry_container_id /bin/sh
# registry garbage-collect /etc/docker/registry/config.yml 

参考

centos7 Docker私有仓库搭建及删除镜像

docker删除仓库中的镜像问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值