如果不想用私有镜像库,你可以用docker的库 https://hub.docker.com

环境准备

环境:两个装有Docker 17.09.0-ce 的centos7虚拟机 
虚拟机一:192.168.0.154 用户开发机 
虚拟机二:192.168.0.153 用作私有仓库


搭建私有仓库


在153机器上下载registry镜像

  1. docker pull registry

下载完之后我们通过该镜像启动一个容器

  1. docker run -d -p 5000:5000 registry

默认情况下,会将仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器内的/tmp/registry下,

不过具体的情况还是要到容器里去看

先启动容器

  1. docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
  2. b4c21ca8cf8a23ea72e0471909742541ffc312ea5cf492486b5bdc3130179864

可以看到容器存放位置不在/tmp 下

我们接着来查找下,挂载位置到底在哪里

可以看到registry 挂载目录是 在 /var/lib/registry 下

我们重新启动下 registry

  1. docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry  -v /data/config.yml:/etc/docker/registry/config.yml  registry 

/data/config.yml 这个是什么呢?我们在下面删除仓库镜像介绍

这里需要说明一点,在启动仓库时,需在配置文件中的storage配置中增加delete=true配置项,允许删除镜像。默认的镜像是没有这个参数

  1. cat config.yml
  2.  
  3. version: 0.1
  4. log:
  5. fields:
  6. service: registry
  7. storage:
  8. delete:
  9. enabled: true
  10. cache:
  11. blobdescriptor: inmemory
  12. filesystem:
  13. rootdirectory: /var/lib/registry
  14. http:
  15. addr: :5000
  16. headers:
  17. X-Content-Type-Options: [nosniff]
  18. health:
  19. storagedriver:
  20. enabled: true
  21. interval: 10s
  22. threshold: 3

  

可以看到我们启动了一个容器,地址为:192.168.0.153:5000。

测试

接下来我们就要操作把一个本地镜像push到私有仓库中。首先在153机器下pull一个比较小的镜像来测试(此处使用的是busybox)。

  1. docker pull busybox

接下来修改一下该镜像的tag。

  1. docker tag busybox 192.168.0.153:5000/busybox

接下来把打了tag的镜像上传到私有仓库。

  1. docker push 192.168.0.153:5000/busybox

可以看到 push 失败:

  1. Error: Invalid registry endpoint https://192.168.0.153:5000/v1/: Get https://192.168.0.153:5000/v1/_ping: dial tcp 192.168.0.153:5000: connection refused. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry 192.168.112.136:5000` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/192.168.0.153:5000/ca.crt

因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。修改docker启动配置文件:

  1. vim /usr/lib/systemd/system/docker.service

找到 ExecStart

  1. ExecStart=/usr/bin/dockerd --insecure-registry 192.168.0.153:5000

红色字体为添加的

重启docker:

  1. systemctl daemon-reload
  2. systemctl restart docker

重启完之后我们再次运行推送命令,把本地镜像推送到私有服务器上。

  1. docker push 192.168.0.153:5000/busybox

接下来我们从私有仓库中pull下来该镜像。

  1. sudo docker pull 192.168.0.153:5000/busybox

查看镜像

  1. # curl -XGET http://registry:5000/v2/_catalog
  2. # curl -XGET http://registry:5000/v2/image_name/tags/list

Registry删除镜像、垃圾回收

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

打包上传镜像

  1. [root@master scripts]# docker tag alpine:v1 192.168.0.153:5000/fbgweb:v1
  2. [root@master scripts]# docker push 192.168.0.153:5000/fbgweb:v1
  3. The push refers to a repository [192.168.0.153:5000/fbgweb]
  4. e30c8796115a: Pushed
  5. 9922d8737f34: Pushed
  6. c3cc0aba53da: Pushed
  7. f73b42f6c905: Pushed
  8. 4a3fe911d00f: Pushed
  9. 187a385eda60: Pushed
  10. 0e23c00d0c30: Pushed
  11. d221a7f5318b: Pushed
  12. 7e2d3752fd4f: Pushed
  13. v1: digest: sha256:6a67ba482a8dd4f8143ac96b1dcffa5e45af95b8d3e37aeba72401a5afd7ab8e size: 2204

