蒲柳青 發表於 2020-6-13 18:09:00

centos 7离线安装harbor

<p><strong><span style="font-size: 18pt">Harbor介绍</span></strong></p>
<p>harbor是一个docker私有镜像仓库,虽然docker官方提供了公共的镜像仓库(Docker Hub),但是从安全和效率等方面考虑,部署私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管理项目。</p>
<p>docker官方提供了一个私有镜像仓库 docker Registry,安装部署容易,安装一个Registry容器就可以使用了。</p>
<p><strong>但是Registry有以下缺点:</strong></p>
<p># 没有图形界面</p>
<p># 没有项目管理</p>
<p># 没有用户权限控制</p>
<p># 看不到镜像操作记录<br>&nbsp;</p>
<p><strong>Harbor的优势:</strong></p>
<p>图形管理界面。</p>
<p>按项目管理镜像。</p>
<p>独立的用户管理,不同用户可以操作不同镜像,细粒度的权限控制,包含create、push 、pull、delete。</p>
<p>镜像管理。</p>
<p>标签管理。</p>
<p>操作日志管理。</p>
<p><span style="font-size: 18pt"><strong>【Harbor&nbsp;安装步骤】:</strong></span></p>
<p><strong><span style="font-size: 18pt">第1步:安装harbor前期做准备</span></strong></p>
<p>使用harbor要先安装docker及docker-compose, docker及docker-compose安装教程请参考 【centos 7使用国内源安装docker及docker-compose】</p>
<p>docker与docker-compose安装教程地址:https://www.cnblogs.com/yyee/p/12905165.html</p>
<p><strong><span style="font-size: 18pt">第2步:下载 Harbor离线安装包</span></strong></p>
<p>从harbor官网下载离线安装包,下载地址:https://github.com/goharbor/harbor/releases</p>
<p>下载当前最新版本harbor 1.10.1,离线包大小为658M 。</p>
<p><img src="https://img2020.cnblogs.com/blog/121965/202006/121965-20200613181709676-992186812.png"></p>
<p>&nbsp;&nbsp;下载完离线包之后,将离线安装包【harbor-offline-installer-v1.10.1.tgz】上传到centos服务器。比如将文件上传到 centos的 /tools/harbor/harbor-offline-installer-v1.10.1.tgz&nbsp;</p>
<p><strong><span style="font-size: 18pt">第3步,创建https证书</span></strong></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"># 创建证书目录,并赋予权限
</span><span style="color: rgba(0, 0, 255, 1)">mkdir</span> -p /cert/<span style="color: rgba(0, 0, 0, 1)">harbor
</span><span style="color: rgba(0, 0, 255, 1)">chmod</span> -R <span style="color: rgba(128, 0, 128, 1)">777</span> /cert/<span style="color: rgba(0, 0, 0, 1)">harbor
cd </span>/cert/<span style="color: rgba(0, 0, 0, 1)">harbor

# </span><span style="color: rgba(0, 0, 255, 1)">whereis</span><span style="color: rgba(0, 0, 0, 1)"> openssl 检查是否有安装openssl,如果没有先安装openssl组件,如果有就不用安装了
</span><span style="color: rgba(0, 0, 255, 1)">whereis</span><span style="color: rgba(0, 0, 0, 1)"> openssl
</span><span style="color: rgba(0, 0, 255, 1)">yum</span> <span style="color: rgba(0, 0, 255, 1)">install</span><span style="color: rgba(0, 0, 0, 1)"> openssl

# 创建服务器证书密钥文件harbor.key
openssl genrsa </span>-des3 -out harbor.key <span style="color: rgba(128, 0, 128, 1)">2048</span><span style="color: rgba(0, 0, 0, 1)">
# 输入密码,确认密码,自己随便定义,但是要记住,后面会用到。

# 创建服务器证书的申请文件harbor.csr
openssl req </span>-new -key harbor.key -<span style="color: rgba(0, 0, 0, 1)">out harbor.csr
# 输入密钥文件的密码, 然后一路回车

