Docker:企业级镜像仓库 harbor

文章目录

  • 一、简介
  • 二、部署(服务端)
  • 三、镜像管理(客户端)
  • 四、给 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/

  • 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
    Docker:企业级镜像仓库 harbor_第1张图片

三、镜像管理(客户端)


  • step1 创建项目
    Docker:企业级镜像仓库 harbor_第2张图片

  • 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 中添加信任
Docker:企业级镜像仓库 harbor_第3张图片

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

你可能感兴趣的:(#,Docker,docker,linux,运维)