因为工作需要,有时候是需要完全断网环境,此时需要在内网环境中离线安装Harbor私有仓库。
1、系统环境描述
主机:X86_64架构,8G内存 (期待啥时候等有机会找一台国产化机器安装一个其他架构的版本)
操作系统:CentOS 7.9-2009 最小化安装
作为私有仓库,建议硬盘尽量大一些,我使用的200GB,可以推荐使用1TB以上。
2、准备工作
找一台能上网的机器(需要能运行docker),下载下面三类文件
-
docker-ce的离线安装包
到 https://download.docker.com/linux/地址查找符合自己主机系统和架构的docker-ce安装包版本,下载对应目录下新版的docker安装文件。
本例中下载版本为linux/centos/7/x86_64/stable/Packages/目录下20.10.17-3版本,需要下载五个文件,文件名为
containerd.io-1.4.9-3.1.el7.x86_64.rpm
docker-ce-20.10.17-3-el7.x86_64.rpm
docker-ce-cli-20.10.17-3-el7.x86_64.rpm
docker-scan-plugin-0.8.0-3.el7.x86_64.rpm
docker-ce-rootless-extras-20.10.7-3.el7.x86_64.rpm
-
Docker-compose的离线安装包
到https://github.com/docker/compose/releases/ 地址查找最新的docker-compose版本
下载最新版的docker-compose文件,下载后将docker-compose-linux-x86_64重命名为docker-compose(后续上传到linux机器后还得赋予执行权限)
本文写作时版本为2.6.1
-
harbor的离线安装包
到 https://github.com/goharbor/harbor/releases地址查找最新的harbor离线包版本
下载最新版的harbor文件,推荐使用2.x版本
本文写作时版本为2.5.2,文件名为harbor-offline-installer-v2.5.2.tgz 文件大小629MB
-
harbor需要的prepare镜像包
docker pull goharbor/prepare:v2.4.1
docker save -o goharbor_prepare_v2.4.1.tar goharbor/prepare:v2.4.1
将上述文件上传到准备安装harbar所在的linux服务器上,假设上传目录为/var/local
3、harbor安装
以下操作在准备安装harbor的linux服务器上进行
使用Xshell连接到harbor主机上(本人比较懒,直接使用的root账户,这样很多操作比较方便,不必每次都输密码,如果是使用非root账户,或者ubuntu服务这种,需要在命令前加sudo)
安装docker及dock-compose
cd /var/local
mv docker-compose-linux-x86_64-2.6.2 docker-compose
chmod 777 docker-compose
mv docker-compose /usr/bin
yum install *.rpm #安装docker运行环境
systemctl start docker
安装harbor
cd /var/local
tar -zxvf harbor-offline-installer-v2.5.2.tgz -C /usr/local/
cd /usr/local/
cd harbor
cp harbor.yml.tmpl harbor.yml
vi harbor.yml #编辑harbor配置文件进行安装
修改harbor.yml harbor作为私有仓库作用在公司内网,一般都是信任关系,没多大必要做https,使用http即可! 所以 把https相关的已经注释掉(实话是,配置https实在有点麻烦)
在公司内部使用,如果用了公司的dns,哪就可以采用域名作为hostname,如果是其他ip,请自行更换,注意以下红框标注部分,并注意配置文件的用户名密码配置,默认是 用户名是:admin,密码是:Harbor12345,如果修改需要安装前修改
执行安装命令 先执行预处理命令,会创建一些文件夹,初始化一些文件
./prepare
将goharbor_prepare_v2.4.1.tar执行装载
docker load -i goharbor_prepare_v2.4.1.tar
然后开始真正的安装过程
./install.sh
因为镜像已经在相关目录中,所以不需要下载。等待一会后,看到如下画面表示安装成功
编译一个harbor启动服务文件,可将harbor作为服务启动,便于今后使用
vi /lib/systemd/system/harbor.service
文件内容如下:
[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service Requires=docker.service
Documentation=http://github.com/vmware/harbor
[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/bin/docker-compose -f /usr/local/harbor/docker-compose.yml up ExecStop=/usr/bin/docker-compose -f /usr/local/harbor/docker-compose.yml down
[Install]
WantedBy=multi-user.target
docker客户端访问
vi /etc/docker/daemon.json
把harbor地址配置到docker中,具体ip或域名可以换成你自己的ip或者域名
{ "registry-mirrors": [ "http://192.188.120.166" ], "insecure-registries": ["127.0.0.1","192.188.120.166"], "graph":"/var/docker/lib" }
修改了daemon.json文件后需要重载配置并重启docker服务和harbor服务,并登陆私有仓库
systemctl daemon-reload systemctl restart docker systemctl status docker #到harbor安装目录下 docker-compose down docker-compose up -d docker login 192.188.120.166 # 私有仓库的ip或域名
帐号密码是私有仓库的用户名和密码
docker客户端访问
docker客户端是指所有需要访问harbor私有仓库的客户端,包括harbor服务器自己。
vi /etc/docker/daemon.json
把harbor地址配置到docker中,具体红色标注的ip或域名可以换成你自己的ip或者域名
{ "registry-mirrors": [ "http://192.168.120.166" ], "insecure-registries": ["127.0.0.1","192.168.120.166"], "graph":"/var/docker/lib" }
修改了daemon.json文件后需要重载配置并重启docker服务和harbor服务,并登陆私有仓库
注意:如果重启了docker服务,最好同时再重新启动一下harbor服务,不然可能出现问题。
systemctl daemon-reload
systemctl restart docker
docker login 192.168.120.166 # 私有仓库的ip或域名
帐号密码是私有仓库的用户名和密码,管理员使用的是安装阶段在harbor.yml中设定的密码
2022年8月3日添加
今天使用maven生成docker镜像推送到私有库时出现拒绝访问的问题,郁闷,刚开始实际应用就出现问题。
研究后改正如下(如果maven所在服务器上安装了docker,直接在maven服务器运行docker login命令登录即可,此处针对没安装docker环境服务器)
关于maven库直接推送docker需要修改的地方
vi /lib/systemd/system/docker.service
文件修改ExecStart下增加
-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
开放2375端口
firewall-cmd --zone=public --add-port=2375/tcp --permanent
firewall-cmd --reload
修改了daemon.json文件后需要重载配置并重启docker服务和harbor服务,并登陆私有仓库
systemctl daemon-reload
systemctl restart docker
systemctl status docker
#到harbor安装目录下
docker-compose down
docker-compose up -d
docker login 192.168.120.166 # 私有仓库的ip或域名
测试后,maven可推送docker镜像了,当然需要在maven的pom.xml文件里进行配合(不在本文范围内)。
使用命令行方式进行镜像推拉
docker tag SOURCE_IMAGES[:TAG] 192.168.120.166/library/IMAGE[:TAG] docker push 192.168.120.166/library/IMAGE[:TAGE]
推到仓库/从仓库中拉取
最后设置成开机自启动
systemctl start harbor
systemctl enable harbor
注意,客户机也需要修改docker配置文件,使docker支持harbor ,方法同上
客户机使用私有仓库前需要登录私有仓库
docker login 192.168.120.166 # 私有仓库的ip或域名
帐号密码是私有仓库的用户名和密码,这个可以由管理员在Web界面中添加。
4、harbor使用
-
访问harbor和登录
(根据在harbor.yml文件中配置的端口与IP地址(或域名)进行访问)
用其他客户端或者服务器从搭建的私有Harbor上拉镜像,同样的,也要在相应的/etc/docker/daemon.json配置
如果需要使用完全离线版的私有仓库,需要提前在能联网的机器按照下面步骤将镜像推送到私有库服务器并对其他内网机器提供服务
需要找一台能连接互联网的机器,下载好需要的xx包并上传到本服务器上
docker pull AAA/xxx:vx.x #下载需要的镜像包 docker save -o AAA_xxx.vx.x.tar AAA/xxx:vx.x #将镜像包打包
将上面的AAA_xxx.tar文件保存后上传到需要安装的私有服务器上,并执行装载,修改tag并push到私有服务器
docker load -i AAA/xxx:vx.x #装载镜像包 docker tag AAA/xxx:vx.x 192.168.120.166/AAA/xxx:vx.x #修改tag,注意ip和目录 docker push 192.168.120.166/AAA/xxxx:vx.x #推送,注意,如果不想修改路径,那么在推送前,在harbor上创建AAA项目,否则会推送失败
例如:上面的goharbor/prepare:v2.4.1,就需要创建一个goharbor项目