# 备份一份服务器密钥文件
</span><span style="color: rgba(0, 0, 255, 1)">cp</span><span style="color: rgba(0, 0, 0, 1)"> harbor.key harbor.key.org

# 去除文件口令
openssl rsa </span>-<span style="color: rgba(0, 0, 255, 1)">in</span> harbor.key.org -<span style="color: rgba(0, 0, 0, 1)">out harbor.key
# 输入密钥文件的密码

# 创建一个自当前日期起为期十年的证书 harbor.crt
openssl x509 </span>-req -days <span style="color: rgba(128, 0, 128, 1)">3650</span> -<span style="color: rgba(0, 0, 255, 1)">in</span> harbor.csr -signkey harbor.key -out harbor.crt</pre>
</div>
<p>&nbsp;&nbsp;</p>
<p><strong><span style="font-size: 18pt">第4步,解压软件包,修改配置文件</span></strong></p>
<p>&nbsp;先进入harbor离线包上传的目录,解压离线包到/usr/local/harbor下</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">tar</span> zxf /tools/harbor/harbor-offline-installer-v1.<span style="color: rgba(128, 0, 128, 1)">10.1</span>.tgz-C /usr/local/
<span style="color: rgba(0, 0, 255, 1)">ls</span> /usr/local/harbor</pre>
</div>
<p>&nbsp;解压软件包之后有这些文件及目录:</p>
<p><img src="https://img2020.cnblogs.com/blog/121965/202006/121965-20200613182929413-495430712.png"></p>
<p>&nbsp;配置harbor.yml 文件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">vi </span>/usr/local/harbor/harbor.yml</pre>
</div>
<p>&nbsp;</p>
<p>主要修改以下地方:</p>
<div class="cnblogs_code">
<pre># 将hostname改成本机IP或域名,不要用localhost,127.<span style="color: rgba(128, 0, 128, 1)">0.0</span>.<span style="color: rgba(128, 0, 128, 1)">1</span><span>或</span><span style="color: rgba(128, 0, 128, 1)">0.0</span>.<span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(0, 0, 0, 1)">,冒号后面都有一个空格
</span><span style="color: rgba(0, 0, 255, 1)">hostname</span>: <span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">0.101<br>ui_url_protoc0l: https<br></span><span style="color: rgba(0, 0, 0, 1)">
# 将http端口改成10080,因为默认用的80端口已经被占用,http可以指定任意端口
http:
port: </span><span style="color: rgba(128, 0, 128, 1)">10080</span><span style="color: rgba(0, 0, 0, 1)">
# 配置https的端口,只能使用443端口,更改证书路径,证书路径为刚刚生成的https证书的实际路径
https:
port: </span><span style="color: rgba(128, 0, 128, 1)">443</span><span style="color: rgba(0, 0, 0, 1)">
certificate: </span>/cert/harbor/<span style="color: rgba(0, 0, 0, 1)">harbor.crt
private_key: </span>/cert/harbor/<span style="color: rgba(0, 0, 0, 1)">harbor.key
# 修改后台管理密码
harbor_admin_password: harbor12345
# harbor的内部数据库密码
database:
password: root123
# 修改harbor数据存储路径与日志存储路径,目录要先创建好并赋予777权限
data_volume: </span>/data/harbor-<span style="color: rgba(0, 0, 0, 1)">data
# 修改日志存放路径,默认路径为</span>/var/log/<span style="color: rgba(0, 0, 0, 1)">harbor
log:
local:
    localtion: </span>/data/harbor-log</pre>
