Docker容器仓库Harbor的安装部署

Docker容器仓库Harbor的安装部署

一、基本介绍

Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,它提供用户权限管理、镜像复制等功能,提高使用registry的效率。

Harbor本身也是由一组docker镜像构建而成,如下图所示:

Docker容器仓库Harbor的安装部署

简单说明一下:

Docker容器仓库Harbor的安装部署

二、安装部署

由于harbor本身是由容器构成,显然他必须需要安装在容器环境,其次由于是多容器构成,需要使用到任务编排(docker-compose),所以在安装harbar之前,需要提前准备好docker环境以及安装docker-compose,docker相关的安装这里不做具体介绍。 安装harbor有如下要求:

软件版本要求

python:2.7+

docker:1.10+

dcoker-compose:1.6.0+

openssl:最新

1、下载安装包

安装包一般有两种,在线安装包和离线安装包,这里使用离线安装包进行安装,离线安装包比较大,下载的时间较长。

下载地址:https://github.com/goharbor/harbor/releases ,根据实际情况选择自己的版本下载。

2、安装和配置

harbor的安装和配置还是非常简单的。将离线安装包上次到服务器后选择合适的目录解压,如下:

tar -zxvf harbor-offline-installer-v1.6.1.tgz 

解压完成后可以看到目录有如下文件:

[root@dktest harbor]# ls -l
total 650104
drwxr-xr-x 4 root root 37 Dec 26 16:54 common
-rw-r--r-- 1 root root 727 Oct 16 11:52 docker-compose.chartmuseum.yml
-rw-r--r-- 1 root root 777 Oct 16 11:52 docker-compose.clair.yml
-rw-r--r-- 1 root root 1258 Oct 16 11:52 docker-compose.notary.yml
-rw-r--r-- 1 root root 3589 Oct 16 11:52 docker-compose.yml
drwxr-xr-x 3 root root 164 Oct 16 11:52 ha
-rw-r--r-- 1 root root 7907 Dec 26 17:30 harbor.cfg
-rw-r--r-- 1 root root 664077077 Oct 16 11:53 harbor.v1.6.1.tar.gz
-rwxr-xr-x 1 root root 6162 Oct 16 11:52 install.sh
-rw-r--r-- 1 root root 10768 Oct 16 11:52 LICENSE
-rw-r--r-- 1 root root 482 Oct 16 11:52 NOTICE
-rw-r--r-- 1 root root 1535603 Oct 16 11:52 open_source_license
-rwxr-xr-x 1 root root 39496 Oct 16 11:52 prepare

其中:harbor.cfg是配置文件,安装根据这个文件配置进行参数配;harbor.v1.6.1.tar.gz是软件安装包,docker-compose.yml是编排文件。install.sh是安装脚本。

1) 打开harbor.cfg文件,进行简单配置

hostname = 192.168.10.214 

harbor_admin_password = hb12345 #设置admin的密码

这里先只配置一个hostname即可,后面需要其他功能,再配置其他内容。

2)执行安装程序

sh install.sh 

安装成功后,在浏览器输入 http://IP ,如下所示,使用admin/hb12345登陆。

Docker容器仓库Harbor的安装部署

3)启动和停止

进入到安装目录,可以看到一个docker-compose.yml文件,此文件就是用来控制harbor的启动和停止。

docker-compose start #启动
docker-compose stop #停止

注意一定要在docker-compose.yml的目录执行命令,如果在其他路径,需要加-f参数指定文件路径。

更多内容请参见官方github文档:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

三、LDAP集成

harbor提供完善的LDAP集成界面,登陆进去后,在“配置管理”的“认证模式”

Docker容器仓库Harbor的安装部署

四、登陆和功能验证

开始搭建成功后,我们进行第一次登陆和拉取镜像测试可能会正常,但是后面在进行此类操作的时候会出现下面问题,如下所示:

[root@dktest-152 ~]# docker pull 192.168.10.214/sre/zookeeper:latest
Error response from daemon: Get https://192.168.10.214/v2/: dial tcp 192.168.10.214:443: connect: connection refused

这是因为docker默认使用的是https连接,而harbor默认使用http连接。对于这样的情况,需要在客户端的docker服务器上添加如下此参数,表示它是个一个非安全类仓库。

[root@dktest-214 ~]# more /etc/docker/daemon.json 
{
"insecure-registries":["192.168.10.152","192.168.10.214"]
}

注意,这个参数添加在客户端的docker,而不是harbor所在的docker。添加完成后,需要重启docker服务

systemctl daemon-reload 
systemctl restart docker.service

测试登陆和pull一个镜像:

#登陆

[root@dktest-214 ~]# docker login 192.168.10.152
Username: wwu
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

