技术交流QQ群:①185473046   ②190706903   ③203744115   网站地图
登录

下次自动登录
现在的位置: 首页Docker>正文
使用Harbor搭建Docker私有镜像仓库
2024年10月08日 Docker 暂无评论 ⁄ 被围观 424次+

Harbor简介:

Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能

可以用Harbor来搭建私有Docker镜像仓库

Harbor官网:

https://goharbor.io/

https://github.com/goharbor/harbor

截止目前最新版本的离线安装包下载地址(需要科学上网):

https://github.com/goharbor/harbor/releases/download/v2.11.1/harbor-offline-installer-v2.11.1.tgz

部署Harbor需要提前安装docker和Docker-Compose

Linux下安装部署Docker二进制版本

https://www.osyunwei.com/archives/13930.html

安装部署Harbor

1、为Harbor生成自签名证书

1.1. 生成CA私钥

openssl genrsa -out ca.key 2048

1.2. 生成自签名CA证书

openssl req -new -x509 -days 36500 -key ca.key -subj "/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=Acme Root CA" -out ca.crt

1.3. 生成服务器私钥和CSR,CN=192.168.21.201 表示证书的通用名称

openssl req -newkey rsa:2048 -nodes -keyout server.key -subj "/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=192.168.21.201" -out server.csr

1.4. 使用CA签发服务器证书并添加SAN

openssl x509 -req -extfile <(printf "subjectAltName=IP:192.168.21.201") -days 36500 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt

#这里我们将 SAN 更改为 IP:192.168.21.201,以确保证书支持通过该IP地址访问

#如果是域名,subjectAltName=DNS:example.com

#IP和域名同时生成证书,subjectAltName=DNS:example.com,IP:192.168.21.201

#实际上要用到的是这2个文件

/data/server/harbor/ssl/server.crt

/data/server/harbor/ssl/server.key

2、安装部署Harbor

cd /data/server/harbor/ #进入安装包存放目录

tar -zxvf harbor-offline-installer-v2.11.1.tgz #解压

cd /data/server/harbor/harbor

cp harbor.yml.tmpl harbor.yml #拷贝模版文件

vi harbor.yml #修改配置文件

#修改hostname的值,如果没有域名就使用本机IP地址

hostname: 192.168.21.201  #设置主机名

#配置启动端口号

# http related config

http:

# port for http, default is 80. If https enabled, this port will redirect to https port

port: 80 #端口

https:

# https port for harbor, default is 443

port: 443  #端口

# The path of cert and key files for nginx

certificate: /data/server/harbor/ssl/server.crt   #证书目录

private_key: /data/server/harbor/ssl/server.key  #秘钥目录

# Remember Change the admin password from UI after launching Harbor.

harbor_admin_password: Harbor12345  #设置登录账号密码

:wq! #保存退出

#配置文件修改成功后,执行 install.sh 脚本进行安装harbor

./install.sh

#显示如下信息,说明harbor已经安装部署好了

✔ ----Harbor has been installed and started successfully.----

浏览器打开https://192.168.21.201/

harbor的登录账号密码是:admin/Harbor12345

默认就是中文界面,可以创建项目,添加账号,设置访问权限等操作。

#重新启动 Harbor 所有的容器命令

cd /data/server/harbor/harbor

docker-compose down

docker-compose up -d

cd /data/server/harbor/harbor

每次修改配置文件的后都要重新执行./prepare否则配置文件不生效

3、使用Harbor

#私有仓库使用自签名证书,Docker 默认无法验证其 SSL/TLS 证书

#在这种情况下,将仓库地址添加到 insecure-registries 可以绕过证书验证,从而允许 Docker 连接到该仓库

#在docker中添加私有仓库的地址

vi /etc/docker/daemon.json #编辑,添加下面内容,保持 JSON 的格式正确,添加逗号分隔

"insecure-registries": ["192.168.21.201"],

:wq! #保存退出

sudo systemctl daemon-reload

sudo systemctl restart docker

