前言

在 Docker 中,当我们执行 docker pull xxx 的时候,它实际上是从 registry.hub.docker.com 这个地址去查找,这就是Docker公司为我们提供的公共仓库,上面的镜像,大家都可以看到,也可以使用。

所以,我们也可以带上仓库地址去拉取镜像,如:docker pull jenkins

在公司中使用 Docker,我们不可能把商业项目上传到公共仓库中,所以要搭建私有仓库。

1.部署仓库

准备1台安装好docker的服务器 (主机名为registry):docker私有仓库服务器,运行registry容器。

  • 下载镜像registry
docker pull registry:2.6.0

注:这里指定了2.6.0版本的,因为最新版本的会有问题,文章后面会提到

  • 查看镜像registry
docker images

  • 运行registry容器
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2.6.0

参数说明
  -d:在后台运行;
  -v:把宿主机的/opt/registry目录绑定 到 容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;
  -p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了;
  --restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器;
  --name registry:创建容器命名为registry,你可以随便命名;
  registry:2.6.0:这个是刚才pull下来的镜像;

  • 查看镜像仓库中的镜像
curl http://127.0.0.1:5000/v2/_catalog

注:现在是空的,因为才刚运行,里面没有任何镜像内容。

2.测试仓库

准备1台安装好docker的服务器,在这台服务器上下载一个测试镜像busybox,然后上传到registry服务器进行测试。

  • 下载镜像whalesay
docker pull docker/whalesay

  • 查看镜像whalesay
docker images

  • 为镜像打标签
docker tag docker/whalesay 10.0.29.22:5000/cwx/whalesay:v1

参数说明

  docker/whalesay 这是源镜像,也是刚才pull下来的镜像文件;

  10.0.29.22:5000/cwx/whalesay:v1:这是目标镜像,也是registry私有镜像服务器的IP地址和端口;

  • 上传到镜像服务器
docker push 10.0.29.22:5000/cwx/whalesay:v1

1、注意了,如果这里报以下错(CentOS 7):

解决方法:需要https的方法才能上传,我们可以修改docker配置文件vi /etc/docker/daemon.json 添加 insecure-registries配置信息来解决:

[root@node ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": [ "https://registry.docker-cn.com"],
//关键配置项,将仓库将入到不安全的仓库列表中
"insecure-registries": [ "10.0.29.22:5000"]
}

然后重启docker服务:

systemctl daemon-reload
systemctl restart docker

2、注意了,如果这里报以下错(CentOS 6.5):

则在/etc/sysconfig/docker文件添加以下选项:

注:上面的IP映射的就是10.0.29.22:5000

然后重启docker服务:

service docker restart

再次上传镜像,【registry版本2.7.0或更高】会报以下的错误:

查看registry服务器容器的日志:

docker logs -f -t --since="2020-01-15" --tail=500 registry        #(其中 -f 为查看实时日志, -t为时间 --since为从何时起)

解决方法:版本问题,把registry版本降到2.6.0或以下。

镜像上传成功结果如下:

  • 测试下载镜像

先删除本地的镜像:

docker rmi 10.0.29.22:5000/cwx/whalesay:v1

再从搭建好的仓库中下载镜像:

docker pull 10.0.29.22:5000/cwx/whalesay:v1

  • 列出所有镜像
curl  http://10.0.29.22:5000/v2/_catalog

  • 列出cwx/whalesay镜像有哪些tag
curl  http://10.0.29.22:5000/v2/cwx/whalesay/tags/list

3.删除镜像

官方推荐删除方案

  • registry默认配置不允许删除

  删除需要在启动时指定: -e REGISTRY_STORAGE_DELETE_ENABLED=true

docker run -d -e REGISTRY_STORAGE_DELETE_ENABLED=true -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2.6.0
  • 删除镜像操作

  1)找出你想要的镜像名称的tag

curl <protocol>://<registry_host>/v2/<镜像名>/tags/list
 例如:
curl http://10.0.29.104:5000/v2/ucop/tags/list

  2) 拿到digest_hash参数

curl  --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -I -X GET http://<仓库地址>/v2/<镜像名>/manifests/<tag>

  例如:

curl --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -I -X GET http://10.0.29.104:5000/v2/ucop/manifests/dev-yc_1

  3)复制digest_hash

Docker-Content-Digest: <digest_hash>

  4)删除清单

curl -I -X DELETE <protocol>://<registry_host>/v2/<repo_name>/manifests/<digest_hash>

  例如:

curl -I -X DELETE http://10.0.29.104:5000/v2/ucop/manifests/sha256:3dcf7bdec83462c44c1d717dc0c76c56067f966dc4706a2e8d16eb45261a5985

  • registry删除镜像时,仅删除索引,无法清理文件

  要真正删除文件系统内的文件,需执行以下垃圾回收命令:

docker exec -it <registry_container_id> bin/registry garbage-collect <path_to_registry_config>

  例如:

docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml

注:注意2.4版本以上的registry才有此功能

简易版删除

  1)打开镜像的存储目录,如有-V操作打开挂载目录也可以,删除镜像文件夹

docker exec <容器名> rm -rf /var/lib/registry/docker/registry/v2/repositories/<镜像名>

  2)执行垃圾回收操作

docker exec -it <registry_container_id> bin/registry garbage-collect <path_to_registry_config>

