docker深入浅出系列|5分钟搭建你的私有镜像仓库(代码片段)

evan-liang evan-liang     2023-04-11     496

关键词:

Docker已经上市很多年,不是什么新鲜事物了,很多企业或者开发同学以前也不多不少有所接触,但是有实操经验的人不多,本系列教程主要偏重实战,尽量讲干货,会根据本人理解去做阐述,具体官方概念可以查阅官方教程,因为本系列教程对前一章节有一定依赖,建议先学习前面章节内容。

本系列教程导航:
Docker深入浅出系列 | 容器初体验
Docker深入浅出系列 | Image实战演练
Docker深入浅出系列 | 单节点多容器网络通信
Docker深入浅出系列 | 容器数据持久化
Docker深入浅出系列 | 单机Nginx+Springboot实战
Docker深入浅出系列 | Docker Compose多容器实战

教程目的:

  • 了解harbor是什么&为什么要用
  • 了解harbor的搭建流程
  • 了解harbor的基本操作

Harbor基本概念

技术图片

Harbor是什么

官方概念: Harbor是一个开放源代码容器映像镜像表,可通过基于角色的访问控制来保护镜像,扫描镜像中的漏洞并将镜像签名为受信任。 作为CNCF孵化项目,Harbor提供合规性,性能和互操作性,以帮助您跨Kubernetes和Docker等云原生计算平台持续,安全地管理镜像。

简单来说,Harbor就是一个开源的镜像管理仓库,类似Github一样,可以让我们存放一些镜像文件

更多详细内容,可以查看Harbor 官方文档

为什么要用

有动手跟着我前面教程练习的同学应该都有感受,之前的Springboot项目每次都需要在服务器创建镜像,当我有多台服务器需要用到这个镜像,我还得重复在每台服务器上创建一次,那有没有一个中间存储服务帮我们管理这些镜像,让所有的服务器可以共享这个镜像文件呢?Harbor的作用就是帮我们管理镜像,采用分布式架构,让我们可以在任意服务器拉去我们构建好的镜像文件。然后又会有人问我们不是已经有docker hub或者 docker hub这些远程仓库了吗?确实,但是当我们需要搭建一些私有镜像仓库,不想把公司项目对外公开的时候,Harbor就很有用了,就像很多公司也会在自己公司搭建私有的nexus服务器来管理公司内部的应用package。
技术图片


搭建Harbor镜像仓库

下载

到github选择一个harborrelease版本下载
https://github.com/goharbor/harbor/releases

上传到服务器

上传到你的linux服务器,我这里沿用上一章创建的manager节点

[root@manager-node harbor]# ls
common.sh              harbor.yml  LICENSE
harbor.v1.10.1.tar.gz  install.sh  prepare

上面是harbor应用解压后的文件

修改harbor配置

修改harbor配置文件
harbor.yml

#设置域名
hostname: 192.168.101.11

#设置http参数
# http related config
http:
  # port for http, default is 80. If https enabled, this port will redirect to https port
  port: 8090
  
#设置管理员密码
harbor_admin_password: evan123

#屏蔽https
#https:
  # https port for harbor, default is 443
 # port: 443

上面修改了hostname为我虚拟机的ip,端口把默认80端口替换成8090,并且修改了管理员密码为evan123。需要注意,我这里屏蔽了https,如果大家需要开启https,需要配置证书和key到指定位置

开启Docker Http访问权限

Docker默认是不支持http访问注册表,否则后面使用docker去访问harbor服务,入报如下错误:

http: server gave HTTP response to HTTPS client

这里需要先修改下/etc/docker/daemon.json配置,加入以下配置


  "insecure-registries" : ["192.168.101.11:8090"]

重启docker服务

systemctl restart docker

启动Harbor应用

假如没有Docker环境,harbor会启动报错

[root@manager-node harbor]# sh install.sh 

[Step 0]: checking if docker is installed ...

Note: docker version: 19.03.7

[Step 1]: checking docker-compose is installed ...

Note: docker-compose version: 1.25.0

[Step 2]: loading Harbor images ...
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

需要先安装Dockerdocker-compose组件,这里就不多说了,大家可以参考前面章节的安装教程

当启动Docker后,执行install.sh会自动完成安装

[root@manager-node harbor]# sh install.sh 
...
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-portal ... done
Creating registry      ... done
Creating redis         ... done
Creating harbor-db     ... done
Creating registryctl   ... done
Creating harbor-core   ... done
Creating nginx             ... done
Creating harbor-jobservice ... done
? ----Harbor has been installed and started successfully.----

上面显示已经安装成功了

访问Harbor应用

在浏览器输入上面我们配置的ip和端口192.168.101.11:8090,就会看到harbor登陆页面
技术图片

