草庐IT

【云原生 | 07】官方镜像仓库Docker Hub和企业级私有镜像仓库Harbor

小鹏linux 2023-04-18 原文

🍁博主简介
        🏅云计算领域优质创作者
        🏅2022年CSDN新星计划python赛道第一名

        🏅2022年CSDN原力计划优质作者
        🏅阿里云ACE认证高级工程师
        🏅阿里云开发者社区专家博主

💊交流社区CSDN云计算交流社区欢迎您的加入!

目录

1. Docker Hub

1.1 Docker Hub注册和登录

1.2 从官方仓库进行镜像拉取

1.3 自动创建

2. 阿里云镜像市场

2.1 查看镜像

2.2 下载镜像

3. 搭建本地私有仓库

3.1 使用registry镜像创建私有仓库

3.2 Harbor-企业级docker私有仓库

 👑👑👑结束语👑👑👑


1. Docker Hub

Docker Hub(如下图)是由Docker公司维护的一个注册中心。它拥有成千上万个镜像可供下载和运行。任何Docker用户都可以在上面创建免费账号及公共Docker镜像。除了用户提供的镜像,上面还维护着一些作为参考的官方镜像。
Dokcer Hub

镜像受用户认证的保护,同时具有一个与GitHub类似的支持率打星系统。 这些官方镜像的表现形式可能是Linux发行版,如Ubuntu或Cent OS,或是预装软件包,如Node.js,或是完整的软件栈,如WordPress。
仓库(Repository)是集中存放镜像的地方,分公共仓库和私有仓库。一个容易与之混淆的概念是注册服务器(Registry)。实际上注册服务器是存放仓库的具体服务器,一个注册服务器上可以有多个仓库,而每个仓库下面可以有多个镜像。从这方面来说,可将仓库看做一个具体的项目或目录。例如对于仓库地址private-
docker.com/ubuntu来说,private-docker.com是注册服务器地址,ubuntu是仓库名。

1.1 Docker Hub注册和登录

构建镜像中很重要的一环就是如何共享和发布镜像。可以将镜像推送到Docker Hub或者用户自己的私有Registry中。为了完成这项工作,需要在Docker Hub上创建一个账号,可以从 https://hub.docker.com/account/signup/加入Docker Hub
创建DockerHub账号
首先需要注册一个账号,并在注册之后通过收到的确认邮件进行激活。
下面就可以测试刚才注册的账号是否能正常工作了。要登录到Docker Hub,可以使用docker login 命令
[root@localhost ~]# docker login 
Username: jamtur01 
Password: 
Email: james@lovedthanlost.net Login Succeeded
这条命令将会完成登录到Docker Hub的工作,并将认证信息保存起来以供后面使用。可以使用docker logout命令从一个Registry服务器退出。
登录成功的用户可以上传个人制造的镜像。

1.2 从官方仓库进行镜像拉取

用户无需登录即可通过docker search命令来查找官方仓库中的镜像,并利用docker pull命令来将它下载到本地。
根据是否为官方提供,可将这些镜像资源分为两类。一种是类似centos这样的基础镜像,称为基础或根镜像。这些镜像是由Docker公司创建、验 证、支持、提供。这样的镜像往往使用单个单词作为名字。
还有一种类型,比如ansible/centos7-ansible镜像,它是由Docker用户ansible创建并维护的,带有用户名称为前缀,表明是某用户下的某仓库。可以通过用户名称前缀user_name/镜像名来指定使用某个用户提供的镜像。
另外,在查找的时候通过-s N参数可以指定仅显示评价为N星以上的镜像。
下载官方centos镜像到本地,如下所示:
[root@localhost ~]# docker pull centos
Pullingrepositorycentos
0b443ba03958:Downloadcomplete 539c0211cd76:Downloadcomplete 511136ea3c5a:Downloadcomplete 7064731afe90:Downloadcomplete
用户也可以在登录后通过docker push命令来将本地镜像推送到Docker Hub

1.3 自动创建

Ansible是知名自动化部署配置管理工具。
自动创建(Automated Builds)功能对于需要经常升级镜像内程序来说,十分方便。有时候,用户创建了镜像,安装了某个软件,如果软件发布新版本则需要手动更新镜像。
而自动创建允许用户通过Docker Hub指定跟踪一个目标网站(目前支持 GitHub或BitBucket)上的项目,一旦项目发生新的提交,则自动执行创建。
要配置自动创建,包括如下的步骤:
    1)创建并登录Docker Hub,以及目标网站;*在目标网站中连接帐户到Docker Hub;
    2)在Docker Hub中配置一个“自动创建”;
    3)选取一个目标网站中的项目(需要含Dockerfile)和分支;
    4)指定Dockerfile的位置,并提交创建。之后,可以在Docker Hub的“自动创建”页面中跟踪每次创建的状态。

2. 阿里云镜像市场

国内不少云服务商都提供了Docker镜像市场,下面阿里云镜像站为例,介绍如何使用这些市场。

2.1 查看镜像

