Docker创建 私有镜像仓库 Harbor

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

构建Docker仓库方式除了使用Registry之外,还可以使用Harbor,如下为Registry方式缺点: 缺少认证机制,任何人都可以随意拉取及上传镜像,安全性缺失 缺乏镜像清理机制,镜像可以push却不能删除,日积月累,占用空间会越来越大(如果要删除找到宿主机目录下面对应文件进行删除) 缺乏相应的扩展机制 鉴于以上缺点,我们通常在生产环境中,不会直接使用docker registry来实现提供镜像服务。 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。 相对Registry,Harbor具有很多优势: 提供分层传输机制,优化网络传输 Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。 提供WEB界面,优化用户体验 只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。 支持水平扩展集群 当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。 良好的安全机制 企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。 以上论述来自网友,安装前可以先了解下。

一、Docker已安装好的情况下, 安装Docker-Compose快速编排工具

下载地址: https://github.com/docker/compose/releases/
 
# curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

# chmod +x /usr/local/bin/docker-compose                ## 添加执行权限 
# docker-compose -version                              ##查看版本

二、下载Harbor的压缩包

下载地址: https://github.com/goharbor/harbor/releases

# wget  https://github.com/goharbor/harbor/releases/download/v2.3.0-rc3/harbor-offline-installer-v2.3.0-rc3.tgz
# tar -xzf harbor-offline-installer-v2.3.0-rc3.tgz
# mkdir /data

三、使用 OpenSSL创建 CA (使用http可跳过这步)

     Harbor 注册表的主机名是yourdomain.com,并且其 DNS 记录指向您运行 Harbor 的主机。 

docker.hub

3.1 生成证书颁发机构证书

在生产环境中,您应该从 CA 获取证书。在测试或开发环境中,您可以生成自己的 CA。要生成 CA 证书,请运行以下命令。

3.1.1生成 CA 证书私钥。

# openssl genrsa -out ca.key 4096

3.1.2 生成 CA 证书。

调整-subj选项中的值以反映您的组织。如果使用 FQDN 连接 Harbor 主机,则必须将其指定为公用名 ( CN) 属性。

#  openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.118.10" \
 -key ca.key \
 -out ca.crt

在这里插入图片描述

3.2 生成服务器证书

3.2.1 生成私钥。

# openssl genrsa -out 192.168.118.10.key 4096

3.2.2 生成证书签名请求 (CSR)。

openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.118.10" \
    -key 192.168.118.10.key \
    -out 192.168.118.10.csr

在这里插入图片描述

3.2.3 生成 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=192.168.118.10
DNS.2=192.168.118.10
DNS.3=docker.hub
EOF

3.2.4 使用该v3.ext文件为您的 Harbor 主机生成证书。

将yourdomain.comCRS 和 CRT 文件名中的 替换为 Harbor 主机名。

 openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in 192.168.118.10.csr \
    -out 192.168.118.10.crt

在这里插入图片描述
在这里插入图片描述

3.3 向 Harbor 和 Docker 提供证书

生成后ca.crt,yourdomain.com.crt和yourdomain.com.key文件,必须将它们提供给港口和码头工人,和重新配置港使用它们。

3.3.1 将服务器证书和密钥复制到 Harbor 主机上的 certficates 文件夹中。

 # mkdir /data/cert
# cp 192.168.118.10.crt /data/cert
# cp 192.168.118.10.key /data/cert

3.3.2 转换yourdomain.com.crt为yourdomain.com.cert,供 Docker 使用。

Docker 守护进程将.crt文件解释为 CA 证书,将.cert文件解释为客户端证书
# openssl x509 -inform PEM -in 192.168.118.10.crt -out 192.168.118.10.cert

3.3.3 将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中。您必须首先创建适当的文件夹。

# mkdir -p /etc/docker/certs.d/docker.hub/
# cp 192.168.118.10.cert /etc/docker/certs.d/docker.hub/
# cp 192.168.118.10.key /etc/docker/certs.d/docker.hub/
# cp ca.crt /etc/docker/certs.d/docker.hub/

----- 如果您将默认nginx端口 443映射到其他端口,请创建文件------没设置夹/etc/docker/certs.d/yourdomain.com:port或/etc/docker/certs.d/harbor_IP:port。

3.3.4 重启 Docker 引擎。

 systemctl restart docker

四 修改Harbor的配置

4.1 http 镜像仓库

cp harbor.yml.tmpl harbor.yml
vi harbor.yml               修改hostname和port 
hostname: 192.168.118.10 

把https 部分全部标上#
在这里插入图片描述

4.2 https 镜像仓库

cp harbor.yml.tmpl harbor.yml
vi harbor.yml               修改hostname和port 
hostname: 192.168.118.10 
  certificate: /data/cert/192.168.118.10.crt
  private_key: /data/cert/192.168.118.10.key

端口是否要修改看个人需要

在这里插入图片描述

五 安装Habor,命令如下:./install.sh

./install.sh 

在这里插入图片描述

如时先安装http方式后再升级https

./prepare        
                                    
./install.sh 

六 访问、下载和上传

https://192.168.118.10/
账号:admin,默认密码:Harbor12345


在这里插入图片描述
在这里插入图片描述

如果安装的 Harbor 使用 HTTP 而不是 HTTPS,您必须将该选项添加–insecure-registry到您客户端的 Docker 守护进程中。默认情况下,守护程序文件位于/etc/docker/daemon.json.

vi /etc/docker/daemon.json. 
 {
               "insecure-registries" : ["192.168.118.10"]
}
# systemctl daemon-reload
# systemctl restart docker

# docker login 192.168.118.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

# docker push 192.168.118.10/ivesgdidf/hello-world
Using default tag: latest
The push refers to repository [192.168.118.10/ivesgdidf/hello-world]
f22b99068db9: Pushed 
latest: digest: sha256:1b26826f602946860c279fce658f31050cff2c596583af237d971f4629b57792 size: 525

上传成功
在这里插入图片描述

参考:
配置 HTTPS 访问 Harbor
https://goharbor.io/docs/1.10/install-config/configure-https/

https://blog.csdn.net/qq_34556414/article/details/108014074

https://blog.csdn.net/u010948569/article/details/107222583/

https://blog.51cto.com/net881004/2538347


在k8s中使用harbor仓库

 cat > /etc/docker/daemon.conf <<EOF 
 {     
      "registry-mirrors": [ 
        "https://kfwkfulq.mirror.aliyuncs.com",  
       "https://registry.docker-cn.com",   
      "http://hub-mirror.c.163.com"   
  ],  
   { "insecure-registries":["192.168.252.213:80"] },         # harbor ip地址 
"dns": ["8.8.8.8","8.8.4.4"] 
} 
EOF 

最后重启docker

service docker restart 

版权声明:本文为ivesgg原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。