harbor日志:/var/log/harbor
前置安装配置
需先安装docker和docker-compose:
0.配置清华大学apt源并安装docker
#信任 Docker 的 GPG 公钥:
sudo apt-get install ca-certificates curl gnupg
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
#添加软件仓库 清华apt源:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#最后安装
sudo apt-get update
sudo apt-get install docker-ce
若install时报错: Hash Sum mismatch
参照docker官方教程,重新设置apt源即可。https://docs.docker.com/engine/install/ubuntu
systemctl start docker
systemctl enable docker
配置阿里云镜像加速(不再赘述,按阿里云上的步骤操作即可)
配置docker数据存储目录 vim /etc/docker/daemon.json
"data-root": "/data/docker"
0.安装docker-compose
curl -SL https://github.com/docker/compose/releases/download/v2.7.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
- 下载
cd /use/local
wget https://github.com/goharbor/harbor/releases/download/v2.8.2/harbor-offline-installer-v2.8.2.tgz
tar xzvf harbor-offline-installer-v2.8.2.tgz
方式一:http方式部署
2.调整yml配置文件
mv harbor.yml.bak harbor.yml
修改hostname为10.1.1.115
http.port 9999
harbor_admin_password: 123456
因为是内网,无需https,注释掉https配置即可
3.执行安装
sudo ./install.sh
访问web界面:http://10.1.1.115:9999/
admin
123456
方式二:https方式部署(推荐)
#注意,全部使用hosts方式用ip来映射域名
1、修改host(10.1.1.115为harbor本机的ip xinchen.harbor为想要配置的域名)
echo "10.1.1.115 xinchen.harbor" >> /etc/hosts
2、切换到harbor的路径,方便后续操作。
cd /usr/local/harbor
3、生成CA私钥
openssl genrsa -out ca.key 4096
4、继续生成生成CA证书(域名改成自己上面改的)
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=xinchen.harbor" \
-key ca.key \
-out ca.crt
生成服务器证书:通常包含一个.crt文件和一个.key文件,例如xinchen.harbor.crt和xinchen.harbor.key。
5、生成一个服务器私钥(域名改成自己上面改的)
openssl genrsa -out xinchen.harbor.key 4096
6、继续生成证书签名请求(CSR)(域名改成自己上面改的)
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=xinchen.harbor" \
-key xinchen.harbor.key \
-out xinchen.harbor.csr
7、生成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=xinchen.harbor
DNS.2=xinchen.harbor
DNS.3=hostname
EOF
# [alt_names]可以填写您自定义的域名
ps: 如果使用ip,需要使用如下方式进行创建:
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = IP:192.168.93.9
EOF
8、使用该v3.ext文件为您的Harbor主机生成证书(域名改成自己上面改的)
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in xinchen.harbor.csr \
-out xinchen.harbor.crt
8、创建 /data/cert目录为了给harbor.yml使用
mkdir -p /data/cert
9、执行复制命令,将证书复制到/data/cert下(域名改成自己上面改的)
cp xinchen.harbor.crt /data/cert/
cp xinchen.harbor.key /data/cert/
10、转换xinchen.harbor.crt为xinchen.harbor.cert,供Docker使用(域名改成自己上面改的)
Docker守护程序将.crt文件解释为CA证书,并将.cert文件解释为客户端证书。
openssl x509 -inform PEM -in xinchen.harbor.crt -out xinchen.harbor.cert
11、在docker所在机器创建对应目录(域名改成自己上面改的)
mkdir -p /etc/docker/certs.d/xinchen.harbor/
12、复制证书到目录下 目录名为域名:端口(默认443端口 可以不加端口 docker login xinchen.harbor对应目录/etc/docker/certs.d/xinchen.harbor | docker login xinchen.harbor:1443 对应目录/etc/docker/certs.d/xinchen.harbor:1443 )
cp xinchen.harbor.cert /etc/docker/certs.d/xinchen.harbor/
cp xinchen.harbor.key /etc/docker/certs.d/xinchen.harbor/
cp ca.crt /etc/docker/certs.d/xinchen.harbor/
13、配置harbor.yml(按照如下修改,改成你自己的证书)
hostname: xinchen.harbor
harbor_admin_password: 123456
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /data/cert/xinchen.harbor.crt
private_key: /data/cert/xinchen.harbor.key
14、重启docker
systemctl restart docker
15、进入harbor目录下,重新预部署
./prepare
16、关闭harbor
docker-compose down -v
17、重启harbor
docker-compose up -d //默认基于docker-compose.yml文件 -f可指定文件
##注意:harbor端口最好不要改会出各种问题
https://10.1.1.115 访问web管理后台,通过http会自动转到https
docker登陆harbor
1.修改hosts 映射
echo "10.1.1.115 xinchen.harbor" >> /etc/hosts
2.从harbor服务器scp拷贝证书过来
scp -r certs.d/ 10.3.1.49:/etc/docker
或者直接 修改/etc/docker/daemon.json 配置Docker信任并连接到你指定的不安全Registry 也行
"insecure-registries": ["xinchen.harbor[:端口]"]
3.docker login登录即可:
docker login xinchen.harbor
注意事项:
docker login默认是采用https方式的,docker login 默认走https://xxxx:443
注释掉https后docker login才使用http的方式进行校验
hostname: xinchen.harbor 必须设成域名,因为默认生成的证书只支持域名,不支持ip,如果需要支持ip,需要修改v3.ext文件,否则报错: validate certificate for 10.1.1.115 because it doesn't contain any IP SANs。
若报错:Error response from daemon: Get "https://xinchen.harbor/v2/": x509: certificate signed by unknown authority
需要拷贝证书到本机/etc/docker目录下,如上所示。
创建项目并推送镜像到harbor中
创建一个项目: ecmaster 非公开( 当项目设为公开后,任何人都有此项目下镜像的读权限。命令行用户不需要“docker login”就可以拉取此项目下的镜像)
在项目-成员中添加上创建的用户
推送镜像:
上传镜像至harbor私有仓库:
docker tag b5bd271f2aa7 10.1.1.115:9999/ecmaster/node_v16:ecmaster
docker push 10.1.1.115:9999/ecmaster/node_v16:ecmaster
直接docker login 10.1.1.115会报错:Error response from daemon: Get "https://10.1.1.115:9999/v2/": http: server gave HTTP response to HTTPS client
解决一: 本地配置docker以允许http方式进行push镜像(有俩种方式)
1、修改/etc/docker/daemon.json 配置Docker信任并连接到你指定的不安全Registry
"insecure-registries": ["harbor服务器的ip或域名[:端口]"]
2、修改/usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry harbor服务器的ip:端口或域名
ps:使用域名的话 还需编辑hosts文件:vi /etc/hosts 添加ip 域名映射关系
systemctl daemon-reload
systemctl restart docker
解决方案二:配置harbor以https方式进行部署
修改harbor.yml增加https配置
## https related config
https:
## https port for harbor, default is 443
port: 443
## The path of cert and key files for nginx
certificate: /data/cert/xinchen.harbor.crt
private_key: /data/cert/xinchen.harbor.key
#.pem和.key 是根据域名购买ssl证书,也可以通过openssl自己生成。
执行/usr/local/harbor/install.sh,使harbor.yml的修改生效,并完成服务的启动,
bash /usr/local/harbor/install.sh
systemctl daemon-reload
systemctl restart docker
清除harbor重新install
删除Harbor的容器,但保留文件系统中的所有图像数据和Harbor的数据库文件:
sudo docker-compose down -v //默认基于docker-compose.yml文件 -f可指定文件
在执行干净的重新安装之前删除 Harbor 数据库和图像数据:
rm -r /data/database
rm -r /data/registry
相关报错及解决:
harbor admin用户登录密码一直错误:
docker exec -it (harbor-core容器) bash ,进入到容器内,然后,
printenv | grep PASSWORD查看一下设置进去的环境变量:
可以看到初始化的密码,若初始化密码正确还是进不去,清除harbor重新install(harbor.yml中注释掉https配置项试试)
1.推送镜像时报错:harbor unknown: http status code: 404, body: {"errors":[{"code":"MANIFEST_UNKNOWN","message":"manifest unknown"]}
2.拉取镜像报错:mainifest not found
解决:1.执行harbor gc进行垃圾回收,亲测可解决http status code: 404,"manifest unknown"问题
不行再尝试:2.清除harbor后重新install