</div>
<p>&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/121965/202006/121965-20200614160906277-1435370607.png"></p>
<p>&nbsp;&nbsp; &nbsp;</p>
<p><strong><span style="font-size: 18pt">&nbsp;第5步,安装harbor</span></strong></p>
<p>执行harbor安装脚本</p>
<div class="cnblogs_code">
<pre>cd /usr/local/<span style="color: rgba(0, 0, 0, 1)">harbor
.</span>/<span style="color: rgba(0, 0, 255, 1)">install</span>.<span style="color: rgba(0, 0, 255, 1)">sh</span></pre>
</div>
<p>&nbsp;</p>
<p>安装的时候如果出现下面的异常,是因为关闭防火墙导致,需要重启docker</p>
<div class="cnblogs_code">
<pre>ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:(iptables failed: iptables --<span style="color: rgba(0, 0, 255, 1)">wait</span> -t nat -I DOCKER -i br-61f0da3c6876 -j RETURN: iptables: No chain/target/match by that name.</pre>
</div>
<p>出现上面这种错误,要重启docker,然后重新安装harbor</p>
<div class="cnblogs_code">
<pre>systemctl daemon-<span style="color: rgba(0, 0, 0, 1)">reload
systemctl restart docker.service
cd </span>/usr/local/<span style="color: rgba(0, 0, 0, 1)">harbor
.</span>/<span style="color: rgba(0, 0, 255, 1)">install</span>.<span style="color: rgba(0, 0, 255, 1)">sh</span></pre>
</div>
<p>&nbsp;</p>
<p>安装成功后输出下面的信息:</p>
<p><img src="https://img2020.cnblogs.com/blog/121965/202006/121965-20200614105646058-444089892.png"></p>
<p>&nbsp;在浏览器地址输入:https://192.168.0.101:10443,打开harbor登录页面</p>
<p>用户名:admin,密码:harbor12345</p>
<p><img src="https://img2020.cnblogs.com/blog/121965/202006/121965-20200614161409882-466424001.png"></p>
<p>&nbsp;</p>
<p>&nbsp;登录成功后进入后台主页:</p>
<p><img src="https://img2020.cnblogs.com/blog/121965/202006/121965-20200614161441298-1883888445.png"></p>
<p>&nbsp;&nbsp;&nbsp;</p>
<p><strong><span style="font-size: 18pt">第6步,docker信任配置</span></strong></p>
<p>&nbsp;要让docker可以访问harbor,需要将harbor域名或IP设置为docker的受信任仓库,修改配置文件 /etc/docker/daemon.json ,增加docker受信任IP或域名。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">vi</span>/etc/docker/daemon.json</pre>
</div>
<p>&nbsp;</p>
<p>追加内容:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">insecure-registries</span><span style="color: rgba(128, 0, 0, 1)">"</span>: [<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">192.168.0.101:10080</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">]
}</span></pre>
</div>
<p>&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/121965/202006/121965-20200614115121282-1991518042.png"></p>
<p>&nbsp;</p>
<p>拷贝https证书文件harbor.crt到 /etc/docker/certs.d/serverIp 文件夹。每个docker都要拷贝证书文件。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">mkdir</span> –p /etc/docker/certs.d/<span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">0.101</span>
<span style="color: rgba(0, 0, 255, 1)">cp</span> /cert/harbor/harbor.crt/etc/docker/certs.d/<span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">0.101</span>/<span style="color: rgba(0, 0, 0, 1)">ca.crt
<span style="color: rgba(255, 0, 0, 1)"><strong>#注意,拷贝过去的证书文件名为 ca.crt&nbsp;
</strong></span></span></pre>
</div>
<p>&nbsp;</p>
<p>重启docker</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">#重启docker
systemctl daemon</span>-<span style="color: rgba(0, 0, 0, 1)">reload
systemctl restart docker.service</span></pre>
</div>
<p>&nbsp;</p>
<p>重启harbor</p>
<div class="cnblogs_code">
<pre>cd /usr/local/<span style="color: rgba(0, 0, 0, 1)">harbor
.</span>/<span style="color: rgba(0, 0, 0, 1)">prepare
docker</span>-<span style="color: rgba(0, 0, 0, 1)">compose down
docker</span>-compose up -d</pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;<strong><span style="font-size: 18pt">第7步,将本地业务镜像push到harbor</span></strong></p>
<p>首先在harbor中新建一个项目,项目名称为【eshop】</p>
<p><img src="https://img2020.cnblogs.com/blog/121965/202006/121965-20200614165631396-2104926765.png"></p>
<p>&nbsp;</p>
<p>&nbsp; 用docker登录harbor</p>
<div class="cnblogs_code">
<pre>docker login 192.168.0.101:10080 -u 用户名 -p 密码</pre>
</div>
<p>&nbsp;</p>
<p>登录成功输出以下信息:&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/121965/202006/121965-20200614161619335-2107583057.png"></p>
<p>&nbsp;</p>
<p>给本地镜像打上tag标记,<strong><span style="color: rgba(255, 0, 0, 1)">打标记的时候要加上项目名称</span></strong>。</p>
<div class="cnblogs_code">
<pre># docker tag 本地镜像名:版本号 ip:port/项目名称/<span style="color: rgba(0, 0, 0, 1)">远程镜像名:版本号,如果不加版本号表示最新版本
docker tag demo1.mvcone:v1.0.1 </span><span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">0.101</span>:<span style="color: rgba(128, 0, 128, 1)">10080</span>/eshop/<span style="color: rgba(0, 0, 0, 1)">demo1.mvcone:v1.0.1
# 上传镜像到harbor
docker push </span><span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">0.101</span>:<span style="color: rgba(128, 0, 128, 1)">10080</span>/eshop/demo1.mvconev:v1.0.1</pre>
</div>
<p>push成功输入以下信息:</p>
<p><img src="https://img2020.cnblogs.com/blog/121965/202006/121965-20200616165851646-763691178.png"></p>
<p>&nbsp;&nbsp;&nbsp;</p>
<p>在harbor后台管理中查看eshop项目下的镜像</p>
<p><img src="https://img2020.cnblogs.com/blog/121965/202006/121965-20200614170134298-1333256703.png"></p>
<p>&nbsp;&nbsp;</p>
<p>点击镜像名称,查看镜像版本号</p>
<p><img src="https://img2020.cnblogs.com/blog/121965/202006/121965-20200616172108043-500349350.png"></p>
<p>&nbsp;&nbsp;&nbsp;</p>
<p><strong><span style="font-size: 14pt">【上传镜像遇到的坑: 】</span></strong></p>
<p>如果不在harbor中新建项目,或者创建tag的时候不加项目名称,在上传镜像时会发生错误:received unexpected HTTP status: 500 Internal Server Error ,所以docker tag 打标签的时候要一定要加上项目名称。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">#push不加项目名称的镜像出现错误,下面是错误方法:
# docker tag 本地镜像名:v1.0.1 ip:port</span>/<span style="color: rgba(0, 0, 0, 1)">远程镜像名:v1.0.1
docker tag demo1.mvcone:v1.0.1 </span><span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">0.101</span>:<span style="color: rgba(128, 0, 128, 1)">10080</span>/<span style="color: rgba(0, 0, 0, 1)">demo1.mvcone:v1.0.1<br></span></pre>
<pre><span>docker push 192.168.0.101:10080/demo1.mvcone:v1.0.1</span></pre>
<pre><span style="color: rgba(0, 0, 0, 1)"><br>#应该这样写<br>docker tag demo1.mvcone:v1.0.1 192.168.0.101:10080/eshop/demo1.mvcone:v1.0.1
# 上传镜像到harbor
docker push </span><span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">0.101</span>:<span style="color: rgba(128, 0, 128, 1)">10080</span>/eshop/demo1.mvcone:v1.0.1</pre>
</div>
<p>&nbsp;</p>
<p>这样在push镜像时出现500 Internal Server Error错误:&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/121965/202006/121965-20200614170447892-4557530.png"></p>
<p>&nbsp;&nbsp;</p>
<p><strong><span style="font-size: 18pt">第8步,为刚才上传到harbor的镜像创建一个容器 &nbsp;</span></strong></p>
<p>eshop/demo1.mvcone镜像已经上传到harbor,现在要用eshop/demo1.mvcone镜像创建一个容器,测试一下容器是否跑得起来。</p>
<p>步骤:</p>
<p><strong>(1) 删除本地<strong>镜像</strong>&nbsp;192.168.0.101:10080/eshop/demo1.mvcone&nbsp;</strong></p>
<div class="cnblogs_code">
<pre>docker rmi <span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">0.101</span>:<span style="color: rgba(128, 0, 128, 1)">10080</span>/eshop/demo1.mvcone:v1.0.1</pre>
</div>
<p>&nbsp;</p>
<p><strong>(2)从harbor上 拉取eshop/demo1.mvcone 镜像到本地</strong></p>
<div class="cnblogs_code">
<pre>docker pull <span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">0.101</span>:<span style="color: rgba(128, 0, 128, 1)">10080</span>/eshop/demo1.mvcone:v1.<span style="color: rgba(128, 0, 128, 1)">0.1</span><span style="color: rgba(0, 0, 0, 1)">

