利用harbor搭建企业级私有镜像仓库(文末赠书)(代码片段)

author author     2022-12-12     781

关键词:

利用 Harbor 搭建企业级私有镜像仓库(文末赠书)

收录于话题
#Docker 专辑
9个

「 点击图片获取最近两年爆款好文 」

背景

docker中要使用镜像,一般会从本地、docker Hup公共仓库和其它第三方公共仓库中下载镜像,一般出于安全和外网(墙)资源下载速率的原因考虑企业级上不会轻易使用。那么有没有一种办法可以存储自己的镜像又有安全认证的仓库呢?


—-> 企业级环境中基于Harbor搭建自己的安全认证仓库。

Harbor是VMware公司最近开源的企业级Docker Registry项目, 其目标是帮助用户迅速搭建一个企业级的Docker registry服务。

安装Harbor

harbor需要安装docker和docker-compose才能使用,安装docker的步骤可参考之前的旧文:Docker容器技术入门(一)

安装docker-dompose

docker-dompose安装步骤如下:
下载最新版的docker-compose文件


$ curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

添加可执行权限


$ chmod +x /usr/local/bin/docker-compose

验证版本


$ docker-compose -v
docker-compose version 1.23.2, build 1110ad01

获取Harbor软件包


https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.1.tgz

解压


tar -xf harbor-offline-installer-v1.7.1.tgz -C /usr/local/

编辑配置文件

$ cd /usr/local/harbor
$ vim harbor.cfg
hostname = reg.for-k8s.com
# 本机外网IP或域名,该地址供用户通过UI进行访问,不要使用127.0.0.1
ui_url_protocol = https
# 用户访问私仓时使用的协议,默认时http,配置成https
db_password = root123
# 指定mysql数据库管理员密码
harbor_admin_password:Harbor12345
# harbor的管理员账户密码
ssl_cert = /data/cert/reg.for-k8s.com.crt
# 设置证书文件路径
ssl_cert_key = /data/cert/reg.for-k8s.com.key
# 设置证书密钥文件路径

####其他配置选项按需填写即可

生成ssl证书

生成根证书


$ cd /dada/cert/
$ openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt -subj "/C=CN/L=Shanghai/O=harbor/CN=harbor-registry"

生成一个证书签名, 设置访问域名为 reg.for-k8s.com


$ openssl req -newkey rsa:4096 -nodes -sha256 -keyout reg.for-k8s.com.key -out server.csr -subj "/C=CN/L=Shanghai/O=harbor/CN=reg.for-k8s.com"

生成主机证书


$ openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out reg.for-k8s.com.crt

通过自带脚本一键安装

安装步骤如下:

$ cd /usr/local/harbor/
./install.sh
......
......
......
? ----Harbor has been installed and started successfully.----

Now you should be able to visit the admin portal at https://reg.for-k8s.com.
For more details, please visit https://github.com/goharbor/harbor .

然后绑定hosts访问即可:
技术图片
默认账号密码 admin / Harbor12345
ok 那上面的私有仓库服务已经搭建完毕了,该怎么使用呢?
首先在harbor上创建一个项目myproject(我这里不使用默认的libary)
技术图片
这里我选择私有仓库, pull/push都需要在主机上面执行docker login才行;

1、当我通过Dockerfile构建一个新镜像的时候, 直接指明registry和标签, 比如:

$ docker build -t reg.for-k8s.com/myproject/mydocker-image:v1.0.1 .
Sending build context to Docker daemon 97.21MB
Step 1/12 : FROM 1and1internet/ubuntu-16
 ---> dbf985f1f449
Step 2/12 : MAINTAINER guomaoqiu <guomaoqiu@gmail.com>
 ---> Using cache
 ---> 598894333db9
......
......
Successfully built b190966f3773
Successfully tagged reg.for-k8s.com/myproject/mydocker-image:v1.0.1

$ docker images | grep myproject
reg.for-k8s.com/myproject/mydocker-image v1.0.1   b190966f3773  44 seconds ago 482MB

2、加入当你从别处获取的镜像想上传到私有仓库呢?就是打个tag就行啦, 比如我想把从官网的这个nginx镜像放到我的仓库:

