环境说明
-
服务器两台:
192.168.230.103(x86架构,安装harbor)
192.168.230.101(x86架构,测试harbor)
-
操作系统:centos7.7
-
docker版本:2021.3.10最新版 20.10.12
-
docker-compose版本:2.3.1
-
harbor版本:2.4.1
docker安装(101、103均安装)
清理存在的docker软件
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
安装docker依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
下载docker安装所需的repo文件
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装docker
yum install -y docker-ce docker-ce-cli containerd.io
启动docker
systemctl start docker
设置开机自启动
systemctl enable docker
查看是否启动成功
docker version
103 上docker添加配置文件
vim /etc/docker/daemon.json
添加如下内容
{
"insecure-registries":["192.168.230.103"]
}
注:即使启用https后,103仍然需要配置该项内容,否则在用 docker login
命令登录时会出错Error response from daemon: Get "https://harbor103.com/v2/": unauthorized: authentication required
103docker执行以下命令
systemctl daemon-reload
systemctl restart docker
docker-compose安装(103)
到github搜docker-compose,下载最新版本即可
授权并改名
chmod +x docker-compose-Linux-x86_64
mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
查看是否生效
docker-compose version
harbor安装(103)
必要条件
docker及docker-compose已经安装
安装openssl:yum install openssl -y
修改101、103上hosts文件
echo "192.168.230.103 harbor103.com" >> /etc/hosts
注:一定要带上.com
,不要使用 harbor103
这样类似hostname
的配置,否则使用docker push
命令时会出现向docker.io
推送镜像的情况导致出现,如下所示:
[root@localhost anchors]# docker push harbor103/test-public/alpine-amd64
Using default tag: latest
The push refers to repository [docker.io/harbor103/test-public/alpine-amd64]
8d3ac3489996: Preparing
denied: requested access to the resource is denied
后续会大量使用 harbor103.com
这个域名
配置https访问harbor(103上操作)
创建存放证书的目录
mkdir -p /data/cert
cd /data/cert
生成证书颁发机构证书
1、生成 CA 证书私钥
openssl genrsa -out ca.key 4096
2、生成 CA 证书
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor103.com" \
-key ca.key \
-out ca.crt
注:CN改为自己设置的域名
生成服务器证书
1、生成私钥
openssl genrsa -out harbor103.com.key 4096
2、生成证书签名请求 (CSR)
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor103.com" \
-key harbor103.com.key \
-out harbor103.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=harbor103.com
DNS.2=harbor103
DNS.3=harbor
EOF
注:DNS.1是域名,DNS.2是去掉com,DNS.3是hostname,本次搭建103的hostname是harbor,该内容来自官网介绍
4、使用 v3.ext 文件为您的 Harbor 主机生成证书
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in harbor103.com.csr \
-out harbor103.com.crt
5、将 harbor103.com.crt 转换为 harbor103.com.cert,供 Docker 使用
openssl x509 -inform PEM -in harbor103.com.crt -out harbor103.com.cert
6、将服务器证书、密钥和 CA 文件复制到 Harbor 主机(103)上的 Docker 证书文件夹中
mkdir -p /etc/docker/certs.d/harbor103.com/
cd /data/cert
cp harbor103.com.cert /etc/docker/certs.d/harbor103.com/
cp harbor103.com.key /etc/docker/certs.d/harbor103.com/
cp ca.crt /etc/docker/certs.d/harbor103.com/
注:/etc/docker/certs.d/harbor103.com
该目录与域名保持一致,不要随意命名
7、在操作系统级别信任证书
cp harbor103.com.crt /etc/pki/ca-trust/source/anchors/harbor103.com.crt
update-ca-trust
8、重启docker
systemctl restart docker
安装harbor
1、下载harbor
https://github.com/goharbor/harbor/releases 找到对应版本,下载离线安装版
如:harbor-offline-installer-v2.4.1.tgz
2解压
tar -zxvf harbor-offline-installer-v2.4.1.tgz -C /opt
3修改配置
cd /opt/harbor
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
注:data_volume最好使用独立的目录只保存harbor的数据
4 安装
./install.sh
安装成功后可以通过浏览器访问harbor ui
至此,harbor安装完成
转换http和https后的操作
如果原本配置的http访问,改为https后的操作,如果是新装的,则无需操作
当修改harbor.yml
文件中http和https相关参数后,执行以下命令重启(在/opt/harbor目录内执行)
./prepare # 根据 harbor.yml 配置生成docker-compose文件
docker-compose down -v # 停止容器并移除存在的容器
docker-compose up -d # 启动docker容器
数据在配置文件中 data_volume 配置的有宿主机的挂载,因此数据不会丢失
但也造成另一个问题,如果修改admin密码,要通过web页面操作,修改配置文件没办法生效,除非删掉数据重新安装
其他命令
cd /opt/habor
docker-compose stop # 暂停harbor
docker-compose start # 启动harbor
# 彻底删除harbor
docker-compose down -v
# 删掉harbor相关镜像,慎重
docker images|grep goharbor|awk '{print $3}'|xargs docker rmi
# 删掉harbor中的数据和镜像,在data_volume配置的目录中删掉所有和harbor相关的目录即可
harbor创建项目
后续将从docker客户端(101)向harbor推送镜像
操作前需要先将证书发送给客户端(从103发送到101)
scp /data/cert/ca.crt root@192.168.230.101:/etc/pki/ca-trust/source/anchors/
推送镜像至harbor(101操作)
# 查看证书是否存在
ls /etc/pki/ca-trust/source/anchors/ # 看到传过来的ca.crt即可
#更新证书
update-ca-trust extract
#重启docker
systemctl restart docker
#登录
docker login harbor103.com
101上的docker无需配置 /etc/docker/daemon.json
中的 insecure-registries
参数 ,因为103已经配置https访问,而docker客户端与仓库的交互默认就是https.
登录之后就可以与仓库交互了
测试推送镜像到harbor私有仓库
# 拉取dockerhub的镜像
docker pull alpine
# 打标签
docker tag alpine harbor103.com/test-public/alpine-amd64 # 为后续测试多架构版本做准备,因此设定为amd64,当前cpu是x86架构
# 推送
docker push harbor103.com/test-public/alpine-amd64
可以看到已经推送成功
# 拉取arm64架构镜像
docker pull --platform arm64 alpine
docker tag alpine的镜像id harbor103.com/test-public/alpine-arm64 # 拉取两个alpine,会造成之前的x86架构的tag变为none,避免歧义这里用镜像id
docker push harbor103.com/test-public/alpine-arm64
# 构建多版本 manifest list
docker manifest create harbor103.com/test-public/alpine harbor103.com/test-public/alpine-arm64 harbor103.com/test-public/alpine-amd64
# 推送manifest list
docker manifest push harbor103.com/test-public/alpine --purge
推送完成后,在harbor ui上看到如下内容
之后通过命令docker pull harbor103.com/test-public/alpine
拉取时会根据cpu架构不同拉取对应的镜像
关于harbor的更多使用请自行查找
参考链接
https://goharbor.io/docs/2.4.0/install-config/
https://goharbor.io/docs/2.4.0/install-config/configure-https/
https://blog.csdn.net/qq_39876923/article/details/117303719
https://www.cnblogs.com/operationhome/p/10868498.html