#从harbor上拉取像镜要写全路径, IP地址:端口</span>/项目名称/镜像名:版本号</pre>
</div>
<p>&nbsp;</p>
<p><strong>(3) 创建 192.168.0.101:10080/eshop/demo1.mvcone 镜像的容器,以8001端口运行</strong></p>
<div class="cnblogs_code">
<pre>docker run -d --name my.eshop.demo1.mvcone -p <span style="color: rgba(128, 0, 128, 1)">8001</span>:<span style="color: rgba(128, 0, 128, 1)">50001</span> -v /appdata/mvcone <span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">0.101</span>:<span style="color: rgba(128, 0, 128, 1)">10080</span>/eshop/demo1.mvcone:v1.<span style="color: rgba(128, 0, 128, 1)">0.1</span></pre>
</div>
<p>--name 容器名&nbsp;</p>
<p>-d 后台运行容器</p>
<p>-p 参数:8001是docker对外暴露的端口,可以任意指定,50001是Dockerfile文件配置的docker内部运行端口,不可以随意指定。</p>
<p>-v 参数,数据卷,容器的数据存放路径。</p>
<p>192.168.0.101:10080/eshop/demo1.mvcone:v1.0.1 是镜像名</p>
<p>&nbsp;</p>
<p><strong>(4) 查看docker中是否运行着刚刚创建的容器</strong></p>
<div class="cnblogs_code">
<pre>docker ps </pre>
</div>
<p>&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/121965/202006/121965-20200616171728903-1529419968.png"></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp; 从截图上可以看出 my.ehop.demo1.mvcone 容器已经创建并于处运行状态。</p>
<p>&nbsp;</p>
<p><strong>(5) 用浏览器验证容器运行项目的效果</strong></p>
<p><img src="https://img2020.cnblogs.com/blog/121965/202006/121965-20200616171537700-47750008.png"></p>
<p>&nbsp;&nbsp; &nbsp;&nbsp;</p>
<p>&nbsp;<strong><span style="font-size: 18pt">第9步,harbor停止/重启/御载</span></strong></p>
<p>&nbsp;重启harbor:</p>
<div class="cnblogs_code">
<pre>cd /usr/local/<span style="color: rgba(0, 0, 0, 1)">harbor
docker</span>-<span style="color: rgba(0, 0, 0, 1)">compose down
.</span>/<span style="color: rgba(0, 0, 0, 1)">prepare   #配置文件有改动时需要执行
docker</span>-compose up -d</pre>
</div>
<p>&nbsp;</p>
<p>关闭harbor</p>
<div class="cnblogs_code">
<pre>cd /usr/local/<span style="color: rgba(0, 0, 0, 1)">harbor
docker</span>-compose down -v<br># 或者<br>docker-compose stop</pre>
</div>
<p>&nbsp;</p>
<p>卸载Harbor</p>
<div class="cnblogs_code">
<pre>cd /usr/local/<span style="color: rgba(0, 0, 0, 1)">harbor
docker</span>-<span style="color: rgba(0, 0, 0, 1)">compose stop
</span><span style="color: rgba(0, 0, 255, 1)">rm</span> -rf /usr/local/harbor</pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/yyee/p/13121272.html
頁: [1]
查看完整版本: centos 7离线安装harbor