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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Docker Hub是由Docker公司维护的一个注册中心。它拥有成千上万个镜像可供下载和运行。任何Docker用户都可以在上面创建免费账号及公共Docker镜像。除了用户提供的镜像,上面还维护着一些作为参考的官方镜像。...............

🍁作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道第一名🏅 阿里云ACE认证高级工程师🏅

✒️个人主页:小鹏linux

💊个人社区:小鹏linux(个人社区)欢迎您的加入!

目录

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镜像。除了用户提供的镜像,上面还维护着一些作为参考的官方镜像。

镜像受用户认证的保护,同时具有一个与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

首先需要注册一个账号,并在注册之后通过收到的确认邮件进行激活。


下面就可以测试刚才注册的账号是否能正常工作了。要登录到Docker Hub,可以使用docker login命令

[root@localhost ~]# docker login 
Username: jamtur01 
Password: 
Email: james@lovedthanlost.net Login Succeeded

image.gif

这条命令将会完成登录到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

image.gif

用户也可以在登录后通过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镜像市场,下面阿里云镜像站为例,介绍如何使用这些市场。

image.gif

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

image.gif

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

image.gif

或者:
[root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

image.gif

centos7:
[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

image.gif

或者:
[root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

image.gif

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

image.gif

或者:
[root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-6.10.repo

image.gif

3. 搭建本地私有仓库

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

安装Docker后,可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境:

[root@localhost ~]# docker run -d -p 5000:5000 registry

image.gif

这将自动下载并启动一个registry容器,创建本地的私有仓库服务。 默认情况下,会将仓库创建在容器的/tmp/registry目录下。可以通过-v参数来将镜像文件存放在本地的指定路径。

[root@localhost ~]# docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registryregistry

image.gif

3.2 Harbor-企业级docker私有仓库

准备环境:

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

image.gif

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     #打开配置文件,进行如下修改

image.gif

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 -

image.gif

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

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

image.gif

浏览器访问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      #打开配置文件,修改内容,添加信任域名,注意不要加协议,注意逗号。

image.gif

原内容:

{"registry-mirrors": ["https://kfp63jaj.mirror.aliyuncs.com"]}

image.gif

修改后:
{
    "registry-mirrors": ["https://kfp63jaj.mirror.aliyuncs.com"],
    "insecure-registries":["hub.anxiaopeng.com"]
}

image.gif

[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 #推送镜像到项目

image.gif

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

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

👑👑👑结束语👑👑👑

image.gif

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
15天前
|
Kubernetes Cloud Native 云计算
云原生入门:从Docker到Kubernetes的旅程
【10月更文挑战第2天】本文将带你走进云原生的世界,从基础的Docker容器技术开始,逐步深入到Kubernetes集群管理。我们将通过实际代码示例,探索如何利用这些工具构建、部署和管理现代云应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的知识和技能,让你在云原生领域迈出坚实的一步。
56 5
|
1天前
|
Kubernetes Cloud Native 开发者
探秘云原生计算:Kubernetes与Docker的协同进化
在这个快节奏的数字时代,云原生技术以其灵活性和可扩展性成为了开发者们的新宠。本文将带你深入了解Kubernetes和Docker如何共同塑造现代云计算的架构,以及它们如何帮助企业构建更加敏捷和高效的IT基础设施。
|
9天前
|
安全 Cloud Native Shell
云上攻防:云原生篇&Docker容器逃逸
本文介绍了Docker的基本概念及其对渗透测试的影响,重点讲解了容器逃逸的方法。Docker是一种轻量级的容器技术,与虚拟机相比,具有更高的便携性和资源利用率。然而,这也带来了安全风险,特别是容器逃逸问题。文章详细描述了三种常见的容器逃逸方法:不安全的配置、相关程序漏洞和内核漏洞,并提供了具体的检测和利用方法。此外,还介绍了几种特定的漏洞(如CVE-2019-5736和CVE-2020-15257)及其复现步骤,帮助读者更好地理解和应对这些安全威胁。
云上攻防:云原生篇&Docker容器逃逸
|
13天前
|
Kubernetes Cloud Native Docker
云原生入门:Kubernetes和Docker的协同之旅
【10月更文挑战第4天】在这篇文章中,我们将通过一次虚拟的旅行来探索云原生技术的核心——Kubernetes和Docker。就像乘坐一艘由Docker驱动的小船启航,随着波浪(代码示例)起伏,最终抵达由Kubernetes指挥的宏伟舰队。这不仅是一段技术上的旅程,也是理解现代云架构如何支撑数字世界的冒险。让我们扬帆起航,一探究竟!
|
23天前
|
Kubernetes Cloud Native 持续交付
云原生之旅:Docker容器化与Kubernetes集群管理
【9月更文挑战第33天】在数字化转型的浪潮中,云原生技术如同一艘航船,带领企业乘风破浪。本篇文章将作为你的航海指南,从Docker容器化的基础讲起,直至Kubernetes集群的高级管理,我们将一起探索云原生的奥秘。你将学习到如何封装应用、实现环境隔离,以及如何在Kubernetes集群中部署、监控和扩展你的服务。让我们启航,驶向灵活、可伸缩的云原生未来。
|
26天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
1月前
|
运维 Cloud Native Docker
云原生技术入门:Docker容器化实战
【9月更文挑战第20天】本文将引导你走进云原生技术的世界,通过Docker容器化技术的实战演练,深入理解其背后的原理和应用。我们将一起探索如何在云平台上利用Docker简化部署、扩展和管理应用程序的过程,并揭示这一技术如何改变现代软件的开发和运维模式。
|
1月前
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
55 4
|
1月前
|
Kubernetes Cloud Native 开发者
云原生入门:从Docker到Kubernetes的旅程
【9月更文挑战第16天】 本文将带你进入云原生的世界,从理解Docker容器的基础开始,逐步深入到Kubernetes集群管理。我们将通过简单的代码示例和实际操作,探索这两个关键技术如何协同工作,以实现更高效、灵活的应用程序部署和管理。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供清晰的指导和实用的知识。
56 11
|
15天前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
58 0