查看仓库镜像 (查看仓库镜像脚本 get.py

  1. [root@master scripts]# python get.py
  2. 192.168.0.153:5000/fbgweb:v1
  3. 192.168.0.153:5000/nginx:1.7.9
  4. 192.168.0.153:5000/nginx:1.8

查看数据进行仓库容器中,通过du命令查看大小

  1. [root@master ~]# docker exec -it f70d0c79e6d546d4 sh
  2. ~ # du -chs /var/lib/registry/
  3. 182.4M /var/lib/registry/
  4. 182.4M total

删除镜像

删除镜像对应的API如下:

  1. DELETE /v2/<name>/manifests/<reference>

name:镜像名称

reference: 镜像对应sha256值

发送请求,删除刚才上传的镜像

  1. [root@master scripts]# curl -I -X DELETE http://192.168.0.153:5000/v2/fbgweb/manifests/sha256:6a67ba482a8dd4f8143ac96b1dcffa5e45af95b8d3e37aeba72401a5afd7ab8e
  2. HTTP/1.1 202 Accepted
  3. Docker-Distribution-Api-Version: registry/2.0
  4. X-Content-Type-Options: nosniff
  5. Date: Mon, 13 Nov 2017 13:04:24 GMT
  6. Content-Length: 0
  7. Content-Type: text/plain; charset=utf-8

查看镜像

  1. [root@master scripts]# python get.py
  2. 192.168.0.153:5000/nginx:1.7.9
  3. 192.168.0.153:5000/nginx:1.8
  4. 192.168.0.153:5000/nginx:latest

可以看到镜像索引已经被删除

查看数据大小

  1. [root@master ~]# docker exec -it f70d0c79e6d546d4 sh
  2. ~ # du -chs /var/lib/registry/
  3. 182.4M /var/lib/registry/
  4. 182.4M total

可以看到数据大小没有变化(只删除了元数据)

垃圾回收

进行容器执行垃圾回收命令

  1. ~ # registry garbage-collect /etc/docker/registry/config.yml
  2. 31 blobs marked, 5 blobs eligible for deletion
  3. blob eligible for deletion: sha256:5e7cf06c8745d0985f94191c60aad8b87371c8a674162525bff0efccdb805931
  4. INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/5e/5e7cf06c8745d0985f94191c60aad8b87371c8a674162525bff0efccdb805931 go.version=go1.7.6 instance.id=c38f4c35-9914-4b77-a59f-ea584137fae0
  5. blob eligible for deletion: sha256:6a67ba482a8dd4f8143ac96b1dcffa5e45af95b8d3e37aeba72401a5afd7ab8e
  6. INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/6a/6a67ba482a8dd4f8143ac96b1dcffa5e45af95b8d3e37aeba72401a5afd7ab8e go.version=go1.7.6 instance.id=c38f4c35-9914-4b77-a59f-ea584137fae0
  7. blob eligible for deletion: sha256:966e2fb5980b2a854c03551418af0b2ee2bef082dfaae075026d00fa36620960
  8. INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/96/966e2fb5980b2a854c03551418af0b2ee2bef082dfaae075026d00fa36620960 go.version=go1.7.6 instance.id=c38f4c35-9914-4b77-a59f-ea584137fae0
  9. blob eligible for deletion: sha256:a122ad1ef7a033582abfc7bae980cc11bdcc2d19bed7d8ea5b7efc50d16456c8
  10. INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/a1/a122ad1ef7a033582abfc7bae980cc11bdcc2d19bed7d8ea5b7efc50d16456c8 go.version=go1.7.6 instance.id=c38f4c35-9914-4b77-a59f-ea584137fae0
  11. blob eligible for deletion: sha256:b29205236f1d3eb6143e95f3a412a8f21a16a10b09c7aee28ecba3d803832285
  12. INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/b2/b29205236f1d3eb6143e95f3a412a8f21a16a10b09c7aee28ecba3d803832285 go.version=go1.7.6 instance.id=c38f4c35-9914-4b77-a59f-ea584137fae0

查看数据大小

  1. ~ # du -chs /var/lib/registry/
  2. 159.5M /var/lib/registry/
  3. 159.5M total

可以看到镜像数据已被删除

centos7 Docker私有仓库搭建及删除镜像的更多相关文章

  1. CentOS7 Docker私有仓库搭建及删除镜像 【转】

    文章来源:centos7 Docker私有仓库搭建及删除镜像 如果不想用私有镜像库,你可以用docker的库 https://hub.docker.com 环境准备 环境:两个装有Docker 17. ...

  2. centos7 docker私有仓库搭建

    习Docker的过程中Docker的私有仓库一直没能成功,就是因为CentOS 6.x和CentOS 7默认引入了支持https认证,每次在push和pull的时候都会报错,今天是周末,利用一天的时间 ...

  3. Docker学习笔记 — Docker私有仓库搭建

    Docker学习笔记 — Docker私有仓库搭建   目录(?)[-] 环境准备 搭建私有仓库 测试 管理仓库中的镜像 查询 删除 Registry V2   和Mavan的管理一样,Dockers ...

  4. docker私有仓库搭建(ubuntu 14.04和centos7)

    最近是在做一个关于docker云化的项目,马上就要开始实战.下午先做了一个私有仓库搭建的实验,先大概做个笔记,有兴趣的蛮看一下吧. 先在所有机子上都安装上docker,我的是两台ubuntu,分别是1 ...

  5. 删除docker私有仓库中的镜像

    1.搭建私有仓库 (1)拉取私有仓库镜像 docker pull registry(2)启动私有仓库容器 docker run ‐di ‐‐name=registry ‐p 5000:5000 reg ...

  6. docker学习---搭建Docker私有库及删除库内镜像

    环境准备系统: cat /etc/redhat-release CentOS Linux release (Core) 主机两台,分别是docker私有库服务器(IP 192.168.121.121) ...

  7. Docker学习笔记 — Docker私有仓库搭建【转载】

    标签: Docker 2015-03-10 21:08 24190人阅读 评论(0) 收藏 举报  分类: Docker(26)    目录(?)[+]   和Mavan的管理一样,Dockers不仅 ...

  8. docker 私有仓库搭建

    知识基础:ubuntu系统安装,docker安装,了解docker的基础知识 下载镜像(如果下载2版本以上的需要配置ssl证书,这里先用0.9.1的演示) root@ubuntu:/# docker ...

  9. CentOS环境下Docker私有仓库搭建

    本文讲述如何搭建docker私有仓库. 有了docker hub,为什么还要搭建docker私有仓库? 1.性能考虑:docker hub的访问要通过互联网,性能太低. 2.安全性:更多的时候,镜像不 ...

随机推荐

  1. Perl导入代码文件

    从函数复用开始:eval和do执行perl文件 当我们定义了一个功能比较通用的子程序,比如获取数值的绝对值.想要到处使用这个子程序,就得不断复制.粘贴这段绝对值函数的定义文本.显然,这是不太理想的方式 ...

  2. 翻译:group_concat()函数(已提交到MariaDB官方手册)

    本文为mariadb官方手册:group_concat()函数的译文. 原文:https://mariadb.com/kb/en/group_concat/ 我提交到MariaDB官方手册的译文:ht ...

  3. [转]c# System.IO.Ports SerialPort Class

    本文转自:https://docs.microsoft.com/en-us/dotnet/api/system.io.ports.serialport?redirectedfrom=MSDN& ...

  4. C#通过虚方法实现方法重写—多态。

    class Program { //希望person存的是哪个类的对象就调用哪个类的方法 //第一步 将父类中对应方法家virtual关键字 变为虚方法(子类可重写) //子类中方法用override ...

  5. 45.work_struct和delayed_work的工作队列使用

    介绍 在中断处理中,经常用到工作队列,这样便能缩短中断处理时的时间 中断中通过调用schedule_work(work)来通知内核线程,然后中断结束后,再去继续执行work对应的func函数 示例 当 ...

  6. MySQL指令笔记

    -- 双中划线+空格: 单行注释, 与#相同 -- 链接数据库 mysql.exe -h localhost -P3306 -uroot -p -- 查看服务器的对外处理字符集 show variab ...

  7. java并发编程小结

    旭日Follow_24 的CSDN 博客 ,全文地址请点击: https://blog.csdn.net/xuri24/article/details/82078467 线程简介: 线程是操作系统调度 ...

  8. mybatis加载属性

    1): <dataSource>的<property>标签加载属性 在 properties 元素体内定义的属性首先被读取 然后会读取 properties 元素中 resou ...

  9. shell 备份 source code

    1. 利用shell脚本备份源码 首先mkdir创建三个目录  backup存放备份代码,script 存放shell脚本,www存放源码 2.创建文件 3. 编写shell脚本 #!bin/sh b ...

  10. vue+webpack 安装常见插件

    html-webpack-plugin 插件地址:https://www.npmjs.com/package...安装指令: npm install html-webpack-plugin --sav ...