登录私有仓库地址:

echo "Harbor12345" | docker login -u admin --password-stdin https://192.168.21.201

#出现Login Succeeded说明登录成功

#认证信息存储在~/.docker/config.json文件中,只要不删除,登录会一直生效无需要每次操作前都登录

#还可以给docker添加自签名证书,让它能够让验证我们的私有SSL/TLS 证书

#将上一步生成的自签名证书ca.crt拷贝到Docker 的证书存储位置

mkdir -p /etc/docker/certs.d/192.168.21.201 #在doker客户端创建目录

scp /data/server/harbor/ssl/ca.crt 192.168.21.203:/etc/docker/certs.d/192.168.21.201 #拷贝证书到客户端

4、docker客户端上传下载镜像

查看镜像:

docker images

删除镜像:

docker rmi 192.168.21.201/library/nginx:latest

在项目中标记镜像:

docker tag docker.rainbond.cc/nginx:latest 192.168.21.201/library/nginx:latest

登录私有仓库地址:

echo "Harbor12345" | docker login -u admin --password-stdin https://192.168.21.201

推送镜像到当前项目:

docker push 192.168.21.201/library/nginx:latest

可以在web页面查看,镜像已经上传上去了。

#拉取镜像

docker pull 192.168.21.201/library/nginx:latest

#一键查询Harbor仓库中所有镜像及版本号

sudo yum install jq  #需要安装jq命令

vi  get_images.sh

#!/bin/bash

# 使用时需先改以下3个变量参数,如果Harbor未启用https,需要去除curl中的-k参数

HARBOR_URL="http://192.168.21.130:80"

USERNAME="admin"

PASSWORD="123456"

# API endpoint to get all images

imges_head=$(echo "$HARBOR_URL"|awk -F // '{print $2}' )

projects_endpoint="$HARBOR_URL/api/v2.0/projects"

projects=$(curl -u $USERNAME:$PASSWORD -skX 'GET' $projects_endpoint |jq -r '.[].name')

for project in $projects;do

repo_count_endpoint="$HARBOR_URL/api/v2.0/projects?name=$project"

repo_count=$(curl -u $USERNAME:$PASSWORD -skX 'GET' $repo_count_endpoint |jq -r '.[].repo_count')

pages=$(expr $repo_count / 10 + 1)

for ((i=1;i<=$pages;i++));do

images_endpoint="$HARBOR_URL/api/v2.0/projects/$project/repositories?page_size=10&page=$i"

repos=$(curl -u $USERNAME:$PASSWORD -skX 'GET' $images_endpoint | jq -r '.[].name' |awk -F / '{print $2}')

for repo in $repos;do

tag_count_url="$HARBOR_URL/api/v2.0/projects/$project/repositories/$repo"

tag_count=$(curl -u $USERNAME:$PASSWORD -skX 'GET' $tag_count_url |jq '.artifact_count')

pages1=$(expr $tag_count / 10 + 1)

for ((j=1;j<=$pages1;j++));do

tags_endpoint="$HARBOR_URL/api/v2.0/projects/$project/repositories/$repo/artifacts?page_size=10&page=$j"

tags=$(curl -u $USERNAME:$PASSWORD -skX 'GET' $tags_endpoint |jq -r '.[].tags' |jq -r '.[].name')

for tag in $tags;do

echo "$imges_head/$project/$repo:$tag"

done

done

done

done

done

:wq! #保存退出

chmod +x get_images.sh

sh  get_images.sh

至此,使用Harbor搭建Docker私有镜像仓库完成。

     

  系统运维技术交流QQ群:①185473046 系统运维技术交流□Ⅰ ②190706903 系统运维技术交流™Ⅱ ③203744115 系统运维技术交流™Ⅲ

给我留言

您必须 [ 登录 ] 才能发表留言!



Copyright© 2011-2024 系统运维 All rights reserved
版权声明:本站所有文章均为作者原创内容,如需转载,请注明出处及原文链接
陕ICP备11001040号-3