Harbor 构建
<h2>一、安装环境介绍</h2>
<p>安装环境:</p>
<pre><code class="language-bash">Linux 服 务 器: 172.16.3.239
Linux 客 户 端: 172.16.3.238
Windows 客户端: 192.168.16.30</code></pre>
<p>操作系统:</p>
<pre><code class="language-bash">CentOS Linux release 7.7.1908 (Core)
CentOS 7 自带的Python版本是:2.7.5</code></pre>
<pre><code class="language-bash">Python3.6安装方法一:
https://www.showdoc.cc/557523996513244?page_id=3292859228145658
Python3.6安装方法二:
离线包安装,需先下载好离线安装包
rpm -ivh *.rpm</code></pre>
<p>docker版本:</p>
<pre><code class="language-bash">docker-ce-18.03.1 (已验证)
docker-ce-19.03.6 (已验证,当前最新稳定版)</code></pre>
<p>docker-ce18.03.1 离线安装包及依赖包:</p>
<pre><code class="language-bash">audit-libs-python-2.8.5-4.el7.x86_64.rpm
checkpolicy-2.5-8.el7.x86_64.rpm
container-selinux-2.107-3.el7.noarch.rpm
docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm
libcgroup-0.41-21.el7.x86_64.rpm
libseccomp-2.3.1-3.el7.x86_64.rpm
libsemanage-python-2.5-14.el7.x86_64.rpm
pigz-2.3.3-1.el7.centos.x86_64.rpm
policycoreutils-python-2.5-33.el7.x86_64.rpm
python-IPy-0.75-6.el7.noarch.rpm
setools-libs-3.3.8-4.el7.x86_64.rpm</code></pre>
<p>docker-ce-19.03.6 离线安装包及依赖包:</p>
<pre><code class="language-bash">audit-libs-python-2.8.5-4.el7.x86_64.rpm
checkpolicy-2.5-8.el7.x86_64.rpm
containerd.io-1.2.10-3.2.el7.x86_64.rpm
container-selinux-2.107-3.el7.noarch.rpm
docker-ce-19.03.6-3.el7.x86_64.rpm
docker-ce-cli-19.03.6-3.el7.x86_64.rpm
libcgroup-0.41-21.el7.x86_64.rpm
libseccomp-2.3.1-3.el7.x86_64.rpm
libsemanage-python-2.5-14.el7.x86_64.rpm
policycoreutils-python-2.5-33.el7.x86_64.rpm
python-IPy-0.75-6.el7.noarch.rpm
setools-libs-3.3.8-4.el7.x86_64.rpm</code></pre>
<p>docker-compose 版本:</p>
<pre><code class="language-bash">docker-compose-1.22.0</code></pre>
<p>Harbor版本:</p>
<pre><code class="language-bash">harbor-offline-installer-v1.2.0 (已验证)
harbor-offline-installer-v1.10.1 (已验证,当前最新稳定版)</code></pre>
<p>说明:</p>
<pre><code class="language-bash">harbor-offline-installer-v1.2.0.tgz,CentOS7自带的Python2.7.5就支持安装;
harbor-offline-installer-v1.10.1.tgz,CentOS7需python3.6及以上版本才能支持安装</code></pre>
<h2>二、Harbor简单介绍</h2>
<p>以Docker为代表的容器技术的出现,改变了传统的交付方式。通过把业务及其依赖的环境打包进Docker镜像,解决了开发环境和生产环境的差异问题,提升了业务交付的效率。如何高效地管理和分发Docker镜像?是众多企业需要考虑的问题。
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,可以用来构建企业内部的Docker镜像仓库。
Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。</p>
<h2>三、安装步骤</h2>
<h3>1、升级CentOS 7</h3>
<pre><code class="language-bash">yum update -y</code></pre>
<h3>2、上传docker安装包并安装</h3>
<pre><code class="language-bash">yum install * 或 rpm -ivh *</code></pre>
<p>设置随机启动</p>
<pre><code class="language-bash">systemctl enable docker</code></pre>
<p>启动服务</p>
<pre><code class="language-bash">systemctl start docker</code></pre>
<p>关闭防火墙</p>
<pre><code class="language-bash">systemctl stop firewalld</code></pre>
<p>关闭防火墙随机启动</p>
<pre><code class="language-bash">system diable firewalld</code></pre>
<p>配置阿里云加速</p>
<pre><code class="language-bash">cp /lib/systemd/system/docker.service /etc/systemd/system/
chmod +x /etc/systemd/system/docker.service
vim /etc/systemd/system/docker.service,在后面添加 --registry-mirror=... 这一行,完整内容如下:
ExecStart=/usr/bin/dockerd --registry-mirror=https://dekn3ozn.mirror.aliyuncs.com</code></pre>
<p>重新加载配置文件</p>
<pre><code class="language-bash">systemctl daemon-reload</code></pre>
<p>重启docker</p>
<pre><code class="language-bash">systemctl restart docker</code></pre>
<p>安装docker-compose</p>
<pre><code class="language-bash">cp docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-compose</code></pre>
<h3>4、下载Harbor安装包</h3>
<p><a href="https://github.com/goharbor/harbor/releases">https://github.com/goharbor/harbor/releases</a></p>
<h3>5、上传并解压Harbor安装包</h3>
<pre><code class="language-bash">tar -zxvf harbor-offline-installer-v1.8.6.tgz -C /usr/local/</code></pre>
<h3>6、配置Harbor</h3>
<pre><code class="language-bash">cd /usr/local/harbor
vim harbor.cfg</code></pre>
<p>注意:
Harbor v1.2.0 版本的配置文件 harbor.cfg 必选项参数如下:</p>
<pre><code class="language-bash">hostname = hub.zyzh.com
ui_url_protocol = https
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
harbor_admin_password: Harbor310012
说明:hostname 目标的主机名或者完全限定域名</code></pre>
<p>Harbor v1.10.1 版本的配置文件 harbor.yml 必选项参数如下:</p>
<pre><code class="language-bash">hostname: hub.zyzh.com
http:
port: 80
https:
port: 443
certificate: /data/cert/server.crt
private_key: /data/cert/server.key
harbor_admin_password: Harbor310012</code></pre>
<h3>7、创建https证书以及配置相关目录权限</h3>
<pre><code class="language-bash">mkdir -pv /data/cert</code></pre>
<p>依次执行,根据提示信息,完成相应的配置</p>
<pre><code class="language-bash">openssl genrsa -des3 -out server.key 2048
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key #证书退密钥,在使用时不需要输入密钥
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt</code></pre>
<p>把证书移至证书相关目录</p>
<pre><code class="language-bash">mv server* /data/cert</code></pre>
<h3>8、配置主机名与IP对应关系</h3>
<p>在服务器配置</p>
<pre><code class="language-bash">echo '172.16.3.239 hub.zyzh.com' > /etc/hosts</code></pre>
<p>在Linux客户端配置</p>
<pre><code class="language-bash">echo '172.16.3.239 hub.zyzh.com' > /etc/hosts</code></pre>
<p>在Windows客户端配置</p>
<pre><code class="language-bash">c:\windows\system32\drivers\etc\hosts 添加如下行:
172.16.3.239 hub.zyzh.com
注意:win10企业版仅一行时有效。</code></pre>
<h3>9、安装harbor</h3>
<pre><code class="language-bash">cd /usr/local/harbor
./install</code></pre>
<h3>9、在Windows客户端访问harbor进行设置</h3>
<pre><code class="language-bash">访问URL: https://172.16.3.239
输入用户名/密码:admin/passwd。新版在/usr/local/harbor/harbor.yml(harbor.cfg老版v1.2.0)中配置;</code></pre>
<p>创建项目</p>
<pre><code class="language-bash">创建用户和密码:zysoft/pwd
创建项目:以用户zysoft登录,创建项目相关的私有仓库easytong</code></pre>
<h3>10、在服务器端上传镜像至仓库</h3>
<p>添加访问认证权限</p>
<pre><code class="language-bash">echo '{ "insecure-registries":["hub.zyzh.com"] }' > /etc/docker/daemon.json</code></pre>
<p>重启docker、harbor服务</p>
<pre><code class="language-bash">systemctl restart docker
docker-compose -f /usr/local/harbor/docker-compose start</code></pre>
<p>上传镜至私有仓库,需先登录认证通过后,才能上传镜像。</p>
<p>登录认证:</p>
<pre><code class="language-bash">docker login hub.zyzh.com</code></pre>
<p>上传镜像:</p>
<pre><code class="language-bash">docker push hub.zyzh.com/easytong/tomcat:v1.0</code></pre>
<p>查看harbor仓库中镜像</p>
<pre><code class="language-bash">以zysoft用户登录harbor仓库,在harbor界面上查看上传的镜像信息。</code></pre>
<h3>11、在Linux客户端使用</h3>
<p>添加访问认证权限</p>
<pre><code class="language-bash">echo '{ "insecure-registries":["hub.zyzh.com"] }' > /etc/docker/daemon.json</code></pre>
<p>重启docker服务</p>
<pre><code class="language-bash">systemctl restart docker</code></pre>
<p>在客户端使用时,要从镜像他说下载镜像使用时,请先进行登录验证。</p>
<p>在客户端登录认证:</p>
<pre><code class="language-bash">docker login hub.zyzh.com</code></pre>
<p>下载镜像</p>
<pre><code class="language-bash">docker pull hub.zyzh.com/easytong/tomcat:v1.0
docker images</code></pre>
<p>下载镜像后使用:</p>
<pre><code class="language-bash">docker run --name tomcat -d -p 80:8080 hub.zyzh.com/easytong/tomcat:v1.0</code></pre>
<p>在Windows客户端访问容器。</p>
<p>harbor随机启动设置
将 harbor 配成 systemd 的 service,添加配置文件 /usr/lib/systemd/system/harbor.service,内容如下:</p>
<pre><code class="language-bash">[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/local/bin/docker-compose -f {{ harbor_install_path }}/harbor/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f {{ harbor_install_path }}/harbor/docker-compose.yml down
[Install]
WantedBy=multi-user.target</code></pre>
<p>其中 {{ harbor_install_path }} 换成自己的 harbor 安装路径。
docker-compose 的绝对路径,请通过 which docker-compose 查看。</p>
<p>然后启动该项服务:</p>
<pre><code class="language-bash">systemctl enable harbor
systemctl start harbor</code></pre>
<hr />
<p>问题汇总:
1、查看 harbor 目录下的 docker-compose.yml 会发现,所有的 containers 都配置了 restart: always:
这表示所有的容器在意外关闭后都会自动重启,比如 docker 重启或服务器重启。(手动 stop 不会自动重启)
但是我在手动运行 docker-compose up -d,然后重启服务器后,发现有几个 container 并没有自动重启。
【解决办法】按上述配置harbor.service服务后,systemctl restart/stop/status/start,不是随机启动
问题都得到解决。
其它说明:
--restart=on-failure:5 ,当容器退出代码不为0时,最多重启5次, 有的时候可以设置重启次数,对于一些启动失败的container,如果用always,会不断地重启。</p>
<p>参考资源:
Harbor介绍
<a href="https://cloud.tencent.com/developer/article/1404719">https://cloud.tencent.com/developer/article/1404719</a>
Harbor使用手册
<a href="https://www.iteye.com/blog/m635674608-2358362">https://www.iteye.com/blog/m635674608-2358362</a>
harbor.service服务设置
<a href="https://www.cnblogs.com/kirito-c/p/11145881.html">https://www.cnblogs.com/kirito-c/p/11145881.html</a></p>