自动化构建平台(三)Linux搭建私有的docker镜像库之Harbor的安装和使用详解

文章目录

  • 前言
  • 一、Harbor的安装
    • 第一步:安装docker
    • 第二步:安装docker-compose
    • 第三步:安装Harbor
  • 二、Harbor登录
  • 三、Harbor项目管理
    • 第一步:创建项目
    • 第二步:推送镜像
  • 四、Harbor权限控制
  • 五、Harbor自动清理多余的镜像
    • 手动清理
    • 自动清理
  • 总结


前言

我们在使用docker时,镜像下载会默认到dockerHub上去下载。我们也可以将自己的应用发布到dockerHub上,但是dockerHub上都是公有镜像,任何人都可以下载。dockerHub上普通用户只能创建一个私有项目,创建多个是需要付费的。如果我们的项目需要私有化,那么使用Harbor可以来完成,而且Harbor是开源免费的。

关于如何将自己的项目打包成docker镜像并上传到dockerHub,可以参照我的文章【maven插件docker-maven-plugin打包镜像并发布到dockerHub】

下面来介绍Harbor的安装和基本的操作使用。


一、Harbor的安装

首先,的运行要依赖docker和docker-compose。如果已安装这两个组件可以直接到第三步

第一步:安装docker

这里为了方便我整理一个脚本,内容如下:

Centos/Redhat/Oracle系列脚本:

#!/bin/sh
echo '删除系统自带docker'
yum remove -y docker \
	docker-client \
	docker-client-latest \
	docker-ce-cli \
	docker-common \
	docker-latest \
	docker-latest-logrotate \
	docker-logrotate \
	docker-selinux \
	docker-engine-selinux \
	docker-engine

echo '安装docker依赖'
yum install -y yum-utils device-mapper-persistent-data lvm2

echo '配置阿里云docker源'
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

echo '安装最新docker'
yum install -y docker-ce

echo 'docker开机启动'
systemctl enable docker

echo '启动docker'
systemctl start docker

echo 'docker国内源替换(可选)'
echo -e '{"registry-mirrors": ["https://dockerhub.azk8s.cn","https://reg-mirror.qiniu.com","https://registry.docker-cn.com"],"exec-opts": ["native.cgroupdriver=systemd"]}' > /etc/docker/daemon.json

echo '重新加载docker配置文件'
systemctl daemon-reload

echo '重启docker'
systemctl restart docker

Ubuntu/Debian系列安装脚本:

#!/bin/sh
echo '删除系统自带docker'
sudo apt-get remove -y docker \
   docker-client \
   docker-client-latest \
   docker-ce-cli \
   docker-common \
   docker-latest \
   docker-latest-logrotate \
   docker-logrotate \
   docker-selinux \
   docker-engine-selinux \
   docker-engine
echo '更新 apt-get'
sudo apt-get update

echo '安装docker依赖'
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common -y

echo '添加key'
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

echo '添加库下载地址'
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

echo '安装最新docker'
sudo apt-get install docker.io -y

echo 'docker开机启动'
sudo systemctl enable docker

echo '启动docker'
sudo systemctl start docker

echo 'docker国内源替换(可选)'
sudo echo -e '{"registry-mirrors": ["https://dockerhub.azk8s.cn","https://reg-mirror.qiniu.com","https://registry.docker-cn.com"],"exec-opts": ["native.cgroupdriver=systemd"]}' > /etc/docker/daemon.json

echo '重新加载docker配置文件'
sudo systemctl daemon-reload

echo '重启docker'
sudo systemctl restart docker

第二步:安装docker-compose

sudo curl -# -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose

第三步:安装Harbor

Harbor官网地址点击这里,查看releases列表,我们选择最新的:v2.10.0 Latest
在这里插入图片描述
这里有离线版本和在线版本,如果你服务器网络不错可以选择在线版本,这里我们选择离线版本。

快捷下载地址:

离线版本

在线版本

下载完成后并上传到服务器。

解压:

tar -xzvf harbor-offline-installer-v2.10.0.tgz

设置安装目录,这里我们安装到/usr/local目录下

mv harbor /usr/local/

进入目录:

cd /usr/local/harbor/

查看文件:

 ls
common.sh  harbor.v2.10.0.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare

复制配置文件:

cp harbor.yml.tmpl harbor.yml

修改配置文件:

vim harbor.yml
  1. 修改hostname。这里我们改成IP:hostname: 192.168.101.170
  2. 修改http.端口,这里我们改成2280。http.port: 2280
  3. 注释掉HTTPS的配置,如果要使用,可以使用另外的NGINX来替代。
  4. 修改管理员密码,默认值:harbor_admin_password: Harbor12345
  5. 修改docker挂载目录,这里根据需要来修改。data_volume: /harbordata

然后运行prepare:

./prepare

运行完毕后执行安装:

./install.sh

如果有如下信息输出表示安装成功并启动:

[+] Running 9/10
 ⠼ Network harbor_harbor        Created                                                                                                                                                                         3.5s 
 ✔ Container harbor-log         Started                                                                                                                                                                         0.7s 
 ✔ Container redis              Started                                                                                                                                                                         1.2s 
 ✔ Container harbor-db          Started                                                                                                                                                                         1.4s 
 ✔ Container registryctl        Started                                                                                                                                                                         1.5s 
 ✔ Container harbor-portal      Started                                                                                                                                                                         1.3s 
 ✔ Container registry           Started                                                                                                                                                                         1.5s 
 ✔ Container harbor-core        Started                                                                                                                                                                         2.6s 
 ✔ Container nginx              Started                                                                                                                                                                         3.1s 
 ✔ Container harbor-jobservice  Started                                                                                                                                                                         3.0s 
✔ ----Harbor has been installed and started successfully.----

使用docker检查:

docker ps

在这里插入图片描述

二、Harbor登录

安装成功后,我们便可以访问,上面我们监听的端口是2280,所以使用http://ip:2280直接访问:
在这里插入图片描述
默认管理员:admin
默认密码(harbor_admin_password配置):Harbor12345

登录后可以进行一些偏好设置,如修改主题,修改密码等操作:
在这里插入图片描述

三、Harbor项目管理

Harbor以项目为单位来管理镜像,一个项目可以包含多个镜像,下面我们来演示创建一个项目并推送镜像

第一步:创建项目

我们创建一个libs的项目,我们可以把一些常用的固定版本的公共镜像放进去,方便我们使用。
在这里插入图片描述

这个项目默认是私有的,点击项目可以查看操作详情:
在这里插入图片描述

第二步:推送镜像

  1. 这里我们找一个redis的镜像推送到我们的私有库。
docker pull redis:5.0.7
  1. 然后根据下面的命令进行重新命名:
docker tag SOURCE_IMAGE[:TAG] 8.137.81.52:2280/libs/REPOSITORY[:TAG]

SOURCE_IMAGE[:TAG] 表示源镜像
REPOSITORY[:TAG] 表示推送后的镜像
我们使用如下命令:

docker tag redis:5.0.7 8.137.81.52:2280/libs/myredis:5.0.7
  1. 登录harbor
docker login http://8.137.81.52:2280

输入用户名admin和密码,发现会报错误:

Error response from daemon: Get "https://8.137.81.52:2280/v2/": http: server gave HTTP response to HTTPS client

意思是本来是http的协议,结果客户端需要时HTTPS的返回。如果要添加docker登录HTTP协议,需要修改docker配置:

vim /etc/docker/daemon.json

在配置中加入:

"insecure-registries": ["http://8.137.81.52:2280"]

重启docker生效:

systemctl daemon-reload && systemctl restart docker

然后在登录,运行结果如下:

WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

登录成功

  1. 推送到Harbor仓库
docker push 8.137.81.52:2280/libs/myredis:5.0.7

查看结果:
在这里插入图片描述
说明已经成功推送到harbor了

四、Harbor权限控制

在上面的示例中,我们使用admin,我们可以专门来创建一些用户来进行不同的管理
在这里插入图片描述

这里我们创建一个test用户

然后回到项目点击项目详情:
在这里插入图片描述

点击添加用户
在这里插入图片描述

选择不同的角色

  • 项目管理员 项目的最高权限,拥有项目的一切操作
  • 维护人员 扫描镜像、查看复制作业以及删除镜像的能力
  • 开发者 拥有项目的读写权限
  • 访客 只读权限。可以拉取和重新标记镜像,但不能推送。
  • 受限访客 不完全读取权限。可以拉取镜像但不能推送,看不到日志或项目的其他成员。

上面我们创建一个test用户,并设置为受限访客,下面我们来测试这个用户的使用。

回到我们自己的电脑,然后再登录docker

