自动化构建平台(三)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-engineecho '安装docker依赖'
yum install -y yum-utils device-mapper-persistent-data lvm2echo '配置阿里云docker源'
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoecho '安装最新docker'
yum install -y docker-ceecho 'docker开机启动'
systemctl enable dockerecho '启动docker'
systemctl start dockerecho '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.jsonecho '重新加载docker配置文件'
systemctl daemon-reloadecho '重启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 updateecho '安装docker依赖'
sudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common -yecho '添加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 -yecho 'docker开机启动'
sudo systemctl enable dockerecho '启动docker'
sudo systemctl start dockerecho '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.jsonecho '重新加载docker配置文件'
sudo systemctl daemon-reloadecho '重启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-storeLogin 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,这样还能减少资源的占用,大家可以自行研究。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HOOPS Communicator对3D大模型轻量化加载与渲染的4种解决方案

今天给大家介绍一些关于3D Web轻量化引擎HOOPS Commuicator的关键概念,这些概念可以帮您在HOOPS Communicator流缓存服务器之上更好地构建您自己的模型流服务器。如果您是有大型数据集,那么,使用流缓存服务器可以极大地帮助您最大限度地减少内…

通过jenkins进行部署java程序到centos上

1.通过jumpserver访问到centos上,准备下java环境 // step1: 先编辑下 vim /etc/profile// step2: 编写好环境变量 JAVA_HOME/usr/local/java export JAVA_HOME export ZOOKEEPER_HOME/opt/zookeeper/apache-zookeeper-3.7.0-bin PATH$PATH:$JAVA_HOME/bin:$ZOOKEEP…

IntelliJ IDEA上svn分支管理和使用

IntelliJ IDEA上svn分支管理和使用 从Subversion下载trunk下的代码 选择项目创建分支 右键 Subversion --> branch or Tag … 选择Repository Location:需要创建的项目 选择Any Location 分支的位置和名字 详细查看截图 切换到分支 选择项目右键Subversion --> Update …

DolphinScheduler——蔚来汽车数据治理开发平台的应用改造

目录 一、业务痛点 二、应用现状 三、技术改造 3.1 稳定性 3.1.1 滚动重启黑名单机制精准路由 3.2 易用性 依赖节点优化 补数任务优化 多 SQL 执行 原文大佬的这篇基于调度系统的数据治理案例有借鉴意义,这里摘抄下来用作学习和知识沉淀。 一、业务痛点 蔚…

小程序实现定位城市切换且城市根据首字母A-Z排序后端数据实现逻辑

场景: 话不多说后端提供数据实现步骤: 1.controller层 Api(tags {"[地区]-城市相关接口"}) RestController RequestMapping("region") Slf4j public class RegionController extends BaseController {Resourceprivate RegionServ…

MCBPS配置成SPI

MCBPS配置成SPI 典型的SPI接口 McBSP作为SPI主机 以McBSP为主的SPI接口如图所示。当McBSP被配置为主控器时,发送输出信号(DX)被用作SPI协议的SPISIMO信号,并且接收输入信号(DR)被用作SPISOMI信号。 表列出了将McBSP配置为主控器所需的寄存器位值。下表是有关配置要求…

HQL,SQL刷题,尚硅谷

目录 相关表数据: 题目及思路解析: 查询结果排序&分组指定条件 1、查询学生的总成绩并按照总成绩降序排序 2、按照如下格式显示学生的语文、数学、英语三科成绩,没有成绩的输出为0,按照学生的有效平均成绩降序显示 3、查询一…

OJ_二叉树已知先序遍历序列(有空叶子)求中序遍历序列

题干 C实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<vector> using namespace std;struct TreeNode {char data;TreeNode* left;TreeNode* right; };TreeNode* RecursiveBuildTree(int& i, char str[]) {char c str[i];i;if (c #) {re…

百度SEO工具,自动更新网站的工具

在网站SEO的过程中&#xff0c;不断更新网站内容是提升排名和吸引流量的关键之一。而对于大多数网站管理员来说&#xff0c;频繁手动更新文章并进行SEO优化可能会是一项繁琐且耗时的任务。针对这一问题&#xff0c;百度自动更新文章SEO工具应运而生&#xff0c;它能够帮助网站管…

LeetCode 2120.执行所有后缀指令

现有一个 n x n 大小的网格&#xff0c;左上角单元格坐标 (0, 0) &#xff0c;右下角单元格坐标 (n - 1, n - 1) 。给你整数 n 和一个整数数组 startPos &#xff0c;其中 startPos [startrow, startcol] 表示机器人最开始在坐标为 (startrow, startcol) 的单元格上。 另给你…

Docker中创建nginx-rtmp流媒体服务器

准备工作 需要安装好docker安装好镜像 docker pull alfg/nginx-rtmp docker run -it -p 1935:1935 -p 8080:80 --rm alfg/nginx-rtmp #创建临时容器&#xff0c;容器停止即删除安装好ffmpeg sudo apt update sudo apt install ffmpeg ffmpeg -version安装成功出现如下信息&…

ChatGPT4.0 的优势、升级 4.0 为什么这么难以及如何进行升级?

前言 “ChatGPT4.0一个月多少人民币&#xff1f;” ”chatgpt4账号“ ”chatgpt4 价格“ “chatgpt4多少钱” 最近发现很多小伙伴很想知道关于ChatGPT4.0的事情&#xff0c;于是写了这篇帖子&#xff0c;帮大家分析一下。 一、ChatGPT4.0 的优势 &#xff08;PS&#xff1a;…