ubuntu 安装harbor仓库
<h1>一、介绍</h1><ol>
<li>Harbor,是一个英文单词,意思是港湾,港湾是干什么的呢,就是停放货物的,而货物呢,是装在集装箱中的,说到集装箱,就不得不提到Docker容器,因为docker容器的技术正是借鉴了集装箱的原理。所以,Harbor正是一个用于存储Docker镜像的企业级Registry服务。</li>
<li>Registry是Dcoker官方的一个私有仓库镜像,可以将本地的镜像打标签进行标记然后push到以Registry起的容器的私有仓库中。企业可以根据自己的需求,使用Dokcerfile生成自己的镜像,并推到私有仓库中,这样可以大大提高拉取镜像的效率。</li>
</ol>
<p> </p>
<h1>二、Harbor核心组件解释</h1>
<ul>
<li><strong>Proxy</strong>:他是一个nginx的前端代理,代理Harbor的registry,UI, token等服务。</li>
<li><strong>db</strong>:负责储存用户权限、审计日志、Dockerimage分组信息等数据。</li>
<li><strong>UI</strong>:提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权。</li>
<li><strong>jobsevice</strong>:jobsevice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。</li>
<li><strong>Adminserver</strong>:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。</li>
<li><strong>Registry</strong>:镜像仓库,负责存储镜像文件。</li>
<li><strong>Log</strong>:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。</li>
</ul>
<p> </p>
<h1>三:Harbor和Registry的比较</h1>
<p>Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势。</p>
<p><br>1.提供分层传输机制,优化网络传输<br>Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。<br>2.提供WEB界面,优化用户体验<br>只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。<br>3.支持水平扩展集群<br>当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。<br>4.良好的安全机制<br>企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。<br>5.Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。</p>
<p> </p>
<h1>四:Harbor简单部署</h1>
<h2 data-spm-anchor-id="a2c4e.11153940.0.i5.f18d1752dXtgDJ">官方最小配置</h2>
<ul>
<li>2个cpu</li>
<li>4g内存</li>
<li>40g硬盘,因为是存储镜像的所以推荐硬盘大点</li>
</ul>
<p> </p>
<h2 id="3" data-spm-anchor-id="a2c4e.11153940.0.i4.f18d1752dXtgDJ">安装前配置</h2>
<p>在真正安装之前,我们还要安装下面这几个组件</p>
<ul data-spm-anchor-id="a2c4e.11153940.0.i11.f18d1752dXtgDJ">
<li>docker</li>
<li>docker-compose</li>
<li>python</li>
<li data-spm-anchor-id="a2c4e.11153940.0.i9.f18d1752dXtgDJ">openssl</li>
</ul>
<p data-spm-anchor-id="a2c4e.11153940.0.i8.f18d1752dXtgDJ"> </p>
<h3 data-spm-anchor-id="a2c4e.11153940.0.i8.f18d1752dXtgDJ">安装docker</h3>
<p data-spm-anchor-id="a2c4e.11153940.0.i8.f18d1752dXtgDJ">更新apt源,并添加https支持</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sudo</span> apt-get update && <span style="color: rgba(0, 0, 255, 1)">sudo</span> apt-get <span style="color: rgba(0, 0, 255, 1)">install</span> apt-transport-https ca-certificates curl software-properties-common -y</pre>
</div>
<p> </p>
<p>使用utc源添加GPG Key</p>
<div class="cnblogs_code">
<pre>curl -fsSL https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add </span></pre>
</div>
<p> </p>
<p>添加Docker-ce稳定版源地址</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sudo</span> add-apt-repository <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">deb https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable</span><span style="color: rgba(128, 0, 0, 1)">"</span></pre>
</div>
<p> </p>
<p>安装docker-ce</p>
<p>目前最新版本是19.03.1</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sudo</span> apt-<span style="color: rgba(0, 0, 0, 1)">get update
</span><span style="color: rgba(0, 0, 255, 1)">sudo</span> apt <span style="color: rgba(0, 0, 255, 1)">install</span> -y docker-ce=5:19.03.1~3-0~ubuntu-xenial</pre>
</div>
<p> </p>
<h3>安装docker-compose</h3>
<p>参考官方链接:https://docs.docker.com/compose/install/</p>
<p> </p>
<p>运行此命令下载docker compose的当前稳定版本:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sudo</span> curl -L <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)</span><span style="color: rgba(128, 0, 0, 1)">"</span> -o /usr/local/bin/docker-compose</pre>
</div>
<p> </p>
<p>对二进制文件应用可执行权限</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">chmod</span> +x /usr/local/bin/docker-compose</pre>
</div>
<p> </p>
<p>由于ubuntu 16.04,默认已经有了python3,openssl也已经安装好了。</p>
<div class="cnblogs_code">
<pre>root@ubuntu:~# <span style="color: rgba(255, 0, 0, 1)">dpkg -l |grep</span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)"> openssl</span>
iilibgnutls</span>-openssl27:amd64 <span style="color: rgba(128, 0, 128, 1)">3.4</span>.<span style="color: rgba(128, 0, 128, 1)">10</span>-4ubuntu1.<span style="color: rgba(128, 0, 128, 1)">4</span> amd64 GNU TLS library -<span style="color: rgba(0, 0, 0, 1)"> OpenSSL wrapper
iiopenssl </span><span style="color: rgba(128, 0, 128, 1)">1.0</span>.2g-1ubuntu4.<span style="color: rgba(128, 0, 128, 1)">10</span> amd64 Secure Sockets Layer toolkit - cryptographic utility</pre>
</div>
<p> </p>
<h3>下载Harbor离线包</h3>
<p>https://github.com/vmware/harbor/releases<br>安装有两种方式,一种是off-line ,一种是on-line,即离线和在线安装,离线安装需要下载的安装包较大,在线安装下载的安装包很小,课题根据自己的情况选择,我选择的是1.8.1版本</p>
<p> </p>
<p>下载在线安装包</p>
<div class="cnblogs_code">
<pre>wget https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-online-installer-v1.8.1.tgz</pre>
</div>
<p> </p>
<p>如果无法访问google,我已经上传到百度网盘了,可自行下载</p>
<p> </p>
<p>链接:https://pan.baidu.com/s/1mRtaFNfYViz5xywYB9GnXw <br>提取码:xsc0 <br><br></p>
<h2>安装Harbor</h2>
<p>解压安装包</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">tar</span> zxvf harbor-online-installer-v1.<span style="color: rgba(128, 0, 128, 1)">8.1</span>.tgz -C /usr/src/<span style="color: rgba(0, 0, 0, 1)">
cd </span>/usr/src/harbor</pre>
</div>
<p> </p>
<p>编辑配置文件</p>
<div class="cnblogs_code">
<pre>vim harbor.yml</pre>
</div>
<p>修改hostname为本机ip地址</p>
<div class="cnblogs_code">
<pre><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)">10.122</span></pre>
</div>
<p> </p>
<p>其它参数,可以根据实际情况修改,去除多余的注释和空行,配置文件如下:</p>
<div class="cnblogs_code">
<pre>root@ubuntu:/usr/src/harbor# <span style="color: rgba(255, 0, 0, 1)">cat harbor.yml |grep -v "^#"|grep -v "#"|grep -v "^$"</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)">10.122</span><span style="color: rgba(0, 0, 0, 1)">
http:
port: </span><span style="color: rgba(128, 0, 128, 1)">80</span><span style="color: rgba(0, 0, 0, 1)">
harbor_admin_password: Harbor12345
database:
password: root123
data_volume: </span>/<span style="color: rgba(0, 0, 0, 1)">data
clair:
updaters_interval: </span><span style="color: rgba(128, 0, 128, 1)">12</span><span style="color: rgba(0, 0, 0, 1)">
http_proxy:
https_proxy:
no_proxy: </span><span style="color: rgba(128, 0, 128, 1)">127.0</span>.<span style="color: rgba(128, 0, 128, 1)">0.1</span><span style="color: rgba(0, 0, 0, 1)">,localhost,core,registry
jobservice:
max_job_workers: </span><span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">
chart:
absolute_url: disabled
log:
level: </span><span style="color: rgba(0, 0, 255, 1)">info</span><span style="color: rgba(0, 0, 0, 1)">
rotate_count: </span><span style="color: rgba(128, 0, 128, 1)">50</span><span style="color: rgba(0, 0, 0, 1)">
rotate_size: 200M
location: </span>/var/log/<span style="color: rgba(0, 0, 0, 1)">harbor
_version: </span><span style="color: rgba(128, 0, 128, 1)">1.8</span>.<span style="color: rgba(128, 0, 128, 1)">0</span></pre>
</div>
<p> </p>
<p>之后直接执行</p>
<div class="cnblogs_code">
<pre>./<span style="color: rgba(0, 0, 255, 1)">install</span>.<span style="color: rgba(0, 0, 255, 1)">sh</span></pre>
</div>
<p> </p>
<p>出现以下提示,表示安装成功</p>
<div class="cnblogs_code">
<pre>✔ ----Harbor has been installed and started successfully.----<span style="color: rgba(0, 0, 0, 1)">
Now you should be able to visit the admin portal at http:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">192.168.10.122. </span>
For <span style="color: rgba(0, 0, 255, 1)">more</span> details, please visit https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">github.com/goharbor/harbor .</span></pre>
</div>
<p> </p>
<p>之后如果你想修改某一个配置比如你要把域名修改一下,我是这么做的先修改上面harbor.cfg这个文件,之后重新执行install.sh这个文件就可以了</p>
<p> </p>
<h2>访问页面</h2>
<div class="cnblogs_code">
<pre>http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">192.168.10.122</span></pre>
</div>
<p> </p>
<p>使用默认的账号:<span style="color: rgba(255, 0, 0, 1)">admin</span>,密码:<span style="color: rgba(255, 0, 0, 1)">Harbor12345</span>登录验证</p>
<p><img src="https://img2018.cnblogs.com/blog/1341090/201908/1341090-20190809121610327-1511476795.png" alt=""></p>
<p> </p>
<p>登录成功之后,效果如下:</p>
<p> <img src="https://img2018.cnblogs.com/blog/1341090/201908/1341090-20190809121701107-507176485.png" alt=""></p>
<p> </p>
<h1 id="5" data-spm-anchor-id="a2c4e.11153940.0.i13.f18d1752dXtgDJ">五、测试推送镜像</h1>
<p>登录到另外一台服务器,确保docker已经安装好了。</p>
<h2>本地配置仓库地址</h2>
<p>由于默认的harbor,已经创建了一个公开项目 libary。</p>
<div class="cnblogs_code">
<pre>vim /etc/docker/daemon.json</pre>
</div>
<p>内容如下:</p>
<div class="cnblogs_code">
<pre>{<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.10.122</span><span style="color: rgba(128, 0, 0, 1)">"</span>]}</pre>
</div>
<p> </p>
<p>接着重启服务</p>
<div class="cnblogs_code">
<pre>systemctl restart docker</pre>
</div>
<p> </p>
<h2>推送镜像</h2>
<p>登录仓库,admin密码还是<span style="color: rgba(255, 0, 0, 1)">Harbor12345</span></p>
<div class="cnblogs_code">
<pre>root@k8s-node1:~# <span style="color: rgba(255, 0, 0, 1)">docker login 192.168.10.122</span><span style="color: rgba(0, 0, 0, 1)">
Username: <span style="color: rgba(255, 0, 0, 1)">admin</span>
Password:
WARNING</span>! Your password will be stored unencrypted <span style="color: rgba(0, 0, 255, 1)">in</span> /root/.docker/<span style="color: rgba(0, 0, 0, 1)">config.json.
Configure a credential helper to remove this warning. See
https:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">docs.docker.com/engine/reference/commandline/login/#credentials-store</span>
<span style="color: rgba(0, 0, 0, 1)">
Login Succeeded</span></pre>
</div>
<p> </p>
<p>现在下载一个镜像alpine</p>
<div class="cnblogs_code">
<pre>docker pull alpine</pre>
</div>
<p> </p>
<p>给镜像打tag</p>
<div class="cnblogs_code">
<pre>docker tag alpine:latest <span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">10.122</span>/library/alpine</pre>
</div>
<p> </p>
<p>推送镜像</p>
<div class="cnblogs_code">
<pre>root@k8s-node1:~# <span style="color: rgba(255, 0, 0, 1)">docker push 192.168.10.122/library/</span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)">alpine</span>
The push refers to repository [</span><span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">10.122</span>/library/<span style="color: rgba(0, 0, 0, 1)">alpine]
1bfeebd65323: Pushed
latest: digest: sha256:57334c50959f26ce1ee025d08f136c2292c128f84e7b229d1b0da5dac89e9866 size: </span><span style="color: rgba(128, 0, 128, 1)">528</span></pre>
</div>
<p> </p>
<p>pull一次仓库上镜像的pulls就会加一次,可以在web界面上看的</p>
<p><img src="https://img2018.cnblogs.com/blog/1341090/201908/1341090-20190809123632082-1119107725.png" alt=""></p>
<p> </p>
<p>增加开机启动</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">vi</span> /etc/rc.local</pre>
</div>
<p>最后一行添加</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">#harbor start
cd </span>/usr/src/harbor && docker-compose up -d</pre>
</div>
<p> </p>
<h2><span style="color: rgba(0, 0, 0, 1)"><strong>注意事项</strong></span></h2>
<p><span style="color: rgba(255, 0, 0, 1)"><strong>公开的项目,推送镜像时,docker必须要登录。</strong><br></span></p>
<p><span style="color: rgba(255, 0, 0, 1)"><strong>下载镜像时,无须登录。</strong></span></p>
<p> </p>
<p><span style="color: rgba(255, 0, 0, 1)"><strong>非公开项目,下载和推送,必须docker登录才行。 </strong></span></p>
<p> </p>
<p>本文参考链接:</p>
<p>https://blog.51cto.com/11093860/2117805</p>
<p>https://yq.aliyun.com/articles/637155</p>
<p> </p><br><br>
来源:https://www.cnblogs.com/xiao987334176/p/11326467.html
頁:
[1]