我们先不登录,直接拉取镜像:

docker pull 8.137.81.52:2280/libs/myredis:5.0.7

这样会返回如下错误:

Error response from daemon: unauthorized: unauthorized to access repository: libs/myredis, action: pull: unauthorized to access repository: libs/myredis, action: pull

说明需要登录才能拉取我们的镜像

下面我们使用test用户登录

docker login http://8.137.81.52:2280

如果还是报Error response from daemon: Get “https://8.137.81.52:2280/v2/”:的错误,请修改我们本地的docker配置
这时我们要输入test用户:
在这里插入图片描述
然后我们pull刚才的镜像:

docker pull 8.137.81.52:2280/libs/myredis:5.0.7

结果:
在这里插入图片描述
拉取成功

五、Harbor自动清理多余的镜像

我们在平常的开发中,可能会生成很多版本的镜像,如果是Java程序每个镜像一般都是几百M,需要的硬盘资源很大,特别是在开发环境下,版本迭代非常快,时间久了,一些很早的版本就完全没用了,直接清理掉以释放硬盘资源。

手动清理

这种方式需要人工“智能”,手动去筛选需要清理的无用镜像,操作如下所示:
在这里插入图片描述

自动清理

在项目中使用策略来控制
在这里插入图片描述
添加规则:
在这里插入图片描述

上面我们只保留最近推送的5个版本的镜像,还可以进行匹配操作,大家可以根据自身情况进行配置。
在这里插入图片描述
添加定时任务来执行,这样就可以保证会自动清理掉那些不需要的镜像文件。


总结

Harbor作为docker私有镜像库来使用还是不错的,而且运行时内存和CPU的占用都还能过得去,当然也还可以对Harbor的组件进行优化处理,比如使用外部的数据库和Redis,这样还能减少资源的占用,大家可以自行研究。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/418022.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

广汽埃安工厂:蔚来汽车的造车工厂有哪些?

具体来说,理想汽车目前在常州仅有一家汽车制造工厂。 一期项目于2017年12月竣工,2019年12月投产,年产能10万辆/年。 同时,正在规划二期工程。 产能将增至20万辆/年。 此外,理想还计划接管现代汽车在北京顺义的第一家工…

Xcode :Could not build module ‘WebKit‘ 已验证解决

问题&#xff1a;Could not build module WebKit 具体报错如下&#xff1a; error: type argument nw_proxy_config_t (aka struct nw_proxy_config *) is neither an Objective-C object nor a block type property (nullable, nonatomic, copy) NSArray<nw_proxy_config_…

Qt 中Qwidget相关属性

文章目录 1. QWidget 核心属性1.1 enabled1.2 geometry1.2.1 window frame 的影响 1.3 windowTitle1.4 windowIcon1.4.1 qrc的使用 1.5 windowOpacity1.6 cursor1.7 focusPolicy1.8 styleSheet 1. QWidget 核心属性 在 Qt 中, 使⽤ QWidget 类表⽰ “控件”. 像按钮, 视图, 输…

Vue3自定义文章列表组件

一、Vue3的代码展示 <template><div><div v-for"article in articles" :key"article.id" class"article-card"><div class"author-info"><img :src"article.avatar" alt"Author Avatar&qu…

Vue+SpringBoot打造海南旅游景点推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…

房贷计算器微信小程序原生语言

微信小程序: 房贷计算器 效果: 输入 300万 结果 还款明细 一共有3个页面 1、输入页面 2、结果页面 3、详情页面 1 index页面 index.wxml文件 <view class="text-black"><!--房屋总价--><view class="cu-bar bg-white solid-bottom"&…

计算机二级MySQL-错题、知识点合集02

计算机二级数据库 第2章 MySQL数据库基础 在SQL语言按功能的分类中&#xff0c;包括DDL、DML、DCL。数据定义语言&#xff08;DDL&#xff09;对各种数据库对象&#xff08;非数据&#xff09;进行创建、删除、修改&#xff1b;数据操纵语言&#xff08;DML&#xff09;对各种数…

源码的角度分析Vue2数据双向绑定原理

什么是双向绑定 我们先从单向绑定切入&#xff0c;其实单向绑定非常简单&#xff0c;就是把Model绑定到View&#xff0c;当我们用JavaScript代码更新Model时&#xff0c;View就会自动更新。那么双向绑定就可以从此联想到&#xff0c;即在单向绑定的基础上&#xff0c;用户更新…

