提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
构建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