午未 發表於 2024-6-12 08:56:00

手把手教你搭建Docker私有仓库Harbor

<h4 id="1什么是docker私有仓库">1、什么是Docker私有仓库</h4>
<p>Docker私有仓库是用于存储和管理Docker镜像的私有存储库。Docker默认会有一个公共的仓库Docker Hub,而与Docker Hub不同,私有仓库是受限访问的,只有授权用户才能够上传、下载和管理其中的镜像。这种私有仓库可以部署在本地云环境中,用于组织内部开发、测试和生产环境中的容器镜像管理。保证数据安全性。</p>
<h4 id="2docker有哪些私有仓库">2、Docker有哪些私有仓库</h4>
<p><strong>以下是一些常见的Docker私有仓库:</strong></p>
<ul>
<li><strong>Harbor</strong>:作为一个企业级的Docker Registry服务,Harbor提供了安全、可信赖的镜像存储和管理功能。它支持RBAC权限控制、镜像复制、镜像签名、漏洞扫描等功能。</li>
<li><strong>Docker Trusted Registry (DTR)</strong>:由Docker官方推出的企业级Docker私有仓库服务,与Docker Engine紧密集成,支持高度的安全性和可靠性。</li>
<li><strong>Portus</strong>:一个开源的Docker镜像管理和认证服务,提供用户管理、团队管理、镜像审核等功能,与Docker Registry兼容。</li>
<li><strong>Nexus Repository Manager</strong>:虽然主要是用于构建和管理Java组件,但也可以用作Docker私有仓库。它具有强大的存储管理和权限控制功能。</li>
<li><strong>GitLab Container Registry</strong>:GitLab集成了容器注册表功能,允许您存储、管理和分发Docker镜像。这是GitLab自带的功能,无需额外部署。</li>
<li><strong>AWS Elastic Container Registry (ECR)</strong>:如果使用AWS云服务,可以考虑使用AWS ECR作为私有仓库。它与AWS的其他服务集成紧密,对AWS用户来说是一个方便的选择。</li>
</ul>
<p>本篇使用Harbor搭建Docker私有仓库。</p>
<h4 id="3harbor简介">3、Harbor简介</h4>
<p>Harbor是一个开源的企业级Docker Registry服务,它提供了一个安全、可信赖的仓库来存储和管理Docker镜像。Harbor翻译为中文名称为"庇护;居住;"。可以理解为是Docker镜像的"居住环境"或者是镜像的"庇护所"。Harbor最初由VMware公司开发,旨在解决企业级Docker镜像管理的安全和可信任性问题。VMware于2016年发布,在2017年,VMware将Harbor开源,这使得更广泛的社区和组织可以自由地使用和贡献代码。Harbor是一个成熟、功能丰富且安全可靠的企业级Docker Registry服务,为企业容器化应用的部署和管理提供了强大的支持。</p>
<p>Harbor官网地址:Harbor (goharbor.io)</p>
<p>Github开源地址:https://github.com/goharbor/harbor</p>
<h4 id="4harbor下载">4、Harbor下载</h4>
<h5 id="41通过linux命令下载">4.1、通过Linux命令下载</h5>
<pre><code class="language-sh">wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz
</code></pre>
<h5 id="42github下载">4.2、GitHub下载</h5>
<p>下载地址:https://github.com/goharbor/harbor/releases 下载离线版本</p>
<p><img src="https://img2024.cnblogs.com/blog/2661519/202406/2661519-20240611214026306-443407414.png"></p>
<p>下载成功后,把包通过 <code>xftp</code> 上传到服务器。</p>
<h5 id="43解压">4.3、解压</h5>
<p>解压文件</p>
<pre><code class="language-sh">tar -zxvf harbor-offline-installer-v2.10.0.tgz
</code></pre>
<h4 id="5启动harbor">5、启动Harbor</h4>
<h5 id="51修改配置文件">5.1、修改配置文件</h5>
<p>复制<code>harbor.yml.tmpl</code> 文件并重命名为<code>harbor.yml</code>修改此配置文件,需要设置hostname、端口、数据库密码等。</p>
<pre><code class="language-sh">cp harbor.yml.tmpl harbor.yml #拷贝

vim harbor.yml
</code></pre>
<p>修改配置文件:</p>
<pre><code class="language-yaml">#修改hostname的值,如果没有域名就使用本机IP地址
hostname: 192.168.42.133

#配置启动端口号
# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 5000

# 如果没有申请证书,需要隐藏https
#https:
# https port for harbor, default is 443
#port: 443
# The path of cert and key files for nginx
#certificate: /your/certificate/path
#private_key: /your/private/key/path