压缩视频大小的软件有哪些?5款软件推荐

压缩视频大小的软件有哪些&#xff1f;随着高清摄像设备的普及和网络速度的不断提升&#xff0c;视频文件变得越来越庞大&#xff0c;动辄数百兆甚至数GB的大小常常让用户在分享和存储时感到头疼。幸运的是&#xff0c;市面上有许多优秀的视频压缩软件可以帮助我们轻松应对这一…

CDH6.3.1离线安装

一、从官方文档整体认识CDH 官方文档地址如下&#xff1a; CDH Overview | 6.3.x | Cloudera Documentation CDH是Apache Hadoop和相关项目中最完整、测试最全面、最受欢迎的发行版。CDH提供Hadoop的核心元素、可扩展存储和分布式计算&#xff0c;以及基于Web的用户界面和重…

使用docker方式测试部署django项目(客户催)

需求 1&#xff1a;已有django项目–weidanyewu 2&#xff1a;希望在服务器上测试部署–客户催 3&#xff1a;没完善django的启动 4&#xff1a;使用临时数据库进行演示 5&#xff1a;使用python3.10版本镜像 6&#xff1a;展示端口80 7&#xff1a;后台执行django程序 8&#…

js 面试 sort背后原理及排序使用方法

1 sort 概念 2 原理 之前版本是用的插入排序 和 快速排序。 现在用的是冒泡排序。 3 排序方式&#xff1a; 2-1 根据字符码点排序 2-2 从小到大或从大到小排序 2-3 对数组中的对象进行排序

android开发技术论文,Android中为什么需要Handler

前言 马爸爸总结了一句话&#xff1a;跳槽&#xff0c;要么是钱不到位&#xff0c;要么是受了委屈。 我给自己这次的跳槽经历做了一个分析&#xff0c;希望能对那些想换工作的朋友有所帮助。 许多朋友想换工作&#xff0c;但是对“换工作”的理解可能仅限于写简历、投简历、…

“智农”-数字乡村可视化

“智农”打造数字乡村可视化&#xff0c;结合乡村区域实际情况&#xff0c;以规划完善乡村机制体系和更好服务乡村振兴为目标&#xff0c;坚持可持续、可复制、可扩展的建设原则&#xff0c;着力解决农村信息孤岛&#xff0c;提高农村种植技术&#xff0c;加快农村信息化和产业…

ES系列之Logstash实战入门

概述 作为ELK技术栈一员&#xff0c;Logstash用于将数据采集到ES&#xff0c;通过简单配置就能把各种外部数据采集到索引中进行保存&#xff0c;可提高数据采集的效率。 原理 数据源提供的数据进入Logstash的管道后需要经过3个阶段&#xff1a; input&#xff1a;负责抽取数…

数据库常见理论常见面试题(总结)

一、前言 这里呢&#xff0c;博主会介绍一些平时关于数据库的理论的问题&#xff0c;比如数据库的三级模式两级映射、触发器、范式、存储过程、视图等等概念知识&#xff0c;但是像索引、事务、锁等内容&#xff0c;之前的文章就讲解过了&#xff0c;这里就不作过多的介绍了&am…

Google大模型Bard更名Gemini,现在实力如何?(VS gpt系列)

名人说&#xff1a;一花独放不是春&#xff0c;百花齐放花满园。——《增广贤文》 作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、简要介绍1、Gemini是什么&#xff1f;2、主要特点3、Gemini的版本4、应用潜力5、…

docker容器配置mysql5.7主从复制

介绍 本文将通过docker创建3个mysql数据库容器&#xff0c;实现数据库主从复制功能&#xff0c;三个数据库容器分别为主库mysql-master:3307&#xff0c;从库mysql-slave-01:3308&#xff0c;mysql-slave-02:3309。使用的是mysql5.7版本 1. 拉取mongo镜像 docker pull mysql…

springboot230基于Spring Boot在线远程考试系统的设计与实现

在线远程考试系统设计与实现 摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到…

学不动系列-git-hooks和husky+lintstage

git-hooks 为了保证提交的代码符合规范&#xff0c;可以在上传代码时进行校验。常用husky来协助进行代码提交时的eslint校验。husky是基于git-hooks来实现&#xff0c;在使用husky之前&#xff0c;我们先来研究一下git-hooks。 构建git-hooks测试项目 需要使用git-hooks就需…