$ docker tag nginx reg.for-k8s.com/myproject/mynginx:latest
$ docker images | grep myproject
reg.for-k8s.com/myproject/mydocker-image v1.0.1 b190966f3773  2 minutes ago 482MB
reg.for-k8s.com/myproject/mynginx latest 568c4670fa80  5 weeks ago  109MB

3、登录仓库

$ docker login -u admin -p Harbor12345 reg.for-k8s.com
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

4、最后把本地的镜像push到仓库
当我执行这个的时候报错了:

docker push reg.for-k8s.com/myproject/mynginx:latest
Error response from daemon: Get https://reg.for-k8s.com/v2/: x509: certificate signed by unknown authority

解决办法就是如果不在客户端部署证书,那么在Docker启动时设置参数 “–insecure-registry IP/仓库域名”,然后重载服务重启docker进程;注意的是我这里使用的这个域名是自定义的,那么需要在需要上传下载镜像的机器上,同样需要修改docker进程参数,并且绑定hosts,否则即使配置了参数,这个域名没法解析也是push/pull不到镜像的。
5、再次执行push操作:

$ docker push reg.for-k8s.com/myproject/mynginx:latest
The push refers to repository [reg.for-k8s.com/myproject/mynginx]
b7efe781401d: Pushed
c9c2a3696080: Pushed
7b4e562e58dc: Pushed
latest: digest: sha256:e2847e35d4e0e2d459a7696538cbfea42ea2d3b8a1ee8329ba7e68694950afd3 size: 948

$ [root@k8s-m1 kubectl-terminal-ubuntu]# docker push reg.for-k8s.com/myproject/mydocker-image:v1.0.1
The push refers to repository [reg.for-k8s.com/myproject/mydocker-image]
96dca48ee72c: Pushed
fa879b69764c: Pushed
4d823b00e6b7: Pushed
6bf6e96da4a0: Pushed
eedda540c6a8: Pushed
f2a971e53afa: Pushed
3ee1a3b3fd18: Pushed
8a225cfa6dea: Pushed
428c1ba11354: Pushed
b097f5edab7b: Pushed
27712caf4371: Pushed
8241afc74c6f: Pushed
v1.0.1: digest: sha256:a20629f62d73cff93bf73b31958878a1d76c2dd42e36ebb2cb6d0ac294a46da7 size: 2826

技术图片

以上push成功;
测试pull

那为了测试pull并且能成功运行,我这里通过kuernetes运行一个DaemonSet,镜像采用: mynginx ,并且设置镜像pull策略为Always, 然后创建一个服务在集群内部通过ClusterIP能够访问, yaml如下:

$ cat >> test.yaml << EOF
apiVersion: v1
kind: Service
metadata:
  labels:
    app: mynginx-service
  name: mynginx-service
spec:
  ports:
  - name: 80-80
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: mynginx
  type: ClusterIP
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  labels:
    run: mynginx
  name: mynginx
spec:
  selector:
    matchLabels:
      run: mynginx
  template:
    metadata:
      labels:
        run: mynginx
    spec:
      containers:
      - image: reg.for-k8s.com/myproject/mynginx:latest
        imagePullPolicy: Always
        name: mynginx
EOF

$ kubectl apply -f daemonset.yaml
service/mynginx-service created
daemonset.extensions/mynginx create

由于我刚才创建仓库的时候设置的仓库隐私性为私有的,需要docker login 登录成功之后,k8s kubectl create 就拉取不了镜像;如果设置为公开,那么久不需要配置这一步骤。只需要docker login 登录成功之后,k8s kubectl create 就可以拉取镜像; 但是我不想让其为公开的;所以还需要配置如下步骤:
配置一个私有仓库harbor的secret:

kubectl create secret docker-registry registry-secret --namespace=default --docker-server=https://reg.for-k8s.com --docker-username=admin --docker-password=Harbor12345

部署时指定imagePullSecrets, 修改在上面的yaml中添加这个选项:

$ cat >> test.yaml << EOF
apiVersion: v1
kind: Service
metadata:
  labels:
    app: mynginx-service
  name: mynginx-service