访问 https://developer.aliyun.com/mirror/ ,即可看到已存在的仓库和存储的镜像,包括Ubuntu、Java、Mongo、MySQL、Nginx等热门仓库和镜像。阿里云官方仓库中的镜像会保持跟DockerHub中官方镜像的同步。
CentOS 仓库为例,其中包括了centos6、centos7和centos8等镜像

2.2 下载镜像

以在linux中下载CentOS基础镜像为例:

1. 备份yum源:

[root@localhost ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2. 下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/

centos8(centos6官方源已下线,建议切换centos-vault源)

[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
或者:
[root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
centos7:
[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
或者:
[root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
centos6(centos6官方源已下线,建议切换centos-vault源)
[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-6.10.repo
或者:
[root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-6.10.repo

3. 搭建本地私有仓库

3.1 使用registry镜像创建私有仓库

安装Docker后,可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境:
[root@localhost ~]# docker run -d -p 5000:5000 registry
这将自动下载并启动一个registry容器,创建本地的私有仓库服务。 默认情况下,会将仓库创建在容器的/tmp/registry目录下。可以通过-v参数来将镜像文件存放在本地的指定路径。
[root@localhost ~]# docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registryregistry

3.2 Harbor-企业级docker私有仓库

准备环境:

[root@localhost ~]# python	    #查看python环境,必须是2.7或更高版本

docker引擎应为1.10或更高版本

docker compose 为1.6.0或更高版本

实验步骤:

[root@localhost ~]# rz	    #上传harbor-offline-installer-v1.2.0.tgz压缩包
[root@localhost ~]# tar xf harbor-offline-installer-v1.2.0.tgz	    #解压缩
[root@localhost ~]# mv harbor /usr/local/
[root@localhost ~]# cd /usr/local/harbor/
[root@localhost harbor]# ls	    #查看
[root@localhost harbor]# vim harbor.cfg	    #打开配置文件,进行如下修改

1.将hostname = reg.mydomain.com仓库地址修改为hostname = hub.anxiaopeng.com

2.将ui_url_protocol = http协议修改为ui_url_protocol = https   加密协议

3.将db_password = root123数据库密码修改为db_password = axp123456

4.max_job_workers = 3为同时只能从仓库下载3个镜像,根据需求修改

查看到配置文件中的ssl_cert = /data/cert/server.crt和ssl_cert_key = /data/cert/server.key证书密钥私钥文件路径为/data/cert,所以

[root@localhost harbor]# mkdir -p /data/cert	    #创建证书存放路径
[root@localhost cert]# chmod -R 777 /data/cert
[root@localhost cert]# openssl genrsa -des3 -out server.key 2048	#创建私钥,设置两次密码为123456
[root@localhost cert]# openssl req -new -key server.key -out server.csr		#然后输入私钥密码和其他信息
[root@localhost cert]# cp server.key server.key.org	    #备份私钥
[root@localhost cert]# openssl rsa -in server.key.org -out server.key	    #退密码处理,将server.key的密码取消掉
[root@localhost cert]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
[root@localhost cert]# cd -

在windows的hosts文件中添加192.168.232.165 hub.anxiaopeng.com

[root@localhost harbor]# ./install.sh

浏览器访问192.168.232.165,输入账号admin密码Harbor12345登录

一个项目下可以存放很多个镜像,而且镜像可以是不同的。

[root@localhost harbor]# docker images	    #查看本地镜像
[root@localhost harbor]# docker tag centos:centos7.9.2009 hub.anxiaopeng.com/library/centos:centos7.9.2009	#在项目中标记镜像
[root@localhost harbor]# vim /etc/hosts	    #添加:
192.168.232.165 hub.anxiaopeng.com
[root@localhost harbor]# vim /etc/docker/daemon.json	    #打开配置文件,修改内容,添加信任域名,注意不要加协议,注意逗号。

原内容:

{"registry-mirrors": ["https://kfp63jaj.mirror.aliyuncs.com"]}
修改后:
{
    "registry-mirrors": ["https://kfp63jaj.mirror.aliyuncs.com"],
    "insecure-registries":["hub.anxiaopeng.com"]
}
[root@localhost harbor]# docker login hub.anxiaopeng.com	#输入账号admin和密码Harbor12345进行认证(docker logout hub.anxiaopeng.com可以移除认证)
[root@localhost harbor]# docker push hub.anxiaopeng.com/library/centos:centos7.9.2009	#推送镜像到项目

刷新浏览器就可以看到镜像上传成功了。标签书代表子版本的个数。此方法上传的镜像是公开的,任何人不需要登录就可以直接访问到下载的url

如果公司内部需要,则给不同的不能创建不同的普通用户,每个部门通过各自的普通用户进行上传和下载镜像。

 👑👑👑结束语👑👑👑

有关【云原生 | 07】官方镜像仓库Docker Hub和企业级私有镜像仓库Harbor的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. Ruby - 如何处理子类意外覆盖父类(super class)私有(private)字段的问题? - 2

    假设您编写了一个类Sup,我决定将其扩展为SubSup。我不仅需要了解你发布的接口(interface),还需要了解你的私有(private)字段。见证这次失败:classSupdefinitialize@privateField="fromsup"enddefgetXreturn@privateFieldendendclassSub问题是,解决这个问题的正确方法是什么?看起来子类应该能够使用它想要的任何字段而不会弄乱父类(superclass)。编辑:equivalentexampleinJava返回"fromSup",这也是它应该产生的答案。 最佳答案

  4. ruby - 从另一个私有(private)方法中使用 self.xxx() 调用私有(private)方法 xxx,导致错误 "private method ` xxx' called” - 2

    我正在尝试获得良好的Ruby编码风格。为防止意外调用具有相同名称的局部变量,我总是在适当的地方使用self.。但是现在我偶然发现了这个:classMyClass上面的代码导致错误privatemethodsanitize_namecalled但是当删除self.并仅使用sanitize_name时,它会起作用。这是为什么? 最佳答案 发生这种情况是因为无法使用显式接收器调用私有(private)方法,并且说self.sanitize_name是显式指定应该接收sanitize_name的对象(self),而不是依赖于隐式接收器(也是

  5. ruby - 如何在 Ruby 中实现私有(private)内部类 - 2

    来自Java,我正在尝试在Ruby中实现LinkedList。我在Java中实现它的通常方法是有一个名为LinkedList的类和一个名为Node的私有(private)内部类,其中LinkedList的每个对象都作为Node对象。classLinkedListprivateclassNodeattr_accessor:val,:nextendend我不想将Node类暴露给外部世界。然而,通过Ruby中的这个设置,我可以使用这个访问LinkedList类之外的私有(private)Node类对象-node=LinkedList::Node.new我知道,在Ruby1.9中,我们可以使用

  6. ruby 私有(private)类方法助手 - 2

    您好,我正在尝试创建一个帮助程序,用于将ruby​​方法大量定义为私有(private)类方法。通常,可以通过使用private_class_method键工作将方法定义为私有(private)类方法。但我想创建一个以下样式的助手:classPersondefine_private_class_methodsdodefmethod_oneenddefmethod_twoendendend我计划通过以下方式动态定义它,但根本不起作用:classObjectdefself.define_private_class_methods&blockinstance_evaldoprivate&bl

  7. ruby - 使实例方法在运行时私有(private) - 2

    在另一个对象中注册该对象后,我需要将一些实例方法设为私有(private)。我不想卡住对象,因为它必须保持可编辑状态,只是功能较少。而且我不想取消定义这些方法,因为它们是在内部使用的。我需要的是这样的:classMyClassdefmy_methodputs"Hello"endenda=MyClass.newb=MyClass.newa.my_method#=>"Hello"a.private_instance_method(:my_method)a.my_method#=>NoMethodErrorb.my_method#=>"Hello"有什么想法吗?

  8. ruby - Ruby 导入的方法总是私有(private)的吗? - 2

    最好用一个例子来解释:文件1.rb:deffooputs123end文件2.rb:classArequire'file1'endA.new.foo将给出错误“':调用了私有(private)方法'foo'”。我可以通过执行A.new.send("foo")来解决这个问题,但是有没有办法公开导入的方法?编辑:澄清一下,我没有混淆include和require。另外,我不能使用正常包含的原因(正如许多人正确指出的那样)是因为这是元编程设置的一部分。我需要允许用户在运行时添加功能;例如,他可以说“run-this-app--includefile1.rb”,应用程序的行为将根据他在file1

  9. 【云原生】SpringCloud-Spring Boot Starter使用测试 - 2

    目录SpringBootStarter是什么?以前传统的做法使用SpringBootStarter之后starter的理念:starter的实现: 创建SpringBootStarter步骤在idea新建一个starter项目、直接执行下一步即可生成项目。 在xml中加入如下配置文件:创建proterties类来保存配置信息创建业务类:创建AutoConfiguration测试如下:SpringBootStarter是什么? SpringBootStarter是在SpringBoot组件中被提出来的一种概念、简化了很多烦琐的配置、通过引入各种SpringBootStarter包可以快速搭建出一

  10. H2数据库配置及相关使用方式一站式介绍(极为详细并整理官方文档) - 2

    目录H2数据库入门以及实际开发时的使用1.H2数据库的初识1.1H2数据库介绍1.2为什么要使用嵌入式数据库?1.3嵌入式数据库对比1.3.1性能对比1.4技术选型思考2.H2数据库实战2.1H2数据库下载搭建以及部署2.1.1H2数据库的下载2.1.2数据库启动2.1.2.1windows系统可以在bin目录下执行h2.bat2.1.2.2同理可以通过cmd直接使用命令进行启动:2.1.2.3启动后控制台页面:2.1.3spring整合H2数据库2.1.3.1引入依赖文件2.1.4数据库通过file模式实际保存数据的位置2.2H2数据库操作2.2.1Mysql兼容模式2.2.2Mysql模式

随机推荐