实验环境
软件:
Centos7.4
harbor-1.2.2
docker version 17.12.0-ce
docker compose 1.17.1
机器IP地址:
172.16.10.65
172.16.10.64
软件下载地址:
docker-compose下载:https://github.com/docker/compose/releases/
harbor下载:https://github.com/vmware/harbor/releases
使用harbor的离线下载包 harbor-offline-installer-v1.2.2.tgz
实践(支持CA加密)
1,解压harbor包
tar xf harbor-offline-installer-v1.2.2.tgz
2,进入文件夹
[root@myregistry home]# ls harbor
ca.crt docker-compose.clair.yml harbor_1_1_0_template LICENSE yourdomain.com
ca.key docker-compose.notary.yml harbor.cfg NOTICE yourdomain.com.crt
ca.srl docker-compose.yml harbor.v1.2.2.tar.gz prepare yourdomain.com.csr
common extfile.cnf install.sh upgrade yourdomain.com.key
[root@myregistry home]# cd harbor
3,修改配置文件 harbor.cfg
所需参数:
-
host:目标主机的主机名,用于访问用户界面和注册表服务。它应该是目标机器的IP地址或完全限定的域名(FQDN),例如
192.168.1.10
或reg.yourdomain.com
。不要使用localhost
或127.0.0.1
为主机名 - 注册表服务需要由外部客户端访问! - ui_url_protocol:(http或https,默认为http)用于访问UI和令牌/通知服务的协议。如果公证处于启用状态,则此参数必须为https。
- db_password:用于db_auth的MySQL数据库的根密码。更改此密码以供任何生产使用!
- max_job_workers :(默认值为3)作业服务中复制工作的最大数量。对于每个映像复制作业,工作人员将存储库的所有标记同步到远程目标。增加这个数字允许系统中有更多的并发复制作业。但是,由于每个工作人员消耗一定数量的网络/ CPU / IO资源,请根据主机的硬件资源,仔细选择此属性的值。
- customize_crt:(打开或关闭,默认打开)打开此属性时,准备脚本创建私钥和根证书,用于生成/验证注册表令牌。当由外部来源提供密钥和根证书时,将此属性设置为off。
- ssl_cert:SSL证书的路径,仅当协议设置为https时才应用
- ssl_cert_key:SSL密钥的路径,仅当协议设置为https时才应用
- secretkey_path:用于在复制策略中加密或解密远程注册表的密码的密钥路径。
- log_rotate_count:日志文件在被移除之前被轮转log_rotate_count次。如果计数为0,则删除旧版本而不是旋转。
- log_rotate_size:日志文件只有在长度大于log_rotate_size字节的情况下才会进行旋转。如果大小后面跟着k,则大小假定为千字节。如果使用M,则大小以兆字节为单位;如果使用G,则大小以千兆字节为单位。所以大小100,大小100k,大小100M和大小100G都是有效的。
若只想配置http方式,则对于配置文件只需修改host为域名或者IP地址即可,跳过步骤4
若想配置https访问则继续
4,生成自己的CA证书,
创建您自己的CA证书:
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout ca.key \
-x509 -days 365 -out ca.crt
生成证书签名请求:
如果使用像reg.yourdomain.com这样的FQDN 连接注册表主机,则必须使用reg.yourdomain.com作为CN(通用名称)。否则,如果您使用IP地址连接您的注册表主机,CN可以是任何类似您的名字等等:
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout yourdomain.com.key \
-out yourdomain.com.csr
生成注册表主机的证书:
如果您使用的是像reg.yourdomain.com这样的FQDN 来连接您的注册表主机,请运行以下命令以生成注册表主机的证书:
openssl x509 -req -days 365 -in yourdomain.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out yourdomain.com.crt
如果你使用的是IP,比如172.16.10.65连接你的注册表主机,你可以运行下面的命令:
echo subjectAltName = IP:172.16.10.65 > extfile.cnf
openssl x509 -req -days 365 -in yourdomain.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out yourdomain.com.crt
获取crt和key文件之后可以将它们放在特定的目录,名称自拟:
cp yourdomain.com.crt /home/registry/certs/domain.crt
cp yourdomain.com.key /home/registry/certs/domain.crt
编辑harbor.cfg,更新三个参数:
ui_url_protocol = https
ssl_cert = /home/registry/certs/domain.crt
ssl_cert_key = /home/registry/certs/domain.key
5,执行install.sh程序
[root@myregistry harbor]# ./install.sh
加载过程需要稍等一会。
6,启动harbor,
[root@myregistry harbor]# docker-compose up -d
WARNING: The Docker Engine you're using is running in swarm mode.
Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.
To deploy your application across the swarm, use `docker stack deploy`.
Creating network "harbor_harbor" with the default driver
Creating harbor-log ...
Creating harbor-log ... done
Creating harbor-adminserver ...
Creating harbor-db ...
Creating registry ...
Creating harbor-db
Creating harbor-adminserver
Creating harbor-adminserver ... done
Creating harbor-ui ...
Creating harbor-ui ... done
Creating harbor-jobservice ...
Creating harbor-jobservice
Creating nginx ...
Creating nginx ... done
注意
1,修改配置文件和harbor重启
修改配置文件完毕后,为Harbour生成配置文件:
./prepare
如果Harbor已经在运行,请停止并删除现有的实例。您的图像数据保留在文件系统中
docker-compose down -v
-v表示删除容器对应的数据卷
最后重启Harbour:
docker-compose up -d
2,登录方式
打开浏览器并输入地址,它应该显示Harbor的用户界面。
在具有Docker守护进程的机器上,确保选项“-insecure-registry”不存在,并且您必须将上述步骤中生成的ca.crt复制到/etc/docker/certs.d/reg.yourdomain.com(或您的注册表主机IP),如果该目录不存在,请创建它。如果您将nginx端口443映射到另一个端口,则应该创建目录/etc/docker/certs.d/reg.yourdomain.com:port(或您的注册表主机IP:端口)。
登录上传image示例:
[root@myregistry harbor]# docker login 172.16.10.65
Username (admin):
Password:
Login Succeeded
[root@myregistry harbor]# docker tag ubuntu 172.16.10.65/library/ubuntu
[root@myregistry harbor]# docker pull 172.16.10.65/library/ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
Digest: sha256:7c308c8feb40a2a04a6ef158295727b6163da8708e8f6125ab9571557e857b29
Status: Image is up to date for 172.16.10.65/library/ubuntu:latest
3,时间同步
若client 和servie时间不同步则会发生下面问题
[root@localhost guest]# docker login 172.16.10.65 Username: admin
Password:
Error response from daemon: Get https://172.16.10.65/v2/: x509: certificate has expired or is not yet valid
方法:
同步时间
ntpdate 1.cn.pool.ntp.org
简单使用
1,登录
2,创建用户
3,添加项目
参考文档:
https://github.com/vmware/harbor/blob/master/docs/installation_guide.md