一、使用registry镜像创建私有仓库
安装Docker后,可以通过官方提供的registry镜像来简单搭建本地私有仓库环境
$ docker run -d -p 5000:4000 registry
// 这将自动下载并启动一个registry容器,创建本地的私有仓库服务。
默认情况下,会将仓库创建在容器的 /tmp/registry目录下。也可以通过
-v参数来指定镜像文件存放在本地的指定路径。例如:
$ docker run -d -p 5000:4000 -v /app/developers/liq/docker/registry:/var/lib/registry -v /app/developers/liq/docker/registry/config.yml:/etc/docker/registry/config.yml registry
其中,5000是主机对应端口,4000是容器对应端口
查看registry启动日志:docker logs containerId
二、管理私有仓库
首先私有仓库的地址:192.168.10.222:4000
1、查看系统已有镜像
$ docker images
2、标记镜像
$ docker tag django:latest 192.168.10.222:5000/local-django
其中:
192.168.10.222:5000 是主机对外映射地址
local-django 是镜像名称
$ docker images
3、上传镜像
$ docker push 192.168.10.222:5000/local-django
报错问题解决:
错误:
The push refers to repository [192.168.10.222:5000/local-django]
Get https://192.168.10.222:5000/v2/: http: server gave HTTP response to HTTPS client
解决:
步骤1:
在/etc/docker下创建daemon.json,内容如下:
{
"registry-mirrors": ["https://registry.docker-cn.com","http://192.168.10.222:5000"],
"insecure-registries":["192.168.10.222:5000"]
}
步骤2:
systemctl restart docker.service // 重启docker
或 service docker start/restart
步骤3:
重启容器
4、查看仓库的镜像(v2版本API)
$ curl http://192.168.10.222:5000/v2/local-django/tags/list
// 具体镜像信息
其中:
192.168.10.222:5000 是主机对外映射地址
local-django 是镜像名称
$ curl http://192.168.10.222:5000/v2/_catalog // 镜像列表
5、进入私有仓库
$ docker exec -it containerId sh
6、删除私有仓库镜像
(1)上传镜像的Etag
curl --header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
-I \
-X HEAD http://192.168.10.222:5000/v2/local-ubuntu/manifests/latest
(2) 删除本地数据
挂载到本机目录的数据
(3) 发送请求,删除镜像的元数据
curl -I -X DELETE http://192.168.10.222:5000/v2/local-ubuntu/manifests/sha256:92c414f2cf966fd4c6d60bc71180737bf878eeca3654cad82991a1e02d885d37
(4) 进入容器执行垃圾回收
registry garbage-collect /etc/docker/registry/config.yml
(5)重启registry
实际探索发现,其实只要步骤2和步骤5就可以了,执行步骤2、3、4没用
鸡肋:不知道什么时候Docker才能修复删除私库镜像删除不掉的bug