一、简介
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署企业内部的私有环境Registry是非常必要的,Harbor和docker中央仓库的关系,就类似于nexus和Maven中央仓库的关系,Harbor除了存储和分发镜像外还具有用户管理,项目管理,配置管理和日志查询,高可用部署等主要功能。
二、部署(服务端)
部署文档参考:https://goharbor.io/docs/2.6.0/install-config/
-
step1 获取资源包
harbor:https://github.com/goharbor/harbor/tags
docker-compose:https://github.com/docker/compose/tags
docker-compose(国内):https://mirrors.aliyun.com/docker-toolbox/linux/compose/ -
step2 根据官方文档安装所需依赖程序(对版本有需求)
# 安装docker # 1. 安装 yum -y install docker-io systemctl start docker systemctl enable docker # 2. 验证 [root@jumper ~]# docker -v Docker version 19.03.14, build 5eb3275d40 # 安装docker-compose # 1.下载二进制命令的同时重命名 curl -L https://mirrors.aliyun.com/docker-toolbox/linux/compose/1.21.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose # 2. 配置权限 chmod 777 /usr/local/bin/docker-compose # 3. 验证 [root@jumper ~]# docker-compose -v docker-compose version 1.21.2, build a133471 # 安装openssh(用于为Harbor生成证书和密钥) yum -y install openssh
-
step3 部署 harbor
# 1. 下载部署包 wget https://github.com/goharbor/harbor/releases/download/v1.5.1/harbor-offline-installer-v1.5.1.tgz # 2. 解压 tar xf harbor-offline-installer-v1.5.1.tgz # 3. 变更仓库地址、初始密码 sed -i \ -e 's/hostname = reg.mydomain.com/hostname = 192.168.56.10/g' \ -e 's/harbor_admin_password = Harbor12345/harbor_admin_password = 123456/g' \ harbor/harbor.cfg # 4. 安装harbor ./install.sh
-
step4 验证成果
浏览器访问:http://192.168.56.10
三、镜像管理(客户端)
-
step1 创建项目
-
step2 信任私有仓库(下面的操作会覆盖原有配置,非新环境慎用)
cat > /etc/docker/daemon.json <<EOF { "insecure-registries": ["http://192.168.56.10"] } EOF systemctl restart docker
-
step3 登录 harbor 通过认证
[root@jumper harbor]# docker login http://192.168.56.10 Username: admin Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded [root@jumper harbor]# cat ~/.docker/config.json { "auths": { "192.168.56.10": { "auth": "YWRtaW46MTIzNDU2" } }, "HttpHeaders": { "User-Agent": "Docker-Client/19.03.14 (linux)" } }
-
step4 给镜像打上新建的项目标签,并推送/拉取镜像
docker tag nginx 192.168.56.10/lyh/nginx:1.12 docker push/pull 192.168.56.10/lyh/nginx:1.12
四、给 harbor 配置 https 证书
4.1 配置后的效果
1)加密传输更安全
2)传输镜像时,不需要再在 /etc/docker/daemon.json 里面添加 insecure-registries
4.2 服务端配置
step1:准备证书
https 自签名证书参考:https://blog.csdn.net/focus_lyh/article/details/127348526
# 准备证书存放目录
ls /data/cert
ca.crt ca.csr ca.key ca.srl harbor.local.crt harbor.local.csr harbor.local.key
step2:修改配置文件
# 进入部署包目录
cd /harbor
# 变更仓库地址、传输协议、证书存放的路径
sed -i \
-e 's#hostname = reg.mydomain.com#hostname = harbor.local#' \
-e 's#ui_url_protocol = http#ui_url_protocol = https#' \
-e 's#ssl_cert = /data/cert/server.crt#ssl_cert = /data/cert/harbor.local.crt#' \
-e 's#ssl_cert_key = /data/cert/server.key#ssl_cert_key = /data/cert/harbor.local.key#' \
harbor.cfg
step3:跳过镜像导入步骤,加快部署(前面没导入过镜像的,可以跳过该步骤)
# 注释镜像导入
sed -i '151,155s/^/#/' install.sh
# 注释代码
sed -n 151,155p install.sh
#if [ -f harbor*.tar.gz ]
#then
# h2 "[Step $item]: loading Harbor images ..."; let item+=1
# docker load -i ./harbor*.tar.gz
#fi
step4:应用配置
./install
step5:验证效果(解析问题就不说了)
1)通过https协议访问
2)原先上传的镜像不会丢失
3)无需在 daemon.json 中添加信任
4.3 客户端配置
把自生成的证书放入 Docker 配置文件中,原因是自生成的证书不被 Docker 认可,不处理的话 login 会报错:Error response from daemon: Get “https://IP/v2/”: x509: certificate relies on legacy Common Name field, use SANs instead.
# 在docker配置文件中建立自己IP或域名的文件夹
mkdir /etc/docker/cert.d/IP(或者域名)
# 示例
mkdir /etc/docker/cert.d/harbor.local
# 将证书复制进入
cp /data/cert/harbor.local.crt /etc/docker/cert.d/harbor.local/
# 重启docker
systemctl restart docker