【云原生 | 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代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
26天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
84 2
|
24天前
|
运维 Cloud Native 虚拟化
一文吃透云原生 Docker 容器,建议收藏!
本文深入解析云原生Docker容器技术,涵盖容器与Docker的概念、优势、架构设计及应用场景等,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文吃透云原生 Docker 容器,建议收藏!
|
2月前
|
Kubernetes Cloud Native 云计算
云原生入门:从Docker到Kubernetes的旅程
【10月更文挑战第2天】本文将带你走进云原生的世界,从基础的Docker容器技术开始,逐步深入到Kubernetes集群管理。我们将通过实际代码示例,探索如何利用这些工具构建、部署和管理现代云应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的知识和技能,让你在云原生领域迈出坚实的一步。
89 5
|
20天前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
20天前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
1月前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
51 3
|
2月前
|
Kubernetes Cloud Native 开发者
探秘云原生计算:Kubernetes与Docker的协同进化
在这个快节奏的数字时代,云原生技术以其灵活性和可扩展性成为了开发者们的新宠。本文将带你深入了解Kubernetes和Docker如何共同塑造现代云计算的架构,以及它们如何帮助企业构建更加敏捷和高效的IT基础设施。
|
2月前
|
安全 Cloud Native Shell
云上攻防:云原生篇&Docker容器逃逸
本文介绍了Docker的基本概念及其对渗透测试的影响,重点讲解了容器逃逸的方法。Docker是一种轻量级的容器技术,与虚拟机相比,具有更高的便携性和资源利用率。然而,这也带来了安全风险,特别是容器逃逸问题。文章详细描述了三种常见的容器逃逸方法:不安全的配置、相关程序漏洞和内核漏洞,并提供了具体的检测和利用方法。此外,还介绍了几种特定的漏洞(如CVE-2019-5736和CVE-2020-15257)及其复现步骤,帮助读者更好地理解和应对这些安全威胁。
116 0
云上攻防:云原生篇&Docker容器逃逸
|
2月前
|
Kubernetes Cloud Native Docker
云原生入门:Kubernetes和Docker的协同之旅
【10月更文挑战第4天】在这篇文章中,我们将通过一次虚拟的旅行来探索云原生技术的核心——Kubernetes和Docker。就像乘坐一艘由Docker驱动的小船启航,随着波浪(代码示例)起伏,最终抵达由Kubernetes指挥的宏伟舰队。这不仅是一段技术上的旅程,也是理解现代云架构如何支撑数字世界的冒险。让我们扬帆起航,一探究竟!
|
2月前
|
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容器编排
80 3