CentOS 8 安装Harbor

安装Docker

使用官方安装脚本自动安装docker

安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

安装docker-compose

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

运行以下命令以下载 Docker Compose 的当前稳定版本:

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

将可执行权限应用于二进制文件:

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

创建软链:

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

测试是否安装成功:

docker-compose --version

启动docker

systemctl start docker #启动docker
systemctl enable docker #设置docker开机自动启动

Harbor

下载 harbor

前往git页面下载最新harbor安装包,然后放到linux服务器上

git地址:https://github.com/goharbor/harbor/releases

解压

tar -zxvf harbor-offline-installer-v2.3.2.tgz -C  /usr/local/

修改配置文件

hostname设置为要使用的域名

如果没有使用https协议的话,需要将配置文件中有关https的部分注释掉

cd /usr/local/harbor/ #进入harbor安装目录
vim harbor.yml.tmpl  #打开harbor配置文件模板
cp harbor.yml.tmpl  harbor.yml #复制修改后的配置文件模板

安装

./install.sh

安装完成后,即可通过浏览器访问Harbor

配置HTTPS访问(生产环境必须使用Https)

  1. 生成一个CA证书的私钥

    openssl genrsa -out ca.key 4096
    
  2. 生成CA证书

    调整-subj选项中的值以反映你的组织。如果你使用FQDN(全限定域名:同时带有主机名和域名的名称)来连接你的Harbor主机,你必须把它指定为通用名称(CN)属性

    openssl req -x509 -new -nodes -sha512 -days 3650 \
     -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
     -key ca.key \
     -out ca.crt
    

生成一个服务器证书

证书通常包含一个.crt文件和一个.key文件,例如,yourdomain.com.crtyourdomain.com.key

  1. 生成一个私钥.

    openssl genrsa -out yourdomain.com.key 4096
    
  2. 生成一个证书签署请求(CSR)

    调整 -subj 选项中的值以反映您的组织。如果你使用FQDN(全限定域名:同时带有主机名和域名的名称)来连接你的Harbor主机,你必须把它指定为公共名称(CN)属性,并在密钥和CSR文件名中使用它

    openssl req -sha512 -new \
        -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
        -key yourdomain.com.key \
        -out yourdomain.com.csr
    
  3. 生成一个x509 v3扩展文件

    无论你是使用 FQDN 还是使用 IP 地址来连接你的 Harbor 主机,你都必须创建此文件,以便为你的 Harbor 主机生成符合主题替代名称(SAN)和 x509 v3 扩展要求的证书。替换 DNS 条目为你自己的域名

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

    如果使用的是ip进行访问,那么进行如下配置

    cat > v3.ext <<-EOF
    authorityKeyIdentifier=keyid,issuer
    basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    extendedKeyUsage = serverAuth
    subjectAltName = IP:yourdomain.com
    EOF
    
  4. 使用 v3.ext 文件为您的 Harbor 主机生成一个证书。

    将 CRS 和 CRT 文件名称中的 yourdomain.com 替换为 Harbor 主机名称。

    openssl x509 -req -sha512 -days 3650 \    -extfile v3.ext \    -CA ca.crt -CAkey ca.key -CAcreateserial \    -in yourdomain.com.csr \    -out yourdomain.com.crt
    

向Harbor和Docker提供证书

在生成ca.crtyourdomain.com.crt和yourdomain.com.key文件后,你必须将它们提供给Harbor和Docker,并重新配置Harbor以使用它们

  1. 将服务器证书和密钥复制到你的Harbor主机上的certficates文件夹(必须先创建相应的文件夹)

    mkdir -p /data/certcp yourdomain.com.crt /data/cert/cp yourdomain.com.key /data/cert/
    
  2. yourdomain.com.crt转换成yourdomain.com.cert,供Docker使用。

    Docker守护进程将.crt文件解释为CA证书,将.cert文件解释为客户端证书

    openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert
    
  3. 将服务器证书、密钥和CA文件复制到Harbor主机上的Docker证书文件夹(必须先创建相应的文件夹)

    mkdir -p /etc/docker/certs.d/yourdomain.comcp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/cp ca.crt /etc/docker/certs.d/yourdomain.com/
    

    如果你将nginx的默认端口443映射到一个不同的端口,你需要运行下面的命令创建一个新的文件夹

    /etc/docker/certs.d/yourdomain.com:port, or /etc/docker/certs.d/harbor_IP:port.

  4. 重新启动Docker

    systemctl restart docker
    

