安装docker
参考文章:k8s搭建
仓库搭建
私有仓库的搭建直接通过官方提供的registry镜像提供的功能,非常方便。
1、下载镜像 docker pull registry
2、启动容器
docker run -d \
-v /opt/data/registry:/var/lib/registry \
-p 5000:5000 \
--restart=always \
--name registry \
registry
其中,
/opt/data/registry是镜像仓库的本地目录;
/var/lib/registry是镜像仓库的临时目录,容器重启或者销毁仓库中的镜像都会消失;
--restart=always设置docker启动的时,已有的容器跟着启动。
功能测试
假设镜像仓库所在服务器的IP地址为IP,则:
查看仓库中的镜像:
# 查看所有镜像,{"repositories":["busybox"]}
curl -XGET http://IP:5000/v2/_catalog
# 查看某个镜像详细信息,{"name":"busybox","tags":["latest"]}
curl -XGET http://IP:5000/v2/busybox/tags/list
上传镜像:
# 从公共仓库中下载busybox
docker pull busybox
# 修改标签
docker tag busybox IP:5000/busybox
# 上传
docker push IP:5000/busybox
下载镜像:
docker pull IP:5000/busybox
镜像删除
私有仓库默认是不支持删除,如果要支持删除功能,需要在启动时设置参数-e REGISTRY_STORAGE_DELETE_ENABLED="true",即启动命令类似👇:
docker run -d \
-v /opt/data/registry:/var/lib/registry \
-p 5000:5000 \
-e REGISTRY_STORAGE_DELETE_ENABLED="true" \
--restart=always \
--name registry \
registry
获取Etag数据
$ curl -X GET \
http://IP:PORT/v2/仓库名称/manifests/镜像的tag \
-H 'Accept: application/vnd.docker.distribution.manifest.v2+json'
Content-Length →2212
Content-Type →application/vnd.docker.distribution.manifest.v2+json
Date →Tue, 17 Sep 2019 06:32:29 GMT
Docker-Content-Digest →sha256:77cb3765680cb86e5a1fd203cd25ed35926f5a6390dd3c01ee1d5ea692642927
Docker-Distribution-Api-Version →registry/2.0
Etag →"sha256:77cb3765680cb86e5a1fd203cd25ed35926f5a6390dd3c01ee1d5ea692642927"
X-Content-Type-Options →nosniff
其中Etag就是删除的时候需要使用的参数。
删除示例:
$ curl -X DELETE \
http://10.255.73.195:5000/v2/inteligt-api/manifests/sha256:02651c6483c383e7c31fb641abdcb0ac6955d19a1cc6a6bd01cb9c9f488a4675(上面Etag数据) \
-H 'Cache-Control: no-cache' \
-H 'Postman-Token: ffe84c00-952e-4359-bf71-fd6ac5e37545'
查询镜像的Tag列表中是否还存在版本,如果删除成功,则不再出现。
$ curl -XGET http://IP:PORT/v2/镜像名称/tags/list
{"name":"inteligt-api","tags":["v4","v26","v6","v51","v50","v2.0.0","v18","v48","v2","v32","v3","v12","v30","v28","v11","v1.0.0","v23","v31","v49","v13","v24","v21"]}
删除版本,并不是真的删除,被删除的镜像依然会占用磁盘空间,需要进入清理。
# 进入私有仓库容器
docker exec -it e812c9f326b0(仓库容器编号) sh
# 清理残余文件
registry garbage-collect /etc/docker/registry/config.yml
遇到的问题
The push refers to a repository [IP:5000/busybox]
Get https://IP:5000/v1/_ping: http: server gave HTTP response to HTTPS client
docker仓库默认使用https的访问方式。在没有部署证书情况下,需要在使用docker私有仓库的机器上的daemon.json文件中配置insecure-registries为仓库地址和端口。
vim /etc/docker/daemon.json
# 配置json文件 { "insecure-registries" : ["IP:5000"] }
systemctl restart docker.service
# 启动docker
另外,在网上看到可以直接在仓库所在的机器的配置
vi /usr/lib/systemd/system/docker.service
# 设置如下,但是没有起效果的,待解决
# ExecStart=/usr/bin/dockerd --insecure-registry IP:5000
欢迎关注公号:程序员的金融圈
一个探讨技术,金融,赚钱的小圈子,为你提供最有味道的内容,日日更新!