#启动成功后,admin用户登录密码
# Remember Change the admin password from UI after launching Harbor.
harbor_admin_password: AdminHarbor12345

</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/2661519/202406/2661519-20240611214045498-1799693599.png"></p>
<h5 id="52启动">5.2、启动</h5>
<p>配置文件修改成功后,执行 <code>install.sh</code> 脚本进行安装harbor</p>
<pre><code class="language-sh">./install.sh
</code></pre>
<p>启动报错:</p>
<pre><code class="language-ABAP">: checking if docker is installed ...

Note: docker version: 26.1.3

: checking docker-compose is installed ...
/opt/harbor/common.sh: line 119: docker-compose: command not found
✖ Failed to parse docker-compose version.
</code></pre>
<p>可以看到,该服务器安装的 <code>docker</code> 没有安装 <code>docker-compose</code> 插件</p>
<h5 id="53安装docker-compose">5.3、安装docker-compose</h5>
<p>进入<code>docker-compose</code> 官网下载执行文件,地址: https://github.com/docker/compose 下载成功后,把可执行文件加入<code>Linux</code> 系统命令目录</p>
<pre><code class="language-sh">cp docker-compose-linux-x86_64 /usr/local/bin/
</code></pre>
<p>重命名:</p>
<pre><code class="language-sh">mv docker-compose-linux-x86_64 docker-compose
</code></pre>
<p>授权:</p>
<pre><code class="language-sh">chmod +x /usr/local/bin/docker-compose
</code></pre>
<p>执行命令查看是否安装成功:</p>
<pre><code class="language-sh">docker-compose --version
</code></pre>
<p>如果需要卸载,直接删除即可:</p>
<pre><code class="language-sh">rm -f /usr/bin/docker-compose
</code></pre>
<h5 id="54再次启动">5.4、再次启动</h5>
<p>再次执行 <code> ./install.sh</code></p>
<p><img src="https://img2024.cnblogs.com/blog/2661519/202406/2661519-20240611214106240-1578525632.png"></p>
<p>提示安装成功。接下来就可以访问Harbor了。访问IP+端口:http://192.168.42.133:5000<br>
<img src="https://img2024.cnblogs.com/blog/2661519/202406/2661519-20240611214112613-2061210179.jpg"></p>
<p>访问成功,由于Harbor是通过docker管理的,所以启动非常方便。如果首页访问成功说明Docker私有仓库已经部署成功了。</p>
<h4 id="6harbor-web页面操作说明">6、Harbor Web页面操作说明</h4>
<p>默认用户名是admin,密码是启动时设置的密码:<code>AdminHarbor12345</code></p>
<p><img src="https://img2024.cnblogs.com/blog/2661519/202406/2661519-20240611214133810-785791494.jpg"></p>
<p>登录成功进入主页面了。从系统首页可以看到系统分为三个菜单:项目、日志、系统管理。</p>
<h5 id="61项目">6.1、项目</h5>
<p>项目管理顾名思义就是用来管理项目的。可以为每一个开发项目创建一个私有项目库,然后把Docker镜像存储到指定的项目中,为每个项目实现项目镜像隔离。创建项目的时候,Harbor提供了公开库(public repository)和私有库(private repository)两种类型的镜像存储空间。</p>
<p><img src="https://img2024.cnblogs.com/blog/2661519/202406/2661519-20240611214144886-1141765397.png"></p>
<p>通过详情信息可以看到:<strong>公开库中的镜像是对所有用户可见和可访问的,任何人都可以查看和拉取其中的镜像。而私有库中的镜像则需要登录才能访问控制,只有被授权的用户或团队才能够查看、拉取和推送镜像。</strong> 可以根据需要创建相关的项目。</p>
<p><img src="https://img2024.cnblogs.com/blog/2661519/202406/2661519-20240611214156751-2127056572.png"></p>
<p>项目创建成功后,可以点击进入项目。在里面可以为每个项目单独设置不同的配置信息。可以为每一个项目添加成员信息。</p>
<p><img src="https://img2024.cnblogs.com/blog/2661519/202406/2661519-20240611214238457-1667624320.png"></p>
<p>角色权限说明:</p>
<ul>
<li><strong>项目管理员(Project Administrator):</strong>拥有项目的最高权限,可以对项目进行全面管理,包括创建和删除项目、管理项目成员和权限、配置项目属性、查看项目日志等。</li>
<li><strong>维护人员(Maintainer):</strong>类似于项目管理员,但权限稍低,通常用于协助管理项目,可以进行项目的部分管理操作,如添加和删除镜像、配置镜像的复制和同步规则等。</li>
<li><strong>开发者(Developer):</strong>具有对项目中镜像仓库的读写权限,可以拉取、推送和删除镜像,以及管理部分项目配置,但不能进行项目管理操作。</li>
<li><strong>访客(Guest):</strong>只具有对项目中镜像仓库的只读权限,可以查看镜像和元数据,但无法对镜像进行修改或删除操作。通常用于分享项目或镜像给外部团队或用户。</li>
<li><strong>受限访客(Restricted Guest):</strong>是一种更加受限的访客角色,通常用于提供给外部用户或系统,具有对项目中镜像仓库的只读权限,但可能会限制访问的部分内容或功能。</li>
</ul>
<p>在右上角显示推送命令,可以通过提示命令进行docker镜像推送。</p>
<p><img src="https://img2024.cnblogs.com/blog/2661519/202406/2661519-20240611214316637-745340052.png"></p>
<h5 id="62日志">6.2、日志</h5>
<p>日志菜单就是记录用户操作日志信息的。</p>
<p><img src="https://img2024.cnblogs.com/blog/2661519/202406/2661519-20240611214330333-803321256.jpg"></p>
<h5 id="63系统管理">6.3、系统管理</h5>
<p>系统管理主要用来管理Harbor用户人员信息、镜像仓库的各种配置、权限和系统设置。</p>
<p><img src="https://img2024.cnblogs.com/blog/2661519/202406/2661519-20240611214340432-221060492.png"></p>
<h4 id="7docker命令使用私有仓库">7、Docker命令使用私有仓库</h4>
<h5 id="71登录">7.1、登录</h5>
<p>首先登录私有仓库地址:</p>
<pre><code class="language-sh">docker login-u admin -p AdminHarbor12345 http://192.168.42.133:5000
</code></pre>
<p>会报错:</p>
<pre><code class="language-sh">WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get "https://192.168.42.133:5000/v2/": proxyconnect tcp: dial tcp 192.168.65.7:3128: connect: connection refused

