harbor私有仓库的搭建部署
1 、下载docker-compose ,移动到/usr/local/bin/目录下,并赋予运行权限
[root@server1 ~]# mv docker-compose /usr/local/bin/
[root@server1 ~]# chmod +x /usr/local/bin/docker-compose
[root@server1 ~]# docker-compose version
2、下载并安装harbor
[root@server1 ~]# ls
harbor-offline-installer-v1.8.0.tgz
[root@server1 ~]# tar -zxf harbor-offline-installer-v1.8.0.tgz
[root@server1 ~]# cd harbor/
[root@server1 harbor]# ls
common docker-compose.yml harbor.v1.8.0.tar.gz harbor.yml install.sh LICENSE prepare
3、配置harbor
解压之后,目录下会生成 harbor.conf 文件,该文件就是harbor的配置文件
[root@server1 harbor]# vim harbor.yml
# hostname设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhost
5 hostname = 172.25.83.1 #需要修改的内容。更改hostname为本机的IP地址。也可以写为域名,比如chen.org。只要前后一致即可(将后面172.25.83.1的地方换为chen.org)。
4、启动 Harbor
修改完配置文件后,在当前目录执行 ./install.sh
[root@server1 harbor]# ./install.sh
出现如下的界面,表示harbor启动成功
docker images
docker-compose ps
6、web界面查看
启动完成后,我们访问刚设置的 hostname 即可 http://172.25.28.1
我们可以点击,右上角的English,将字体调整为中文
默认用户名和密码是:admin/Harbor12345
点击"+项目",可以添加项目。我这里添加的项目的名称是my_harbor。并设置为私有项目,即只有登录了(login)的相关用户才可以进行pull和push的操作。如果勾选了"公开",则所有人都可以pull和push。
7.上传镜像172.25.28.1/my_harbor/rhel7:nginx
登陆login时,报错
[root@server1 harbor]# docker login 172.25.83.1
Username: admin #默认用户名:admin
Password: #默认密码:Harbor12345
Error response from daemon: Get https://172.25.83.1/v2/: dial tcp 172.25.83.1:443: connect: connection refused #连接拒绝
这是因为 docker1.3.2 版本开始默认 docker registry 使用的是 https,我们设置 Harbor 默认 http 方式,所以当执行用 docker login、pull、push 等命令操作非 https 的 docker regsitry 的时就会报错。解决办法:
修改配置 /usr/lib/systemd/system/docker.service(通过systemctl status docker来查看该目录),将 ExecStart 增加 --insecure-registry=172.25.28.1。
重启docker,再次在本地执行登录操作
[root@server1 harbor]# systemctl daemon-reload
[root@server1 harbor]# systemctl restart docker
[root@server1 harbor]# docker login 172.25.83.1 #或docker login -u admin -p Harbor12345 172.25.83.1
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 #登录成功
登陆成功之后,会生成,相应的认证文件。以保证,下次不用再登录。
8、上传镜像172.25.28.1/my_harbor/rhel7:nginx
[root@server1 harbor]# docker push 172.25.28.1/my_harbor/rhel7:nginx
The push refers to repository [172.25.83.1/my_harbor/rhel7]
9fd85e6ca660: Pushed #显示Pushed表示上传成功
668afdbd4462: Pushed
nginx4: digest: sha256:88e96d92b032b90a2549b961928f795e59e6e125ad38785957cc694aaba2cca5 size: 73
push镜像成功之后,然后在web界面上查看镜像是否存在,并且可以对镜像进行删除等操作
部署 SSL 认证(使用https的方式访问Web Ui)
1.修改 Harbor 的配置文件 hardor.cfg
[root@server1 harbor]# pwd
/root/harbor
[root@server1 harbor]# vim harbor.cfg
2.创建根证书
<1> 创建证书存放目录
[root@server1 harbor]# mkdir /data/cert #harbor.cfg文件中指定的目录
[root@server1 harbor]# cd /data/cert
<2>创建根证书私钥(不使用第三方权威机构的CA来认证,自己充当CA的角色)
[root@server1 cert]# openssl genrsa -out ca.key 2048 #生成根证书私钥(无加密),必须在cert目录中操作
Generating RSA private key, 2048 bit long modulus
.......................................+++
..............+++
e is 65537 (0x10001)
[root@server1 cert]# ls
ca.key
<3>生成自签名证书(使用已有私钥ca.key自行签发根证书)
[root@server1 cert]# openssl req -x509 -new -nodes -key ca.key -days 10000 -out ca.crt -subj "/CN=Harbor-ca" #必须在cert目录中操作
[root@server1 cert]# ls
ca.crt ca.key
3.创建服务器端证书并签发服务器证书
<1>创建服务器端证书
[root@server1 cert]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout server.key -out server.csr #一路回车。必须在cert目录中操作
#注意如果是域名,比如chen.org,那么需要写入chen.org
Common Name (eg, your name or your server's hostname) []:chen.org
<2>签发服务器证书
[root@server1 cert]# echo subjectAltName = IP:172.25.28.1 > extfile.cnf #必须在cert目录中操作。如果是域名,比如chen.org,那么这步是不需要的。
[root@server1 cert]# ls
ca.crt ca.key extfile.cnf server.csr server.key
[root@server1 cert]# openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 365 -extfile extfile.cnf -out server.crt #必须在cert目录中操作。如果是域名,比如chen.org,那么这步中把参数-extfile extfile.cnf去掉即可
Signature ok
subject=/C=XX/L=Default City/O=Default Company Ltd
Getting CA Private Key
[root@server1 cert]# ls
ca.crt ca.key ca.srl extfile.cnf server.crt server.csr server.key
4.设置 docker 证书
<1>创建目录
mkdir -p /etc/docker/certs.d/172.25.28.1
#如果是域名,比如chen.org,请创建下面的目录
# mkdir -p /etc/docker/certs.d/chen.org
# 如果端口为443,则不需要指定。如果为自定义端口,请指定端口
# /etc/docker/certs.d/yourdomain.com:port
[root@server1 cert]# mkdir -p /etc/docker/certs.d/172.25.28.1
<2>将 ca 根证书和服务器证书依次复制到上述创建的目录中
cp ca.crt /etc/docker/certs.d/172.25.83.1 #如果是域名,比如chen.org。cp ca.crt /etc/docker/certs.d/chen.org
cp server.crt /etc/docker/certs.d/172.25.83.1 #如果是域名,比如chen.org。cp server.crt /etc/docker/certs.d/chen.org
[root@server1 cert]# pwd
/data/cert
[root@server1 cert]# cp ca.crt /etc/docker/certs.d/172.25.83.1/
[root@server1 cert]# cp server.crt /etc/docker/certs.d/172.25.83.1/
5.重启 docker 和 启动 Harbor
[root@server1 cert]# systemctl restart docker
[root@server1 cert]# cd /root/harbor/
[root@server1 harbor]# ./install.sh
6.web界面查看
输入172.25.28.1
变成https则配置成功