文章目录

  • Docker Registry
  • Docker Private Registry
    • 使用docker-distribution自建Registry
    • 使用官方镜像自建Registry
    • Harbor
      • Harbor简介
      • Harbor的功能
      • Docker compose
      • Harbor部署

Docker Registry

网上有很多的Registry服务器都支持第三方用户注册,而后基于用户名去做自己的仓库,但是使用互联网上的Registry有一个缺陷,那就是我们去推送和下载镜像时都不会很快,而在生产环境中很可能并行启动的容器将达到几十、上百个,而且很有可能每个服务器本地是没有镜像的,此时如果通过互联网去下载镜像会有很多问题,比如下载速度会很慢、带宽会用很多等等,如果带宽不够的话,下载至启动这个过程可能要持续个几十分钟,这已然违背了使用容器会更加轻量、快速的初衷和目的。因此,很多时候我们很有可能需要去做自己的私有Registry。

Registry用于保存docker镜像,包括镜像的层次结构和元数据。用户可以自建Registry,也可以使用官方的Docker Hub。

Docker Registry分类:

  • Sponsor Registry:第三方的Registry,供客户和Docker社区使用
  • Mirror Registry:第三方的Registry,只让客户使用
  • Vendor Registry:由发布docker镜像的供应商提供的registry
  • Private Registry:通过设有防火墙和额外的安全层的私有实体提供的registry

如果运维的系统环境托管在云计算服务上,比如阿里云,那么用阿里云的Registry则是最好的选择。很多时候我们的生产环境不会在本地,而是托管在数据中心机房里,如果我们在数据中心机房里的某台主机上部署Registry,因为都在同一机房,所以属于同一局域网,此时数据传输走内网,效率会极大的提升。

所有的Registry默认情况下都是基于https工作的,这是Docker的基本要求,而我自建Registry时很可能是基于http工作的,但是Docker默认是拒绝使用http提供Registry服务的

Docker Private Registry

为了帮助我们快速创建私有Registry,Docker专门提供了一个名为Docker Distribution的软件包,我们可以通过安装这个软件包快速构建私有仓库。

容器时代,任何程序都应该运行在容器中,除了Kernel和init。而为了能够做Docker Private Registry,Docker Hub官方直接把Registry做成了镜像,我们可以直接将其pull到本地并启动为容器即可快速实现私有Registry。

Registry的主要作用是托管镜像,Registry运行在容器中,而容器自己的文件系统是随着容器的生命周期终止和删除而被删除的,所以当我们把Registry运行在容器中时,客户端上传了很多镜像,随着Registry容器的终止并删除,所有镜像都将化为乌有,因此这些镜像应该放在存储卷上,而且这个存储卷最好不要放在Docker主机本地,而应该放在一个网络共享存储上,比如NFS。不过,镜像文件自己定义的存储卷,还是一个放在Docker本地、Docker管理的卷,我们可以手动的将其改成使用其它文件系统的存储卷。

这就是使用容器来运行Registry的一种简单方式。自建Registry的另一种方式,就是直接安装docker-distribution软件。

使用docker-distribution自建Registry

//下载docker-distribution
[root@100 ~]# wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/docker-distribution-2.6.2-2.git48294d9.el7.x86_64.rpm
[root@100 ~]# dnf -y install docker-distribution-2.6.2-2.git48294d9.el7.x86_64.rpm[root@100 ~]# cat /etc/docker-distribution/registry/config.yml
version: 0.1
log:fields:service: registry
storage:cache:layerinfo: inmemoryfilesystem:rootdirectory: /var/lib/registry
http:addr: :5000
[root@100 ~]# systemctl start docker-distribution.service
[root@100 ~]# ss -antl|grep 5000
LISTEN 0      128                *:5000            *:*

使用另一个主机上传镜像

