Docker系列七:(3)搭建企业级私有镜像仓库Harbor-推荐

本文详细介绍了如何搭建企业级私有Docker镜像仓库Harbor,包括硬件和软件要求、安装Docker与docker-compose、生成TLS证书以及Harbor的配置与初始化。Harbor在Docker Registry的基础上增加了安全管理、访问控制等功能,是企业容器化应用的理想选择。
摘要由CSDN通过智能技术生成

目录

一:使用背景:

二:Harbor简介

三:硬件要求

3.1)部署 Harbor 的最低和推荐硬件配置

3.2)目标主机上必须安装的软件版本

3.3)网络端口Harbor 要求在目标主机上打开以下端口

四:安装准备

4.1)安装Docker

4.2) 安装docker-compose

五:具体安装步骤

5.1)下载离线安装包

5.2)配置harbor

5.3)生成自签TLS证书

 5.3.1:生成 CA 证书私钥 ca.key

 5.3.2:使用CA证书私钥,生成CA证书 ca.crt

 5.3.3:生成服务器证书,证书通常包含一个.crt文件和一个.key文件

 5.3.4:生成服务器证书,证书通常包含一个.crt文件和一个.key文件

 5.4)harbor配置确认与初始化启动

5.4.1:修改与确认harbor配置

5.4.2:准备配置文件

5.4.3:开始安装harbor相关模块

六:harbor常用管理

七:测试与使用

八:其他客户端使用harbor,需要配置harbor服务器crt证书

九:Docker推送镜像到harbor

1: 在项目中标记镜像

2:推送镜像到当前项目

3:拉取harbor项目


一:使用背景:

Docker Hub 这样的公共仓库可能不方便,Docker自带的registry又不能满足需要。

二:Harbor简介

Harbor以Docker公司开源的registry为基础,提供了管理UI,基于角色的访问控制(Role Based AccessControl),AD/LDAP集成、以及审计日志(Auditlogging) 等企业用户需求的功能,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution。

Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。不仅解决了我们直接使用 Docker Registry 的功能缺失,更解决了我们在生产使用 Docker Registry 面临的高可用、镜像仓库直接复制、镜像仓库性能等运维痛点。

GIT仓库:GitHub - goharbor/harbor: An open source trusted cloud native registry project that stores, signs, and scans content.

三:硬件要求

3.1)部署 Harbor 的最低和推荐硬件配置

Resource

Minimum

Recommended

CPU

2 CPU

4 CPU

Mem

4 GB

8 GB

Disk

40 GB

160 GB

3.2)目标主机上必须安装的软件版本

Software

Version

Description

Docker engine

Version 17.06.0-ce+ or higher

For installation instructions, see Docker Engine documentation

Docker Compose

Version 1.18.0 or higher

For installation instructions, see Docker Compose documentation

Openssl

Latest is preferred

Used to generate certificate and keys for Harbor

3.3)网络端口Harbor 要求在目标主机上打开以下端口

Port

Protocol

Description

443

HTTPS

Harbor 门户和核心 API 接受此端口上的 HTTPS 请求。您可以在配置文件中更改此端口。

4443

HTTPS

连接到 Harbor 的 Docker Content Trust 服务。仅在启用 Notary 时才需要。您可以在配置文件中更改此端口。

80

HTTP

Harbor 门户和核心 API 接受此端口上的 HTTP 请求。您可以在配置文件中更改此端口。

四:安装准备

4.1)安装Docker

必须是Version 17.06.0-ce+或更高版本,小编使用的是Server Version: 20.10.7

4.2) 安装docker-compose

Version 1.18.0 or higher

Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:Releases · docker/compose · GitHub

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
如果github太慢使用daocloud
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
注:要安装其他版本的 Compose,请替换 1.24.1。

将可执行权限应用于二进制文件:
$ sudo chmod +x /usr/local/bin/docker-compose

创建软链:
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

测试是否安装成功:
$ docker-compose --version
    docker-compose version 1.24.1, build 4667896b

五:具体安装步骤

5.1)下载离线安装包

GIT仓库地址:https://github.com/goharbor/harbor/releases
或者使用小编已经准备好的下载包
harbor-offline-installer-v2.2.3.tgz
链接:https://pan.baidu.com/s/1qP2-YzBIeSs_j5JYJ9Z2JQ 
提取码:wtv3
-- 上传到服务器

# 解压到/usr/local/目录
tar -zxvf harbor-offline-installer-v2.2.3.tgz -C /usr/local/
cd /usr/local/harbor