</code></pre>
<p>docker认为这个地址是不安全的,所以需要在docker守护进程配置文件中把该地址加入安全范围。</p>
<pre><code class="language-sh">{
"registry-mirrors": ["https://ejes884z.mirror.aliyuncs.com"],
"log-driver":"json-file",
"log-opts": {"max-size":"1g", "max-file":"3"},
"live-restore": true,
"insecure-registries": ["192.168.42.133:5000"]
}

# insecure-registries 不安全的注册表配置一些不安全的地址信息,让Docker认为是安全的。多个地址使用 "," 分割
</code></pre>
<p>加入配置成功后,再次登录。</p>
<pre><code class="language-sh">WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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
</code></pre>
<p>通过输出发现登录成功。认证信息存储在 <code>~/.docker/config.json</code> 文件中,只要登录信息存在,登录会一直生效不需要每次推送拉取之前都登录。</p>
<h5 id="72推送">7.2、推送</h5>
<p>重新命名镜像名称</p>
<pre><code class="language-sh">docker tag 94543a6c1aef 192.168.42.133:5000/blog_project/nginx:1.26.0
</code></pre>
<p>推送</p>
<pre><code class="language-sh">docker push 192.168.42.133:5000/blog_project/nginx:1.26.0
</code></pre>
<p>查看Harbor仓库,推送成功。</p>
<p><img src="https://img2024.cnblogs.com/blog/2661519/202406/2661519-20240611214358351-112488840.png"></p>
<h5 id="73拉取">7.3、拉取</h5>
<p>通过另一台服务器,使用 <code>docker pull </code>拉取镜像从私有仓库拉取镜像:</p>
<pre><code class="language-sh">docker pull 192.168.42.133:5000/blog_project/nginx:1.26.0
</code></pre>
<p>拉取成功</p>
<p><img src="https://img2024.cnblogs.com/blog/2661519/202406/2661519-20240611214409894-2070979948.png"></p>
<p>查看下载数,发现已经更新了。</p>
<p><img src="https://img2024.cnblogs.com/blog/2661519/202406/2661519-20240611214426723-1908966340.png"></p>
<h4 id="8总结">8、总结</h4>
<p>关于使用Harbor搭建Docker私有仓库就介绍完毕了,如果大家有兴趣可以查看一下其他搭建方式,然后在它们之间进行对比一下看看那种方式更适合。本篇为入门级Harbor的基础使用,其他功能可以自行研究。</p><br><br>
来源:https://www.cnblogs.com/sowler/p/18242819
頁: [1]
查看完整版本: 手把手教你搭建Docker私有仓库Harbor