登陆Harbor

这里使用我们上面的定义的密码登陆

  • 账号 - admin
  • 密码 - evan123

技术图片


创建你第一个Harbor项目

创建项目

点击New会进入项目创建对话框,这里填入项目名称即可,这里的访问级别我选择public
技术图片

在使用Docker登陆Harbor

在使用Harbor之前,要在docker环境登陆Harbor服务

[root@manager-node harbor]# docker login 192.168.101.11:8090
Username: admin
Password: 
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

对现有的Image打Tag

  1. 查看现有的Image,这里我在前面教程已经创建了一些image
[root@manager-node credit-facility]# docker images
REPOSITORY                            TAG                              IMAGE ID            CREATED             SIZE
credit-facility-image                 latest                           28948b936fac        2 days ago          130MB
  1. 这里我选择credit-facility-image打个标签,新标签为credit-facility:1.0
docker tag credit-facility-image:latest credit-facility:1.0

发布Image到Harbor

  1. 使用Harbor的ip地址和前面创建好的项目名称credit-facility进行发布
[root@manager-node harbor]# docker push 192.168.101.11:8090/credit-facility/credit-facility-image
The push refers to repository [192.168.101.11:8090/credit-facility/credit-facility-image]
21f243c9904f: Pushed 
edd61588d126: Pushed 
9b9b7f3d56a0: Pushed 
f1b5933fe4b5: Pushed 
latest: digest: sha256:86a6289143d0a8a4cc94880b79af36416d07688585f8bb1b09fd4d50cd166f46 size: 1159

从上面显示结果可以看到,我们已经成功上传镜像到Harbor仓库了
技术图片

拉取Image到服务器

  1. 我们先把之前在本地创建的镜像删除,以免后面操作产生混淆
[root@manager-node harbor]# docker image rm 192.168.101.11:8090/credit-facility/credit-facility-image:latest 
Untagged: 192.168.101.11:8090/credit-facility/credit-facility-image:latest
Untagged: 192.168.101.11:8090/credit-facility/credit-facility-image@sha256:86a6289143d0a8a4cc94880b79af36416d07688585f8bb1b09fd4d50cd166f46
  1. 查看本地镜像列表
[root@manager-node harbor]# docker images
REPOSITORY                            TAG                              IMAGE ID            CREATED             SIZE

现在本地已经没有任何镜像

3.从Harbor仓库拉去镜像

[root@manager-node harbor]# docker pull 192.168.101.11:8090/credit-facility/credit-facility-image:latest
latest: Pulling from credit-facility/credit-facility-image
Digest: sha256:86a6289143d0a8a4cc94880b79af36416d07688585f8bb1b09fd4d50cd166f46
Status: Downloaded newer image for 192.168.101.11:8090/credit-facility/credit-facility-image:latest
192.168.101.11:8090/credit-facility/credit-facility-image:latest

镜像已经拉取成功

4.在查看本地镜像列表验证下

[root@manager-node harbor]# docker images
REPOSITORY                                                  TAG                              IMAGE ID            CREATED             SIZE
192.168.101.11:8090/credit-facility/credit-facility-image   latest                           28948b936fac        2 days ag

我们的镜像已经成功安装到本地了,这样即便我们以后换了一台服务器,也可以随时从Harbor仓库拉取镜像,不需要依赖本地服务器

docker入门与应用系列docker私有与公共镜像仓库

1.搭建私有镜像仓库DockerHub作为Docker默认官方公共镜像;如果想搭建自己的私有镜像仓库,官方提供registry镜像,使搭建私有仓库非常简单1.1.1下载registry镜像并启动dockerpullregistrydockerrun-d-v/opt/registry:/var/lib/registry-p5000:5000--restart=al... 查看详情

搭建docker私有仓库

...册,上传需要到公共仓库注册。公共仓库网站:https://hub.docker.com怎么新建和使用公共仓库,请百度。这里关注私有仓库的搭建。那么怎么构建属于自己的私有仓库呢?可以使用registry镜像来搭建本地的私有仓库。具体步骤如下:... 查看详情

搭建本地registry-每天5分钟玩转docker容器技术(20)

DockerHub虽然非常方便,但还是有些限制,比如:需要internet连接,而且下载和上传速度慢。上传到DockerHub的镜像任何人都能够访问,虽然可以用私有repository,但不是免费的。安全原因很多组织不允许将镜像放到外网。解决方案就... 查看详情

docker-搭建私有仓库(代码片段)

私服: 是公司自己存放docker镜像image的地方(自己做的镜像)私有仓库搭建与配置(1)拉取私有仓库镜像(此步省略)dockerpullregistry(2)启动私有仓库容器dockerrun-di--name=registry-p5000:5000registry2打开浏览器输入地址http://39.100.80.... 查看详情

