使用registry镜像创建私有仓库
部署环境是CentOS7.5
到docker仓库pull镜像
docker pull registry
创建一个自定义配置文件:config.yml
version: 0.1
log:
fields:
service: registry
storage:
#添加delete配置,是否允许删除仓库镜像,默认是false,这里设置成true
delete:
enabled: 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
接下来运行registry镜像
#创建目录,将config.yml放在目录下
mkdir /data/dockerhub/registry -p && mv config.yml /data/dockerhub
#运行registry容器
docker run --name registry -d -p 5000:5000 -v /data/dockerhub/registry:/var/lib/registry -v /data/dockerhub/config.yml:/etc/docker/registry/config.yml registry
接下来便是测试
#
docker pull nginx:1.9.1
# 假设linux主机的IP是192.168.1.2,那么这里修改tag为仓库的tag
docker tag nginx:1.9.1 192.168.1.2:5000/nginx:1.9.1
# 添加安全配置[以便pull,push的时候报错
# 报错的原因为https与http的问题 docker->registry:https,registry只提供http服务]
sed -i "s/ExecStart=\/usr\/bin\/dockerd/ExecStart=\/usr\/bin\/dockerd --insecure-registry 192.168.1.2:5000/" /usr/lib/systemd/system/docker.service
# 重启docker
systemctl daemon-reload
systemctl restart docker
#上传镜像到私有仓库
docker push 192.168.1.2:5000/nginx:1.9.1
# 需要注意的是添加安全配置是在需要pull,push的主机上都要添加,当其他主机访问时,其他主机也需要做安全配置
# pull
docker pull 192.168.1.2:5000/nginx:1.9.1
最后我们的上传的文件怎么管理呢
## 查看镜像列表[可以直接用curl发送get请求查看]
curl -XGET http://192.168.1.2:5000/v2/_catalog
## 查看单个镜像的详情[这里以nginx为例]
curl -XGET http://192.168.1.2:5000/v2/nginx/tags/list
## 如果镜像较多可以镜像分页显示,传入参数n=<integer>
# 语法如下,即在查询请求上添加参数:GET /v2/<name>/tags/list?n=<integer>
## 删除镜像[请注意sha256的值,是上传后的镜像独有的,push之后会显示到终端]
curl -I -X DELETE http://192.168.1.2:5000/v2/nginx/manifests/sha256:a42a428525996f3a84d466ee628a074cac568e0e8c99b5d6f7398be342337039
#删除后会发现nginx的tags由之前的1.9.1变成了null
curl -XGET http://192.168.1.2:5000/v2/nginx/tags/list
#此时我们其实只是删除了元数据,并没有删除层数据
#下面我们进入容器查看registry的使用量
docker exec -it registry sh
#进入容器后,执行
du -chs /var/lib/registry
#接着使用registry的垃圾回收机制
registry garbage-collect /etc/docker/registry/config.yml
#然后再查看/var/lib/registry
du -chs /var/lib/registry
#此时的层数据已经删除了