(可选)如果你使用来自证书颁发者的中间证书,请将中间证书与你自己的证书合并以创建一个证书包

cat intermediate-certificate.pem >> yourdomain.com.crt

(可选)当Docker守护进程在某些操作系统上运行时,你可能需要在操作系统层面上信任证书

  • Ubuntu:

    cp yourdomain.com.crt /usr/local/share/ca-certificates/yourdomain.com.crt update-ca-certificates
    
  • Red Hat (CentOS etc):

    cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/yourdomain.com.crtupdate-ca-trust
    

可以使用下面的命令,查看证书的目录结构

ls /etc/docker/certs.d/yourdomain.com/

部署、配置Harbor

修改Harbor配置文件中的https部分:

vi /usr/local/harbor/harbor.yml

配置文件内容

#...
https:  port: 443  certificate: /data/cert/yourdomain.com.crt   private_key: /data/cert/yourdomain.com.key
#...
  1. 运行prepare脚本以启用HTTPS

    Harbor使用一个nginx实例作为所有服务的反向代理。你使用 prepare 脚本来配置nginx使用HTTPS。 prepare 在Harbor安装包中,与 install.sh 脚本处于同一级别。

    ./prepare
    
  2. 如果 Harbor 正在运行,请停止并删除现有实例。

    镜像数据仍在文件系统中,所以不会丢失数据

    docker-compose down -v
    
  3. 重启Harbor

    docker-compose up -d
    

验证HTTPS连接

  • 打开一个浏览器并输入https://yourdomain.com。它应该显示Harbor界面。

    一些浏览器可能会显示一个警告,说明证书颁发机构(CA)是未知的。这发生在使用不是来自可信的第三方CA的自签名CA时。你可以将该CA导入浏览器以消除该警告。

  • 在运行Docker守护进程的机器上,检查/etc/docker/daemon.json文件,确保-insecure-registry选项没有被设置为https://yourdomain.com。

  • 从Docker客户端登录Harbor

    docker login -u admin -p Harbor12345 yourdomain.com
    

    如果你将nginx 443端口映射到一个不同的端口,请在登录命令中添加该端口

    docker login yourdomain.com:port
    

如果docker login返回错误:x509: certificate signed by unknown authority,尝试一下方法:

  • 方法一:配置Insecure Registry,编辑/etc/docker/daemon.json,增加insecure-registries的配置,windows的话直接在设置里面进行配置
touch /etc/docker/daemon.json
vi /etc/docker//daemon.json 

配置文件内容:

{  "registry-mirrors": ["https://registry.docker-cn.com"],  "insecure-registries": ["yourdomain.com"]}

配置结束后重启docker

sudo systemctl daemon-reloadsudo systemctl restart docker
  • 方法二:将harbor证书复制到本地服务器目录,然后重启本地服务器的docker

Linux:

mkdir -p /etc/docker/certs.d/<your_registry_host_name>:<your_registry_host_port>
scp <your_registry_host_name>:/opt/registry/certs/domain.crt /etc/docker/certs.d/<your_registry_host_name>:<your_registry_host_port>/ca.crt

Windows:
直接复制到目录C:\ProgramData\docker\certs.d\ca.crt下 ,然后安装证书,重启docker

上传及下载镜像到Harbor

如果是域名部署的话,这里有个大坑:部署的域名不能包含下划线_,否则push镜像的时候会出错

#1.标记镜像docker tag {镜像名}:{tag} {Harbor地址}:{端口}/{Harbor项目名}/{自定义镜像名}:{自定义tag}#eg:docker tag webapi_test yourdomain.com/webapi_test/demo:v0.1#2.push 到Harbordocker push {Harbor地址}:{端口}/{自定义镜像名}:{自定义tag}#eg:docker push yourdomain.com/webapi_test/demo:v0.13.pull 到本地docker pull yourdomain.com/webapi_test/demo:v0.1
上一篇:安装harbor


下一篇:docker 仓库搭建