[root@vm202 harbor]# ll
    总用量 502856
    -rw-r--r--. 1 root root      3361 7月   5 13:39 common.sh
    -rw-r--r--. 1 root root 514891405 7月   5 13:40 harbor.v2.2.3.tar.gz
    -rw-r--r--. 1 root root      7840 7月   5 13:39 harbor.yml.tmpl
    -rwxr-xr-x. 1 root root      2500 7月   5 13:39 install.sh
    -rw-r--r--. 1 root root     11347 7月   5 13:39 LICENSE
    -rwxr-xr-x. 1 root root      1881 7月   5 13:39 prepare

5.2)配置harbor

cd /usr/local/harbor
cp harbor.yml.tmpl harbor.yml
vim harbor.yml -- 以下为常用项配置
    # 1:指定要部署 Harbor 的目标主机的 IP 地址或完全限定域名
    hostname: lo.harbor.com
    hostname为必须修改参数
    
    2:配置CA证书路径
    https:
      port: 443
      certificate: /usr/local/harbor/cert/lo.harbor.com.crt
      private_key: /usr/local/harbor/cert/lo.harbor.com.key
    
    # 3:默认数据目录-harbor被删除仍然存在
    data_volume: /usr/local/harbor/data_volume
    
    #4: 日志配置
    log:
      local:
        #location: /var/log/harbor # 日志存储路径
        location: /usr/local/harbor/log

注意:如果使用 ip端口的方式,把https相关配置注释掉

5.3)生成自签TLS证书

官方英文文档:Harbor docs | Configure HTTPS Access to Harbor

5.3.1:生成 CA 证书私钥 ca.key

[root@vm03 tmp]# openssl genrsa -out ca.key 4096
    Generating RSA private key, 4096 bit long modulus
    ...............................++
    ........................................................++
    e is 65537 (0x10001)

查看刚刚生成的ca.key
[root@vm03 tmp]# ll
    -rw-r--r-- 1 root root      3243 7月  22 13:38 ca.key

 5.3.2:使用CA证书私钥,生成CA证书 ca.crt

[root@vm03 tmp]#  openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=Harbor/OU=Harbor/CN=lo.harbor.com" \
-key ca.key \
-out ca.crt

参数说明:
    yourdomain.com修改为自己的域名本例为lo.harbor.com
    -new 指生成证书请求
    -x509 表示直接输出证书
    -key 指定私钥文件
    -days 指定证书过期时间为3650天
    -out 导出结束后证书文件
    -subj 输入证书拥有者信息

查看ca.crt证书
[root@vm03 tmp]# ll
    总用量 500924
    -rw-r--r-- 1 root root      2025 7月  22 13:44 ca.crt
    -rw-r--r-- 1 root root      3243 7月  22 13:38 ca.key

 5.3.3:生成服务器证书,证书通常包含一个.crt文件和一个.key文件

例如,yourdomain.com.crt和yourdomain.com.key

1:生成私钥 lo.harbor.com.key
[root@vm03 tmp]# openssl genrsa -out lo.harbor.com.key 4096
    
    Generating RSA private key, 4096 bit long modulus
    ..................++
    ....................................................++
    e is 65537 (0x10001)
[root@vm03 tmp]# ll
    -rw-r--r-- 1 root root      3243 7月  22 13:54 lo.harbor.com.key

2:生成证书签名请求 (lo.harbor.com.csr)
[root@vm03 tmp]# openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=Harbor/OU=Harbor/CN=lo.harbor.com" \
-key lo.harbor.com.key \
-out lo.harbor.com.csr
    --其中lo.harbor.com换成自己的域名
[root@vm03 tmp]# ll
    -rw-r--r-- 1 root root      1704 7月  22 13:57 lo.harbor.com.csr

3:生成 x509 v3 扩展文件
[root@vm03 tmp]# cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=lo.harbor.com
EOF

[root@vm03 tmp]# ll
    -rw-r--r-- 1 root root       232 7月  22 14:01 v3.ext

4:使用该v3.ext文件为您的Harbor主机生成证书 lo.harbor.com.crt
[root@vm03 tmp]# openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in lo.harbor.com.csr \
-out lo.harbor.com.crt    

---> 输出
Signature ok
subject=/C=CN/ST=Beijing/L=Beijing/O=Harbor/OU=Harbor/CN=lo.harbor.com
Getting CA Private Key

[root@vm03 tmp]# ll
    -rw-r--r-- 1 root root      2057 7月  22 14:05 lo.harbor.com.crt

 5.3.4:生成服务器证书,证书通常包含一个.crt文件和一个.key文件