#pull镜像

[root@dktest-214 ~]# docker pull 192.168.10.152/sre/jboss:latest
latest: Pulling from sre/jboss
bc9ab73e5b14: Pull complete
bbf1045871fc: Pull complete
d4d0ac7b10b5: Extracting [================================================> ] 75.76MB/78.62MB
8d59a0626685: Download complete
6021747c93d5: Download complete
49107aa65e53: Download complete
826912dfe55f: Download complete
01bf445c52c3: Download complete

五、Https加密

Harbor也是可以配置https的认证模式的,这样就可以避免上面的问题。配置方法如下:

1、创建签名证书(CA)

openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt

2、生成签名请求

openssl req -newkey rsa:4096 -nodes -sha256 -keyout 192.168.10.214.key -out 192.168.10.214.csr #此处修改问自己的harbord的域名

3、FQDN方式生成注册表主机的证书

openssl x509 -req -days 365 -in 192.168.10.214.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out 192.168.10.214.crt

如果使用多个域名或者ip地址,则操作如下:

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.10.214
DNS.2=192.168.10.214
IP=192.168.10.214
EOF

然后:

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

对于docker,还需要将crt转换为cert

openssl x509 -inform PEM -in 192.168.10.214.crt -out 192.168.10.214.cert

4、为Harbor配置证书

上面的工作完成后,可以看到当前目录下面生成了很多证书文件:

[root@dktest-214 ~]# ll
total 64
-rw-r--r-- 1 root root 1939 Dec 28 10:07 192.168.10.214.cert
-rw-r--r-- 1 root root 1939 Dec 28 10:06 192.168.10.214.crt
-rw-r--r-- 1 root root 1691 Dec 28 09:28 192.168.10.214.csr
-rw-r--r-- 1 root root 3272 Dec 28 09:28 192.168.10.214.key
-rw-r--r-- 1 root root 1879 Dec 28 09:26 ca.crt
-rw-r--r-- 1 root root 3272 Dec 28 09:26 ca.key

现在拷贝这些文件到指定的目录,如果目录不存在,手工创建一下:

cp 192.168.10.214.crt /data/cert/
cp 192.168.10.214.key /data/cert/
cp 192.168.10.214.cert /etc/docker/certs.d/192.168.10.214.com/
cp 192.168.10.214.key /etc/docker/certs.d/192.168.10.214.com/
cp ca.crt /etc/docker/certs.d/192.168.10.214/

添加系统证书信任:

cp 192.168.10.214.crt /etc/pki/ca-trust/source/anchors/192.168.10.214.com.crt
update-ca-trust

5、修改配置文件

编辑harbor.cfg文件,修改如下内容:

ui_url_protocol = https
ssl_cert = /data/cert/192.168.10.214.com.crt
ssl_cert_key = /data/cert/192.168.10.214.com.key

重启服务:

./prepare
docker-compose down -v
docker-compose up -d

正常重启成功后,你就可以使用https模式打开了,如下:

Docker容器仓库Harbor的安装部署

由于这是自签名证书,所以如果想在其他客户端docker服务器登陆、拉取提交镜像,则必须将生产的crt正式拷贝到客户端docker服务器的/etc/docker/certs.d/目录下面(如:/etc/docker/certs.d/192.168.10.214)

[root@dktest-152 ~]# docker login https://192.168.10.214
Username: wwu
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

更多内容请参见: https://github.com/goharbor/harbor/blob/master/docs/configure_https.md

六、数据存储

harbor的是由多个容器组合构成,通过 docker-compose.yml可知,镜像的目录映射到了/data目录下,如下所示:

[root@dktest data]# pwd
/data
[root@dktest data]# ls -l
total 8
drwxr-xr-x 2 root root 6 Dec 26 16:56 ca_download
drwxr-xr-x 2 10000 10000 6 Dec 26 16:56 config
drwx------ 19 polkitd input 4096 Dec 26 17:35 database
drwxr-xr-x 2 10000 10000 6 Dec 26 16:54 job_logs
drwxr-xr-x 2 root root 6 Dec 26 16:56 psc
drwxr-xr-x 2 polkitd root 22 Dec 27 14:34 redis
drwxr-xr-x 3 10000 10000 20 Nov 1 23:12 registry
-rw------- 1 10000 10000 16 Dec 26 16:54 secretkey

所以,如果Harbor要进行备份迁移,我们只需要备份一下这个/data目录即可。

感谢阅读,欢迎关注交流

阿里云服务器

编辑该文章

编辑该文章,必须放入您本人的支付宝或微信收款码,通过审核后可,如果浏览者觉得您写的不错了直接对您打赏

复制加密链接

This is a modal dialog!

邮箱

This is a modal dialog!