文章目录

  • 一、简介
  • 二、部署(服务端)
  • 三、镜像管理(客户端)
  • 四、给 harbor 配置 https 证书
  • 4.1 配置后的效果
  • 4.2 服务端配置
  • 4.3 客户端配置


一、简介


Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署企业内部的私有环境Registry是非常必要的,Harbor和docker中央仓库的关系,就类似于nexus和Maven中央仓库的关系,Harbor除了存储和分发镜像外还具有用户管理,项目管理,配置管理和日志查询,高可用部署等主要功能。

二、部署(服务端)


部署文档参考:https://goharbor.io/docs/2.6.0/install-config/

# 安装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
  • pause镜像仓库 镜像仓库有哪些_docker

三、镜像管理(客户端)


  • step1 创建项目
  • pause镜像仓库 镜像仓库有哪些_Docker_02

  • 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 自签名证书参考:

# 准备证书存放目录
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 中添加信任

pause镜像仓库 镜像仓库有哪些_运维_03

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