向 Harbor 和 Docker 提供证书
1:将服务器证书和密钥复制到 Harbor 主机上的 certficates 文件夹中
mkdir -p /usr/local/harbor/cert
cp lo.harbor.com.crt /usr/local/harbor/cert/
cp lo.harbor.com.key /usr/local/harbor/cert/

2:转换yourdomain.com.crt为yourdomain.com.cert,供 Docker 使用。
Docker 守护进程将.crt文件解释为 CA 证书,将.cert文件解释为客户端证书。
    
[root@vm03 tmp]# openssl x509 -inform PEM -in lo.harbor.com.crt -out lo.harbor.com.cert


3:将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中。
# 创建证书文件夹
mkdir -p /etc/docker/certs.d/lo.harbor.com/
# 拷贝服务器证书
cp lo.harbor.com.cert /etc/docker/certs.d/lo.harbor.com/
# 拷贝服务器私钥
cp lo.harbor.com.key /etc/docker/certs.d/lo.harbor.com/
# 拷贝自签的颁发证书机构ca证书
cp ca.crt /etc/docker/certs.d/lo.harbor.com/

----
注意:如果您将默认nginx端口 443映射到其他端口,
请创建文件夹/etc/docker/certs.d/yourdomain.com:port或
/etc/docker/certs.d/harbor_IP:port。
示例:
mkdir -p /etc/docker/certs.d/lo.harbor.com:8443
cp lo.harbor.com.cert /etc/docker/certs.d/lo.harbor.com:8443
cp lo.harbor.com.key /etc/docker/certs.d/lo.harbor.com:8443
cp ca.crt /etc/docker/certs.d/lo.harbor.com:8443

 

 5.4)harbor配置确认与初始化启动

5.4.1:修改与确认harbor配置

vim harbor.yml  具体配置如下
    hostname: lo.harbor.com
    2:CA证书路径
    https:
      port: 443
      certificate: /usr/local/harbor/cert/lo.harbor.com.crt
      private_key: /usr/local/harbor/cert/lo.harbor.com.key

5.4.2:准备配置文件

cd /usr/local/harbor
[root@vm03 tmp]# ./prepare

5.4.3:开始安装harbor相关模块

cd /usr/local/harbor
[root@vm03 tmp]# ./install.sh

输出-----
[Step 0]: checking if docker is installed ...
Note: docker version: 20.10.7
[Step 1]: checking docker-compose is installed ...
Note: docker-compose version: 1.24.1
[Step 2]: loading Harbor images ...
[Step 3]: preparing environment ...
[Step 4]: preparing harbor configs ...
[Step 5]: starting Harbor ...
✔ ----Harbor has been installed and started successfully.----

重启 Docker 引擎
systemctl restart docker

六:harbor常用管理

cd /usr/local/harbor
# 停止Harbor
docker-compose stop
# 启动Harbor
docker-compose start

七:测试与使用

访问https://lo.harbor.com
访问https://lo.harbor.com:8443
    用户名:admin
    密码:Harbor12345

 八:其他客户端使用harbor,需要配置harbor服务器crt证书

其他客户端连接harbor

[root@vm03 ~]# docker login lo.harbor.com:8443
[root@vm03 ~]# docker login lo.harbor.com
Username: remote
Password: 
Error response from daemon: Get https://lo.harbor.com/v2/: x509: certificate signed by unknown authority  
报错说明证书签名认证异常,
原因:因为域名我们配置的是自签证书,他不能通过证书做交互解密


登录:
docker login lo.harbor.com
或:docker login lo.harbor.com -u xx -p xx

客户端需要做以下配置

在docker客户端配置harbor证书
# 创建证书文件夹
mkdir -p /etc/docker/certs.d/lo.harbor.com/
# 从lo.harbor.com服务器拷贝证书到docker客户端
(204为harbor服务器,203为docker使用客户端,从204中把ca证书复制到203中)
在203服务器执行以下命令
scp root@192.168.8.204:/usr/local/harbor/cert/lo.harbor.com.crt /etc/docker/certs.d/lo.harbor.com

九:Docker推送镜像到harbor

1: 在项目中标记镜像

docker tag SOURCE_IMAGE[:TAG] lo.harbor.com/py_image/REPOSITORY[:TAG]
示例:
docker tag iwester/myip:1.2 lo.harbor.com/py_image/myip:v1

2:推送镜像到当前项目

docker push lo.harbor.com/py_image/REPOSITORY[:TAG]
示例:
docker push lo.harbor.com/py_image/myip:v1

3:拉取harbor项目

docker pull lo.harbor.com/py_image/myip:v1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iwester

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值