harbor私有镜像仓库搭建

harbor私有镜像仓库搭建

一、准备

1.1 harbor介绍

Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。

1.2 资源准备

安装harbor之前请查看:
安装docker安装docker-compose

名称资源地址
harbor-1.10.1https://github.com/goharbor/harbor/releases
1.3 配置对Harbor的HTTPS访问

官网文档说明:https://goharbor.io/docs/1.10/install-config/configure-https/

由于harbor login以及pull的时候命令行用ip会报错,所以要配置一下hosts文件ip映射

  1. 修改hosts文件
vi /etc/hosts
----------------------------------------------
新增一行
39.96.46.193   nodeb
----------------------------------------------
  1. 生成CA证书私钥
//路径不存在就自己创建
cd /root/ca
openssl genrsa -out ca.key 2048
  1. 生成CA证书 ca.crt
openssl req -x509 -new -nodes -key ca.key -subj "/CN=nodeb" -days 7120 -out ca.crt
# 根据ca.key密钥生成 ca.crt证书。
 
 # 参数说明:
-new 指生成证书请求
-x509 表示直接输出证书
-key 指定私钥文件
-days 指定证书过期时间为3650-out 导出结束后证书文件
-subj 输入证书拥有者信息
  1. 生成服务器证书私钥 nodeb.key
openssl genrsa -out nodeb.key 4096
  1. 生成证书签名请求(CSR)
openssl req -sha512 -new \
    -subj "/C=CN/ST=Shenzhen/L=Shenzhen/O=Harbor/OU=Harbor/CN=nodeb" \
    -key nodeb.key \
    -out nodeb.csr
  1. 生成一个x509 v3扩展文件

无论是使用FQDN还是IP地址连接到Harbor主机,都必须创建此文件。这样的话,Harbor主机才能够生成符合主题备用名称(SAN)和x509 v3的证书扩展要求。
下面的配置中,DNS的部分需要替换为自己Harbor服务器的域名。

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
 
[alt_names]
DNS.1=nodeb
EOF

  1. 使用该v3.ext文件为您的Harbor主机生成证书 yourdomain.com.crt
openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in nodeb.csr \
    -out nodeb.crt
  1. 将服务器证书nodeb.crt的编码格式转换为nodeb.cert
openssl x509 -inform PEM -in nodeb.crt -out nodeb.cert

在这里插入图片描述

  1. 将服务器证书,密钥和CA文件复制到Harbor主机上的Docker certificate文件夹中
//创建/etc/docker/certs.d/{域名}文件夹,本文域名为nodeb
mkdir -p /etc/docker/certs.d/nodeb

cp /root/ca/nodeb.cert /etc/docker/certs.d/nodeb/
cp /root/ca/nodeb.key /etc/docker/certs.d/nodeb/
cp /root/ca/ca.crt /etc/docker/certs.d/nodeb/

如果将默认nginx端口443 映射到其他端口 port,请创建文件夹/etc/docker/certs.d/yourdomain.com:port或/etc/docker/certs.d/harbor_IP:port。
也就是证书也要加上对应修改的端口号,不然无法生效。这个坑还是挺隐藏的。

  1. 配置允许访问http仓库
vi /etc/docker/daemon.json
------------------------------------------------------------------
// 添加"insecure-registries":["http://39.96.46.193"]配置,配置之后如下:
{
"registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"],"insecure-registries":["nodeb"]
}
------------------------------------------------------------------

配置完成之后重启docker服务:

systemctl daemon-reload
systemctl restart docker.service

二 、安装配置harbor

2.1 安装配置

上传harbor离线资源包到/opt/resources 目录下

  • 下载资源包
 yum -y install openssl
  • 解压到/opt 目录下
[root@iZ2ze6qralnaqhb67athsaZ resources]# tar -zxvf harbor-offline-installer-v1.10.1.tgz  /opt/
  • 修改配置