spec:
  ports:
  - name: 80-80
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: mynginx
  type: ClusterIP
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  labels:
    run: mynginx
  name: mynginx
spec:
  selector:
    matchLabels:
      run: mynginx
  template:
    metadata:
      labels:
        run: mynginx
    spec:
      containers:
      - image: reg.for-k8s.com/myproject/mynginx:latest
        imagePullPolicy: Always
        name: mynginx
      imagePullSecrets:
        - name: registry-secret
EOF

$ kubectl apply -f daemonset.yaml
service/mynginx-service created
daemonset.extensions/mynginx create

技术图片技术图片

以上就是基于Harbor组建企业级私有镜像仓库的全部过程。

版权申明:本文系作者原创投稿,版权归原作者所有。

福利时间
学完了如何构建企业私有镜像仓库之后,今天民工哥技术之路公众号联合机械工业华章图书给大家带来《阿里云运维架构实践秘籍》赠书福利活动,助力大家更好的选好云、用好云,用云来提高我们的生产力。

推荐理由:

云端运维架构实践的十八招绝技,覆盖二十余款热门云产品实践、五十余种常见开源热门技术实践。“乔帮主”历时八年的云端技术实践,包含百余种云端架构技术实践的技巧和方法、千余项实践案例的经验。

赠书规则:

1、文章后留言说说你在使用、运维管理阿里云方面的经验,或者想要这本书的理由,并点在看和转发本文至朋友圈(分组无效),我们将选择3名读者获得赠书各1本。
2、活动仅限公众号读者参与,截止时间2020年5月11日20:00。
注:获得赠书资格的读者请8小时内联系小编发送详细收货地址, 逾期视为主动放弃。
end

最新整理的 2TB 技术干货:包括架构师实战教程、大数据、Docker容器、系统运维、数据库、redis、MongoDB、电子书、Java基础课程、Java实战项目、ELK Stack、机器学习、BAT面试精讲视频等。只需在「 民工哥技术之路」微信公众号对话框回复关键字:1024 即可获取全部资料。
精彩文章推荐:
带你全面认识 Linux
推荐 5 款良心网盘,免费、空间大、不限速!
再见,*** !
小心微信被封号,这码千万不要扫!
Github下载慢解决了!「100%有效」
CentOS 7.8 (2003) 发布,附下载地址
技术图片
好文章,朕「在看」??↓↓↓
文章已于2020-05-07修改
收录于话题 #Docker 专辑
9

上一篇
下一篇

私有仓库harbor的搭建(代码片段)

...境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的DockerRegistry管理项目,相比docker官方拥有更丰富的权限权利和完善的架构设计,适用大规模docker集群部署提供仓库服务。它主要提供DcokerRegistry管理界面UI,可基于... 查看详情

使用harbor搭建企业级私有docker仓库

参考技术AHarbor一个用于存储Docker镜像的企业级Registry服务。Harbor核心组件解释*Proxy:他是一个nginx的前端代理,代理Harbor的registry,UI,token等服务。*db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。*UI:提供图形化界面... 查看详情

企业级私有仓库,镜像仓库harbor(代码片段)

Harbor简介Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源DockerDistribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全... 查看详情

教你轻松玩harbor-常用的企业级私有仓库(代码片段)

...?掌握常用的harbor搭建方法内容:1、Harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是DockerRegistry的更高级封装。harbor还是由一个个镜像组成一个架构,实现私有仓库的功能。它除了提供友好的WebUI界面࿰... 查看详情

利用阿里云ecs部署自己的私有harbor镜像仓库(代码片段)

文章目录利用阿里云ECS部署自己的私有harbor镜像仓库harbor简介harbor的部署安装依赖安装docker安装docker-compose安装harborharbor的一些镜像浏览器访问向harbor推送nginx镜像利用阿里云ECS部署自己的私有harbor镜像仓库harbor简介虽然Docker官... 查看详情

利用阿里云ecs部署自己的私有harbor镜像仓库(代码片段)