[root@139 ~]# vim /etc/docker/daemon.json
{"registry-mirrors": ["https://cj9sucfo.mirror.aliyuncs.com"],"insecure-registries": ["192.168.159.100:5000"]
}
[root@139 ~]# systemctl restart docker
[root@139 ~]# docker tag centos:latest 192.168.159.100:5000/centos:v1
[root@139 ~]# docker push 192.168.159.100:5000/centos:v1
The push refers to repository [192.168.159.100:5000/centos]
74ddd0ec08fa: Pushed
v1: digest: sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc size: 529
[root@139 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
centos       latest    5d0da3dc9764   10 months ago   231MB
[root@139 ~]# docker pull 192.168.159.100:5000/centos:v1
v1: Pulling from centos
Digest: sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc
Status: Downloaded newer image for 192.168.159.100:5000/centos:v1
192.168.159.100:5000/centos:v1
[root@139 ~]# docker images
REPOSITORY                    TAG       IMAGE ID       CREATED         SIZE
192.168.159.100:5000/centos   v1        5d0da3dc9764   10 months ago   231MB
centos                        latest    5d0da3dc9764   10 months ago   231MB

使用官方镜像自建Registry

[root@100 ~]# docker pull registry
[root@100 ~]# docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
9f4e8458d20b9d07389a4fbc1f25e2cc0cb787fcbbe1d07ccdf7f18256bb4c6f
[root@100 ~]# ss -antl |grep 5000
LISTEN 0      128          0.0.0.0:5000      0.0.0.0:*
LISTEN 0      128             [::]:5000         [::]:*[root@139 ~]# docker tag centos:latest 192.168.159.100:5000/centos:test1
[root@139 ~]# docker push 192.168.159.100:5000/centos:test1
The push refers to repository [192.168.159.100:5000/centos]
74ddd0ec08fa: Layer already exists
test1: digest: sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc size: 529

Harbor

无论是使用Docker-distribution去自建仓库,还是通过官方镜像跑容器的方式去自建仓库,通过前面的演示我们可以发现其是非常的简陋的,还不如直接使用官方的Docker Hub去管理镜像来得方便,至少官方的Docker Hub能够通过web界面来管理镜像,还能在web界面执行搜索,还能基于Dockerfile利用Webhooks和Automated Builds实现自动构建镜像的功能,用户不需要在本地执行docker build,而是把所有build上下文的文件作为一个仓库推送到github上,让Docker Hub可以从github上去pull这些文件来完成自动构建。

但无论官方的Docker Hub有多强大,它毕竟是在国外,所以速度是最大的瓶颈,我们很多时候是不可能去考虑使用官方的仓库的,但是上面说的两种自建仓库方式又十分简陋,不便管理,所以后来就出现了一个被 CNCF 组织青睐的项目,其名为Harbor。

Harbor简介

Harbor是由VMWare在Docker Registry的基础之上进行了二次封装,加进去了很多额外程序,而且提供了一个非常漂亮的web界面。

Harbor的功能

Feathers:

  • ‎多用户内容签名和验证‎
  • ‎安全性和漏洞分析‎
  • ‎审核日志记录‎
  • ‎身份集成和基于角色的访问控制‎
  • ‎实例之间的镜像复制‎
  • ‎可扩展的 API 和图形化用户界面‎
  • 国际化

Docker compose

Harbor在物理机上部署是非常难的,而为了简化Harbor的应用,Harbor官方直接把Harbor做成了在容器中运行的应用,而且这个容器在Harbor中依赖类似redis、mysql、pgsql等很多存储系统,所以它需要编排很多容器协同起来工作,因此VMWare Harbor在部署和使用时,需要借助于Docker的单机编排工具(Docker compose)来实现。

Harbor部署

[root@100 ~]# yum -y install docker-compose-plugin
[root@100 ~]# cp /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin/
[root@100 ~]# cd /usr/src/
[root@100 src]# wget https://github.com/goharbor/harbor/releases/download/v2.4.3/harbor-offline-installer-v2.4.3.tgz
[root@100 src]# tar xf harbor-offline-installer-v2.5.1.tgz -C /usr/local/
[root@100 src]# cd /usr/local/harbor/
[root@100 harbor]# ls
common.sh  harbor.v2.5.1.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare
[root@100 harbor]# mv harbor.yml.tmpl harbor.yml
[root@100 harbor]# vim harbor.yml
hostname: 192.168.159.100
#https:# https port for harbor, default is 443# port: 443# The path of cert and key files for nginx#certificate: /your/certificate/path#private_key: /your/private/key/path[root@100 harbor]# ./install.sh
[root@100 harbor]# ss -antl |grep 80
LISTEN 0      128          0.0.0.0:80        0.0.0.0:*
LISTEN 0      128             [::]:80           [::]:*

使用IP地址访问harbor,用户名admin,密码Harbor12345

测试上传镜像至harbor

[root@100 ~]# docker login -u admin -p Harbor12345 http://127.0.0.1
[root@100 ~]# docker tag centos:latest 127.0.0.1/harbor/centos:v1
[root@100 ~]# docker push 127.0.0.1/harbor/centos:v1
The push refers to repository [127.0.0.1/harbor/centos]
74ddd0ec08fa: Pushed
v1: digest: sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc size: 529

使用Harbor的注意事项:

  • 在客户端上传镜像时一定要记得执行docker login进行用户认证,否则无法直接push
  • 在客户端使用的时候如果不是用的https则必须要在客户端的/etc/docker/daemon.json配置文件中配置insecure-registries参数
  • 数据存放路径应在配置文件中配置到一个容量比较充足的共享存储中
  • Harbor是使用docker-compose命令来管理的,如果需要停止Harbor也应用docker-compose stop来停止,其他参数请–help

Docker私有镜像仓库相关推荐

  1. 搭建Docker私有镜像仓库

    一.Docker镜像和容器的区别 Docker的整个生命周期由三部分组成:镜像(image)+容器(container)+仓库(repository) 容器等于镜像加上可读层,容器是由镜像实例化而来的 ...

  2. 华为云ECS-CentOS8.2部署(Harbor)Docker私有镜像仓库

    华为云ECS-CentOS8.2部署(Harbor)Docker私有镜像仓库 1.背景 2.环境说明 3.在CentOs中安装所需要的软件包 4.部署Harbor 4.1.安装docker-compo ...

  3. 【Docker】registry部署docker私有镜像仓库

    Docker Hub作为Docker默认官方公共镜像仓库,但是如果我们不想使用怎么办,第一我们可以替换默认镜像仓库为我们国内的一些镜像仓库,第二就是如我们自己搭建一个自己的私有镜像仓库,官方也提供do ...

  4. 基于 registry 搭建 Docker 私有镜像仓库

    dockerhub: https://registry.hub.docker.com/_/registry 安装命令 docker run -p 5000:5000 -d -v /opt/regist ...

  5. 阿里云部署Docker私有镜像仓库

    一.访问阿里云容器镜像服务地址 地址:https://cr.console.aliyun.com/cn-beijing/instances 提示开通->设置密码(为Docker仓库密码) 二.选 ...

  6. Docker私有镜像仓库是什么?

    Docker镜像仓库概述 镜像仓库作为Docker技术的核心组件之一,其主要作用就是负责镜像内容的存储和分发.Docker镜像仓库从使用范围来说分为"公有镜像仓库"和"私 ...

  7. Docker 私有镜像仓库的搭建及认证

    转自乐字节 DockerHub 为我们提供了很多官方镜像和个人上传的镜像,我们可以下载机构或个人提供的镜像,也可以上传我们自己的本地镜像,但缺点是: 由于网络的原因,从 DockerHub 下载和上传 ...

  8. 基于 Harbor 搭建 Docker 私有镜像仓库

    什么是 Harbor? 第一次使用这个的时候是刚进公司处理的第一个任务的时候,发现 Harbor 就是一个用于存储和分发 Docker 镜像的企业级Registry 服务器. 网上找到一个 Harbo ...

  9. Docker Registry 私有镜像仓库批量清理镜像

    Docker 私有镜像仓库批量清理镜像 前言 在频繁长期使用镜像仓库后,由于镜像仓库清理镜像比较费劲,业内也没有一个比较好的清理方案,官方提供的镜像仓库清理也比较费劲,导致 Docker 镜像仓库越积 ...

最新文章

  1. 在Linux(Ubuntu)下搭建ASP.NET Core环境并运行 继续跨平台
  2. 阿里云服务器win2003系统配置IIS+php+mysql+phpmyadmin+zend 500
  3. 数加:从数据工程师到CDO的七次升职路
  4. MacBook运行C++,不用安装任何软件
  5. python中if elif else流程图_Python中的if、else、elif语句用法简明讲解
  6. 几种常见的基于Lucene的开源搜索解决方案对比
  7. java多线程读取分割的文件_java多线程批量读取文件(二)--读写分离
  8. vue实现坐标拾取器功能demo
  9. 英语b计算机考试时间2015年,2014年12月大学英语B 计算机应用基础考试工作安排...
  10. 人工智能商业实战应用:金融知识图谱构建与实战【企业内训现场实录】
  11. 实变函数与泛函分析课本pdf_免费推荐几本实变函数和泛函分析的书
  12. Ubuntu系统直接拷贝硬盘克隆
  13. 酷酷资源社网站同款xiuno模板/知乎蓝魔改版源码/附多个插件
  14. Android10无法访问根目录文件解决
  15. excel怎么把竖排变成横排_桐城家谱编修丨麻城家谱数字化丨新时代编修家谱该怎么编修?...
  16. 【正点原子FPGA连载】 第二十八章OV5640 DP显示实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
  17. html设置表格的长款英文,HTML表格中英文和数字换行问题分享
  18. 文献 | 如何快速将英文文献翻译为中文?
  19. 游侠安全网-安全产品和厂家调研-欢迎补充
  20. 「自动化」聊起来简单,做起来难 | 谈效风生

热门文章

  1. hyperledger fabric2.4.0基础搭建到区块链浏览器搭建
  2. Object 和 object 的区别是什么?
  3. switchhosts怎么配置host?
  4. python异步处理请求_Python 异步请求
  5. 【题目记录】——ICPC上海2021
  6. STM32CubeMX+keil5+esp8266(基于hal库的stm32+esp8266连接)
  7. 关于日语学习方法的总结
  8. PMSM同步旋转坐标系下的数学模型及Simulink仿真
  9. 垃圾陷进-洛谷P1156
  10. 在我们与“黑客帝国”之间,有一座堡垒——OpenAI发展史