CentOS7环境安装Harbor(docker私服)
> 官方教程:[Harbor Installation and Configuration](https://goharbor.io/docs/2.7.0/install-config/) # 安装条件 ## 硬件 资源 | 最小 | 推荐 --- | --- | --- CPU | 2 CPU | 4 CPU 内存 | 4 GB | 8 GB 磁盘 | 40 GB | 160 GB ## 软件 软件 | 版本 | 描述 --- | --- | --- Docker engine | Version 17.06.0-ce+ or higher | 教程:[CentOS7安装Docker-CE](https://maxqiu.com/article/detail/24) Docker Compose | docker-compose (v1.18.0+)<br>或<br>docker compose v2 (docker-compose-plugin) | 按照上文教程会一起安装 `docker compose v2` Openssl | 最新版即可 | 用于为 `Harbor` 生成证书和密钥 # 下载 地址:[https://github.com/goharbor/harbor/releases](https://github.com/goharbor/harbor/releases) > 下文以 `v2.7.0` 为例,且当前用户为 `root` 1. 下载安装包 - `offline` :离线版,即压缩包内包含镜像文件,启动时自动导入<br> `harbor-offline-installer-v2.7.0.tgz` - `online` :在线版,启动时在线下载镜像<br>`harbor-online-installer-v2.7.0.tgz` 2. 下载完成后上传至服务器 3. 上传完成后执行解压<br>`tar xzvf harbor-offline-installer-v2.7.0.tgz` 4. 解压后将解压的文件夹移动到想要安装的路径下(以安装在 `/usr/local/` 为例)<br>`mv harbor /usr/local/` 5. 删除压缩包<br>`rm -rf harbor-offline-installer-v2.7.0.tgz` 6. 进入该软件目录,方便下文操作<br>`cd /usr/local/harbor/` # 配置 ## 配置 HTTPS 下文中,以 Harbor 的宿主机 IP 是 `192.168.220.101` 为例(也可以自定义一个域名,例如 `harbor.maxqiu.com` ,此时需要修改 `hosts` 文件做 DNS 映射,其他需要访问 Harbor 的主机也需要修改 `hosts` ,下问中对应的 IP 也需要改为域名)。 1. 创建文件夹用于存放证书文件,并进入该文件夹 ```bash mkdir cert cd cert/ ``` 2. 生成 CA 证书私钥 ```bash openssl genrsa -out ca.key 4096 ``` 3. 生成 CA 证书 ```bash openssl req -x509 -new -nodes -sha512 -days 3650 \ -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.220.101" \ -key ca.key \ -out ca.crt ``` 4. 生成服务器私钥 ```bash openssl genrsa -out 192.168.220.101.key 4096 ``` 5. 生成服务器证书签名请求(CSR) ```bash openssl req -sha512 -new \ -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.220.101" \ -key 192.168.220.101.key \ -out 192.168.220.101.csr ``` 6. 生成 x509 v3 扩展文件 ```bash cat > v3.ext <<-EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1=192.168.220.101 EOF ``` 7. 使用该 v3.ext 文件为 Harbor 主机生成证书。 ```bash openssl x509 -req -sha512 -days 3650 \ -extfile v3.ext \ -CA ca.crt -CAkey ca.key -CAcreateserial \ -in 192.168.220.101.csr \ -out 192.168.220.101.crt ``` 8. 向 Docker 提供证书(**如果使用的是域名,才需要执行**,以 `harbor.maxqiu.com` 为例) ```bash # 转换 .crt 为 .cert , Docker 守护进程将 .crt 文件解释为 CA 证书,将 .cert 文件解释为客户端证书 openssl x509 -inform PEM -in harbor.maxqiu.com.crt -out harbor.maxqiu.com.cert ``` 9. 以上步骤完成后,执行 `cd ..` 回到 Harbor 安装路径下! ## 配置 Harbor YML 文件 1. 拷贝配置文件(在 Harbor 安装路径下)<br>`cp harbor.yml.tmpl harbor.yml` 2. 编辑配置文件<br>`vim harbor.yml` 3. 修改如下内容并保存 ```yaml # IP/域名 hostname: 192.168.220.101 # HTTP 端口(默认:80) http: port: 80 # HTTPS 端口和证书(修改证书路径) https: port: 443 certificate: /usr/local/harbor/cert/192.168.220.101.crt private_key: /usr/local/harbor/cert/192.168.220.101.key # Harbor 数据库密码(推荐修改) database: password: root123 # 数据存储目录,默认在根目录下的 `data` 文件夹,可自行修改(绝对路径) data_volume: /usr/local/harbor/data # 日志文件路径,默认在 `/var/log/harbor` ,可自行修改(绝对路径) log: local: location: /usr/local/harbor/log ``` # 启动 执行以下脚本完成首次启动 ```bash ./install.sh ``` 如果使用在线版在下载镜像是卡住,可以关闭脚本再重新执行 # 使用 ## 创建项目 1. 浏览器打开 `https://192.168.220.101` 访问控制台,如非 443 则添加端口,默认的管理员用户名和密码是 `admin` 和 `Harbor12345` 2. 点击左侧 `项目` ,点击 `新建项目` ,项目名称任意(使用下文以 `test` 为例),点击确保保存 3. 在 `用户管理` 新建用户,并在 `项目定额` 中授权该用户访问指定项目 ## 镜像上传 以下操作在**需要访问 Harbor 的 Docker 宿主机上**执行 ### 配置 > 如果在上文中使用 IP ,则需要执行以下操作 1. 编辑 docker 配置文件 ```bash vim /etc/docker/daemon.json ``` 2. 添加如下配置(注意,该文件内容时 json 格式,如果已经有内容了,添加配置时需要注意文件格式,PS:即英文逗号分隔符) ```bash { "insecure-registries" : ["https://192.168.220.101"] } ``` 3. 完成配置后重启服务 ```bash systemctl restart docker ``` > 如果上文中使用域名,则需要执行以下操作 1. 创建证书文件夹,如果 Harbor 不使用 443 端口,则创建文件夹时添加端口号。 ```bash # 使用 443 端口 mkdir -p /etc/docker/certs.d/harbor.maxqiu.com.crt # 不使用 443 端口(例如使用 8443) mkdir -p /etc/docker/certs.d/harbor.maxqiu.com.crt:8443 ``` 2. 将上文创建的服务器证书 `harbor.maxqiu.com.cert` 、密钥 `harbor.maxqiu.com.key` 和 CA 文件 `ca.crt` 复制到当前机器上 3. 配置操作系统信任证书 ```bash # 拷贝证书(如果文件夹带端口,则需要注意路径) cp /etc/docker/certs.d/harbor.maxqiu.com/harbor.maxqiu.com.cert /etc/pki/ca-trust/source/anchors/harbor.maxqiu.com.crt # 更新 update-ca-trust ``` 4. 证书配置完成后,重启 `Docker` 服务 ```bash systemctl restart docker ``` ### 登录 执行以下命令登录 Harbor 私服 ```bash docker login 192.168.220.101 ``` 根据提示输入用户名密码,看到 `Login Succeeded` 即代表成功登录 ### 上传 准备上传镜像前,镜像的完整标签格式应该是:`[主机名称或IP(:端口)]/[项目名]/[镜像名]:[版本号]` 一般在 `docker build` 时指定,或者使用 `docker image tag` 更换名称 下面使用更换镜像标签的方式做示例: ```bash # 拉取一个镜像用来做实验 docker pull nginx:1.23.3 # 更换镜像标签 docker image tag nginx:1.23.3 192.168.220.101/test/nginx:1.23.3 # 推送到私服 docker push 192.168.220.101/test/nginx:1.23.3 # 删除本地的镜像 docker rmi nginx:1.23.3 192.168.220.101/test/nginx:1.23.3 # 重新从私服拉取 docker pull 192.168.220.101/test/nginx:1.23.3 ```