前言
Harbor官方文档: https://docs.docker.com/compose/install/
如图所示,harbor 需要依赖docker,docker-compose,openssl, 本文将介绍这些内容的安装和配置
一、docker-compose 安装
Harbor依赖于 docker-compose
,所以要先安装 docker-compose
docker-compose官方文档: https://docs.docker.com/compose/install/
(1)在线安装(不推荐,我试过直接使用官方的安装方法,下载非常慢,不太建议使用在线安装)
# 在线下载最新的稳定版docker-compose,建议打开官方文档直接拷贝官方的链接,不然就自己去GitHub看一下最新的docker-compose的版本,替换一下
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# Apply executable permissions to the binary:
$ sudo chmod +x /usr/local/bin/docker-compose
# 创建软链接
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 测试是否安装成功,输出版本信息则代表安装成功
$ docker-compose --version
(2)离线安装(推荐)
docker-compose Github地址: https://github.com/docker/compose/releases
选择下载 docker-compose-Linux-x86_64
版本
把下载好的安装包上传到服务器,进入上传的安装包目录,然后执行操作
# 先进入上传的docker-compose安装包目录,然后执行如下命令将其移动到 `/usr/local/bin`,并改名为“docker-compose”。
$ sudo mv docker-compose-Linux-x86_64 /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
二、Harbor 安装
Harbor官方文档: https://docs.docker.com/compose/install/
官方的文档提供两种安装形式:在线下载安装和离线安装,在线安装因为国内网络不是特别好,这里推荐使用离线安装的形式
下载离线安装包
Harbor Github 地址:https://github.com/goharbor/harbor/releases
选择对应的安装包下载 harbor-offline-installer-{version}.tgz
, {version}
为版本号
安装包上传到服务器,我这里安装的路径是: /home/lenjor/harbor
# 进入安装的路径,解压安装包
$ tar -xvf harbor-offline-installer-v2.2.0-rc1.tgz
# 复制一份配置文件模板 harbor.yml.tmpl , 并命名为 harbor.yml
$ sudo cp harbor.yml.tmpl harbor.yml
解压以后将看到以下的文件,我这里的已经完成了配置文件的复制操作
配置HTTPS证书
官方操作说明文档地址:https://goharbor.io/docs/2.0.0/install-config/configure-https/
1. 生成证书颁发机构证书
# 生成CA证书私钥
$ openssl genrsa -out ca.key 4096
# 生成CA证书,记得以下的所有命令,都要替换成自己的域名,或者ip地址
$ 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
2. 生成服务器证书
# 1)生成私钥
$ openssl genrsa -out yourdomain.com.key 4096
# 2)生成证书签名请求(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扩展文件,这里有个坑,如果是域名配置的,就直接把授信域名配置到下面的列表
## 这个是域名的方式的命令,把授信的域名加到列表里
$ 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的方式,直接把后面的域名列表删掉,添加上自己的IP地址(注意 IP: 是有用的,不能删)
$ cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = IP:192.168.56.105
# 4)为你的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
3. 把证书配置到Harbor和Docker
# 将服务器证书和密钥复制到Harbor主机上的certficates文件夹中, 需要先创建文件夹
$ mkdir /data/cert/
$ cp yourdomain.com.crt /data/cert/
$ cp yourdomain.com.key /data/cert/
# 转换yourdomain.com.crt为yourdomain.com.cert,供Docker使用
$ openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert
# 将服务器证书,密钥和CA文件复制到Harbor主机上的Docker证书文件夹中。 敲黑板重点!!必须首先创建适当的文件夹。
$ mkdir -p /etc/docker/certs.d/yourdomain.com/
$ cp 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/
配置 harbor.yml
官方文档地址: https://goharbor.io/docs/2.0.0/install-config/configure-yml-file/
# 配置 hostname
hostname: harbor.lenjor.com
# 打开https注释,配置证书地址,如果是按照官方文档操作的,证书就在 /data/cert/ 目录下
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /data/cert/harbor.lenjor.com.crt
private_key: /data/cert/harbor.lenjor.com.key
# 修改Harbor admin账号的登陆密码
harbor_admin_password: Lenjor123.
# 修改Mysql数据库密码
database:
# The password for the root user of Harbor DB. Change this before any production use.
password: Lenjor123.
重启Docker Engine
systemctl restart docker
运行安装程序脚本
# 执行 .prepare 脚本
$ ./prepare
# 执行安装脚本
$ ./install.sh
浏览器打开配置的 hostname 就能打开harbor的登陆页了
网页提示的不安全,是因为没有安装证书,把之前生成的 ca.crt
这证书安装到浏览器,添加信任即可,但是Chrome检测到签发的时间过长也会提示不安全,暂时忽略吧
输入登陆密码登陆,然后创建一个新的项目,我这里新建的是 k8s 项目
查看一下仓库命令,拷贝一下标记tag的命令,在另外一台机器打一个镜像tag
# 对hello-world的镜像打一个tag
$ docker tag hello-world:latest harbor.lenjor.com/k8s/k8s-hello-world:v1.0
另外一台虚拟机使用docker login命令登陆 我们的仓库
# 登陆docker,这里换成自己harbor配置的hostname (ip,或者域名),输入账号和密码登陆
$ docker login harbor.lenjor.com
这里会因为证书没有不是受信任的证书,提示报错,解决方法是
# 编辑docker配置文件
$ vi /etc/docker/daemon.json
# 在json文件中加入自己的域名或者ip,添加仓库授信
{
"insecure-registries":["私库地址/域名"]
}
# 保存退出以后重启docker再登陆就不会报错了
$ systemctl daemon-reload
$ systemctl restart docker
再次登陆,推送镜像到仓库
# 登陆docker,这里换成自己harbor配置的hostname (ip,或者域名),输入账号和密码登陆
$ docker login harbor.lenjor.com
# 从harbor仓库的命令页拷贝一下推送命令,然后修改成自己要推送的镜像,如我刚刚打了一个 k8s-hello-world:v1.0 镜像
$ docker push harbor.lenjor.com/k8s/k8s-hello-world:v1.0
Harbor仓库查看推送结果
可以看到,我们的仓库已经是有我们刚刚推送上去的镜像了
从Harbor的仓库中拉取镜像
# 先把本地的hello-world镜像删除
$ docker rmi harbor.lenjor.com/k8s/k8s-hello-world:v1.0
# 查看删除是否成功
$ docker images
# 从私有仓库拉取镜像
$ docker pull harbor.lenjor.com/k8s/k8s-hello-world:v1.0
三、常用操作命令
# 停止harbor,在harbor的安装目录执行
$ sudo docker-compose stop
# 启动harbor,在harbor的安装目录执行
$ sudo docker-compose start
# 重新配置harbor,在harbor的安装目录执行
$ sudo docker-compose down -v
$ vim harbor.yml
$ sudo prepare
$ sudo docker-compose up -d
# 删除Harbor的容器,同时将镜像数据和Harbor的数据库文件保留在文件系统中:
$ sudo docker-compose down -v
# 删除Harbor的数据库和镜像数据以进行重新安装:
$ rm -r /data/database
$ rm -r /data/registry