注:注意2.4版本以上的registry才有此功能

Docker——Registry搭建私有镜像仓库的更多相关文章

  1. docker之搭建私有镜像仓库和公有仓库

    一.搭建私有仓库 1.docker pull registry #下载registry镜像并启动 2. docker run -d -v /opt/registry:/var/lib/registry ...

  2. 搭建docker镜像仓库(一):使用registry搭建本地镜像仓库

    目录 一.系统环境 二.前言 三.使用registry搭建私有镜像仓库 3.1 环境介绍 3.2 k8smaster节点配置镜像仓库 3.3 k8sworker1节点配置从私有仓库上传和拉取镜像 3. ...

  3. [转]Ubuntu18.04下使用Docker Registry快速搭建私有镜像仓库

    本文转自:https://blog.csdn.net/BigData_Mining/article/details/88233015 1.背景 在 Docker 中,当我们执行 docker pull ...

  4. 【Docker】(4)搭建私有镜像仓库

    [Docker](4)搭建私有镜像仓库 说明 1. 这里是通过阿里云,搭建Docker私有镜像仓库. 2. 这里打包的镜像是从官网拉下来的,并不是自己项目创建的新镜像,主要测试功能 一.搭建过程 首先 ...

  5. 使用docker Registry快速搭建私有镜像仓库

    当我们执行docker pull xxx的时候,docker默认是从registry.docker.com这个地址上去查找我们所需要的镜像文件,然后执行下载操作.这类的镜像仓库就是docker默认的公 ...

  6. 详解docker实战之搭建私有镜像仓库 - kurbernetes

    1.实战目的 搭建企业私有的镜像仓库,满足从开发环境推送和拉取镜像.当我们使用k8s来编排和调度容器时,操作的基本单位是镜像,所以需要从仓库去拉取镜像到当前的工作节点.本来使用公共的docker hu ...

  7. 搭建私有镜像仓库registry 2.0

    搭建 docker run -d -p 5000:5000 --restart=always --name registry2 registry:2 就可以将自己的镜像 push到这个私有的镜像仓库 ...

  8. [Docker]Harbor部署私有镜像仓库

    Harbor部署私有镜像仓库 认识: Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器. 部署环境: CentOS7 Python2.7.5 Docker CE ...

  9. Docker Registry搭建私有仓库

    利用Registry镜像搭建Docker私有仓库遇到了很多坑,说来也是找到的资料都是杂而不精的东西,所以也没少走了弯路,现在回过头看去感觉好多坑还是别人给挖的··· 不过努力的最终结果还是好的,因为找 ...

随机推荐

  1. java面试-死锁产生、定位分析和修复

    死锁发生:两个或多个线程之间,互相持有对方需要的锁,而永久处于阻塞状态 一.手写死锁代码: public class DeadLockSample extends Thread { private S ...

  2. 201871030109-韩诚 实验一 软件工程准备—Blog

    项目 内容 课程班级博客链接 18级卓越班 这个作业要求链接 软件工程准备-Blog 我的课程学习目标 (1)学习博客园软件开发者学习社区使用技巧和经验(2) 掌握软件工程导论这门课程的基础理论知识 ...

  3. 201871030112-贾傲羊 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 课程班级博客链接 这个作业要求链接 作业要求链接 我的课程学习目标 学习PSP流程并运用于结对项目:学习GitHub代码的管理;学习结对编程的流程与内容 这个作业在哪些方 ...

  4. c# 输出一个数组

    关于C#输出一个数组最普遍的方法就是用for 循环语句写 如: int[] a = new int[10];for (int i = 0; i < a.Length; i++) { a[i] = ...

  5. 通过Dapr实现一个简单的基于.net的微服务电商系统(五)——一步一步教你如何撸Dapr之状态管理

    状态管理和上一章的订阅发布都算是Dapr相较于其他服务网格框架来讲提供的比较特异性的内容,今天我们来讲讲状态管理. 目录:一.通过Dapr实现一个简单的基于.net的微服务电商系统 二.通过Dapr实 ...

  6. 设计原则:里式替换原则(LSP)

    系列文章 设计原则:单一职责(SRP) 设计原则:开闭原则(OCP) 设计原则:里式替换原则(LSP) 设计原则:接口隔离原则(ISP) 设计原则:依赖倒置原则(DIP) 何谓高质量代码? 理解RES ...

  7. 源码编译安装MySQL8.0.20

    1 概述 本文章主要讲述了如何从源码编译安装MySQL社区版8.0.20,首先会介绍一些编译安装的相关知识,然后开始编译安装 2 源码编译安装的相关知识 2.1 make与configure make ...

  8. (九)Docker-PS 详解

    1. 作用 查看 docker 容器 2. 基本语法 docker ps [OPTIONS] OPTIONS说明: -a :显示所有的容器,包括未运行的. -f :根据条件过滤显示的内容. --for ...

  9. json 标准库

    1. 序列化的简单概念 2. json 标准库 2.1 json.dumps() 2.2 json.loads() 2.3 json.dump() 2.4 json.load() 1. 序列化的简单概 ...

  10. web前端的超神之路

    前端超神之路 前端基础知识 HTML :用户实现页面的工具 CSS:用于美化界面的工具 javascript:用于操作html元素和css样式,让你的页面效果更美观 前端进阶知识 jQuery:用于简 ...