[root@iZ2ze6qralnaqhb67athsaZ resources]# vi /opt/harbor/harbor.yml
修改如下参数
--------------------------------------------------------------------------------------
hostname: nodeb				//服务器ip/域名
harbor_admin_password: Harbor12345			// 密码
https:
  # https port for harbor, default is 443
  port: 443
  # The path of cert and key files for nginx
  certificate: /root/ca/nodeb.crt
  private_key: /root/ca/nodeb.key
---------------------------------------------------------------------------------------

如下图:
在这里插入图片描述

  • 执行脚本:
sh prepare

执行完之后/opt/harbor/目录下回生成 docker-compose.yml文件

  • 执行安装命令:
 sh install.sh
  • 查看启动情况:
docker-compose ps

在这里插入图片描述

2.2 验证
  • 访问验证
    首先需要在自己本地C:\Windows\System32\drivers\etc\hosts文件配置ip映射:
39.96.46.193	nodeb

浏览器输入 https://nodeb/
在这里插入图片描述
至此安装成功

  • docker login验证

想要在别的主机上docker login
登录nodeb主机上的harbor,需要将nodeb主机上生成的几个证书文件上传到客户端主机对应位置。

nodeb上执行:

scp -r /etc/docker/certs.d/nodeb/ca.crt root@nodea:/etc/docker/certs.d/nodeb/
scp -r /etc/docker/certs.d/nodeb/nodeb.crt root@nodea:/etc/docker/certs.d/nodeb/
scp -r /etc/docker/certs.d/nodeb/nodeb.key root@nodea:/etc/docker/certs.d/nodeb/

修改客户端配置:

vi /etc/hosts
-------------------------------------------------------------------------
39.96.46.193  nodeb		#新增
--------------------------------------------------------------------------

vi /etc/docker/daemon.json
-------------------------------------------------------------------------
{
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ],
"insecure-registries": ["nodeb"] 	#新增
}
-------------------------------------------------------------------------

nodea上执行docker login命令
不用admin账号进行登录,否则会报无权限错误

[root@nodea resources]# cd /etc/docker/certs.d/nodeb/
[root@nodea nodeb]# ll
total 12
-rw-r--r-- 1 root root 1777 Nov  3 13:51 ca.crt
-rw-r--r-- 1 root root 1919 Nov  3 11:29 nodeb.cert
-rw-r--r-- 1 root root 3247 Nov  3 11:29 nodeb.key
[root@nodea nodeb]# docker login -u admin nodeb
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

三、harbor基本使用

命令解释
docker login -u admin nodeb登陆harbor镜像仓库
docker tag SOURCE_IMAGE[:TAG] nodeb/data_analysis/IMAGE[:TAG]给镜像打标签 例如:docker tag mysql:5.7 nodeb/xdclass/mysql:5.7
docker push nodeb/data_analysis/IMAGE[:TAG]推送镜像到harbor
docker pull nodeb/xdclass/mysql:5.7从harbor拉取镜像

参考文章:https://blog.51cto.com/linsj/2321283?source=dra

四、测试

  • 本机login
[root@iZ2ze13kpist8bmp2hsgn3Z ca]# docker login -u admin nodeb 
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
  • 打包镜像
这里我自己上传了一个jar包,通过dockerfile打包镜像
Dockerfile
------------------------------------------------------------------
# 基于哪个镜像
FROM java:8
# 将本地文件夹挂载到当前容器
VOLUME /tmp
# 拷贝文件到容器,handcuffs-reg-0.0.1-SNAPSHOT.jar这里是maven打包后的名字
ADD eureka-server.jar eureka-server.jar
RUN bash -c 'touch /eureka-server.jar'
# 配置容器启动后执行的命令
ENTRYPOINT  ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/eureka-server.jar"]
EXPOSE 1111
---------------------------------------------------------------------
在Dockerfile目录执行:docker build -t eureka:latest .
  • 镜像上传harbor
docker tag e06775abe360nodeb/test/eureka-server:latest
docker push nodeb/test/eureka-server

打开harbor仓库如下:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值