文章目录利用阿里云ECS部署自己的私有harbor镜像仓库harbor简介harbor的部署安装依赖安装docker安装docker-compose安装harborharbor的一些镜像浏览器访问向harbor推送nginx镜像利用阿里云ECS部署自己的私有harbor镜像仓库harbor简介虽然Docker官... 查看详情

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

HarborHarbor是构建企业级私有docker镜像的仓库的开源解决方案,它是DockerRegistry的更高级封装,它除了提供友好的WebUI界面,角色和用户权限管理,用户操作审计等功能外,它还整合了K8s的插件(Add-ons)仓库,即Helm通过chart方式下载... 查看详情

docker搭建harbor仓库(代码片段)

...用户的特点,设计镜像复制和中文支持等功能。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在 查看详情

harbor仓库介绍与搭建过程

...集装箱的原理。所以,Harbor正是一个用于存储Docker镜像的企业级Registry服务。Registry是Dcoker官方的一个私有仓库镜像,可以将本地的镜像打标签进行标记然后push到以Registry 查看详情

harbor仓库介绍与搭建过程

...集装箱的原理。所以,Harbor正是一个用于存储Docker镜像的企业级Registry服务。Registry是Dcoker官方的一个私有仓库镜像,可以将本地的镜像打标签进行标记然后push到以Registry 查看详情

docker-harbor私有仓库的部署与管理

一、Harbor概述1、Harbor的概念•Harbor是VMware公司开源的企业级DockerRegistry项目,其目标是帮助用户迅速搭建一个企业级的DockerRegistry服务•Harbor以Docker公司开源的Registry为基础,提供了图形管理UI、基于角色的访问控制(RoleBasedAccessCo... 查看详情

centosos搭建harbor私有docker仓库,及harbor使用(代码片段)

一、HarborHarbor是由VMware公司开源的企业级的DockerRegistry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。二、Harbor核心组件Proxy:他是一个nginx的前端代理,代理Harbo... 查看详情

docker--------harborregistry私有仓库搭建[http]

...镜像,一般出于安全和外网(墙)资源下载速率的原因考虑企业级上不会轻易使用。那么有没有一种办法可以存储自己的镜像又有安全认证的仓库呢?---->企业级环境中基于Harbor搭建自己的私有仓库。      &nb 查看详情

docker企业级私有仓库——harbor介绍和部署(代码片段)

Docker企业级私有仓库——Harbor介绍和部署前言?docker容器应用及开发和运行离不开可靠的镜像管理,在前面的文章我们提到了我们在拉取镜像的时候使用的是docker官方提供的公共镜像仓库,但是无论从安全还是效率等其他方面考... 查看详情

docker私有仓库(代码片段)

...bor日常操作管理Harbor管理生命周期Harbor是VMware公司开源的企业级DockerRegistry项目Harbor的优势基于角色控制基于镜像的复制策略支持LDAP/AD图像删除和垃圾收集图形UI审计RESTfulAPIProxy通过一个前置的反向代理统一接受浏览器,Docker客... 查看详情

linux运维容器篇docker私有仓库harbor生产搭建(代码片段)

文章目录一harbor仓库简介简介和registry对比核心组件二部署harbor仓库安装dockercompoasdocker-ceserver端安装harbor检查结果访问web界面添加项目创建用户server控制台端登陆上传镜像登录上传镜像其他客户端上传镜像解决一harbor仓库简介简... 查看详情

docker私有仓库之---harbor仓库的搭建及使用(代码片段)

一、什么是harborHarbor是VMware公司开源的企业级DockerRegistry项目,其目标是帮助用户迅速搭建一个企业级的DockerRegistry服务。Harbor以Docker公司开源的Registry为基础,提供了图形管理UI、基于角色的访问控制(RoleBasedAccessControl)、... 查看详情

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

docker一、简介1.1概述1.2特性1.3构成二、部署服务2.1部署harbor服务准备工作2.2修改配置文件2.3启动harbor2.4查看启动镜像2.5创建新项目2.6在其他客户端上传镜像测试三、维护管理harbor3.1创建harbor用户3.2在client使用普通账户操作镜像3.3... 查看详情