docker的私有镜像仓库搭建

Docker的私有镜像仓库搭建一、配置镜像仓库服务器yum仓库1.安装docker环境包2.安装关于的dokcer的yum仓库3.测试yum仓库二、安装docker包三、下载registry镜像四、在docker客户端上修改daemon.json文件1.修改daemon.json文件2.重启相关服务五、... 查看详情

docker(4)搭建私有镜像仓库(代码片段)

【Docker】(4)搭建私有镜像仓库说明1、这里是通过阿里云,搭建Docker私有镜像仓库。2、这里打包的镜像是从官网拉下来的,并不是自己项目创建的新镜像,主要测试功能一、搭建过程首先进入阿里云创建镜像仓库:https://dev.aliyun.... 查看详情

docker深入浅出系列|容器初体验(代码片段)

原文:Docker深入浅出系列|容器初体验目录Docker深入浅出系列|容器初体验教程目标预备工作容器与虚拟化技术什么是Docker为什么要用Docker事例什么是容器镜像和容器容器与虚拟机的区别Vagrant与Docker的区别Docker引擎和架构Docker的镜... 查看详情

docker私有仓库的搭建

Docker搭建本地私有仓库的详细步骤Dockers不仅提供了一个中央仓库,同时也允许我们使用registry搭建本地私有仓库。使用私有仓库有许多优点:一、节省网络带宽,针对于每个镜像,不用每个人都去中央仓库上面去下载,只需要从... 查看详情

搭建docker私有镜像仓库

参考技术A为了更方便的部署应用到Docker容器中,可以将打包应用镜像直接通过dockerpush命令推送到服务器所在地镜像仓库中,所以需要搭建私有镜像仓库。本文使用Docker公司开发的私有镜像裤Registry。如果registry版本在2.7以下可以... 查看详情

docker进阶-搭建私有企业级镜像仓库harbor(代码片段)

为什么要搭建私有镜像仓库??对于一个刚刚接触Docker的人来说,官方的Dockerhub是用于管理公共镜像。既然官方提供了镜像仓库我们为什么还要去自己搭建私有仓库呢?虽然也可以托管私有镜像。我们可以非常方便的把我们自己镜像... 查看详情

docker:搭建私有镜像仓储(imageregistry)

...环境中,我们要搭建自己的专有仓储 下载registry镜像dockerpullregistry 运行镜像dockerrun-d-p5000:5000registry默认情况下,会将仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所 查看详情

docker—搭建本地私有仓库(代码片段)

docker一、准备工作1.1下载registry镜像1.2添加镜像仓库地址二、开启容器三、测试3.1为镜像打标签3.2上传到私有的仓库3.3删除现有镜像,重新下载一、准备工作1.1下载registry镜像dockerpullregistry1.2添加镜像仓库地址在daemon.json文件... 查看详情

docker搭建私有仓库

...确定你服务器的5000端口没有被占用下载registry镜像并运行dockerrun-d–p5000:5000 查看详情

教你分分钟搞定docker私有仓库registry

一、什么是Docker私有仓库Registry官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。但是,有时候我们的服务器无法访问互联网,或者你不希望将自己... 查看详情

docker镜像创建私有仓库搭建和数据管理(代码片段)

Docker镜像的创建方法Docker镜像除了是Docker的核心技术之外也是应用发布的标准格式。一个完整的Docker镜像可以支撑一个Docker容器的运行,在Docker的整个使用过程中,进入一个已经定型的容器之后,就可以在容器中进行操作,最常... 查看详情

企业运维实战--最全docker学习笔记1.docker简介安装部署镜像构建dockerfile详解镜像构建镜像优化本地私有仓库搭建(代码片段)

企业运维实战--Docker学习笔记1.Docker简介、安装部署、镜像构建、Dockerfile详解、镜像构建、镜像优化、本地私有仓库搭建前言--Docker简介一、Docker安装部署二、镜像的构建三、Dockerfile详解四、镜像构建--nginx五、镜像优化六、本地... 查看详情

docker:用registry快速搭建私有镜像仓库(代码片段)

1、背景在Docker中,当我们执行dockerpullxxx的时候,可能会比较好奇,docker会去哪儿查找并下载镜像呢??它实际上是从registry.hub.docker.com这个地址去查找,这就是Docker公司为我们提供的公共仓库,上面的镜像,大家都可以看到,也... 查看详情

docker基础-搭建本地私有仓库

1、使用registry镜像创建私有仓库  安装Docker后,可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境:dockerrun-d-p5000:5000registry这条命令将自动下载并启动一个registry容器,创建本地的私有仓库服务。默认会将仓库... 查看详情