Harbor 环境搭建笔记
作为新手,在搭建 Harbor 环境的过程中,我参考了大量资料,学到了很多宝贵的知识,但也遇到了不少挑战。虽然目前这套环境仅在测试环境中成功运行,但仍有许多细节需要完善。记录这些经验不仅有助于个人学习,也希望能与技术爱好者们共同交流,欢迎各位大佬指出任何不准确之处。
目录
安装Harbor仓库
1、安装Harbor前的基本思路和环境
2、安装Docker-Compose服务
3、部署Harbor服务
3.1 下载Harbor软件包(源码安装)
3.2 解压
3.3 修改配置文件
3.4 创建并且启动Docker容器
3.5 测试
4、重新加载配置文件
Harbor仓库基础使用
使用 HTTP 发布镜像到 Harbor
①添加用户构建项目
②发布镜像到Harbor
③从Harbor中拉取镜像
容器运行的基础使用
远程主机下载镜像
一、安装Harbor仓库
1.安装Harbor前的基本思路和环境
操作系统:确保你使用的是支持的CentOS版本(例如7.x或8.x)。Harbor官方建议使用64位的操作系统。
登录的用户:root
使用环境:Centos7
Docker Engine:Harbor是基于容器运行的,所以你需要先安装Docker。可以参考我写的博客来进行安装部署。安装docker并拉取镜像超详细步骤(复制粘贴都可以)_飞牛docker拉取镜像教程分享-CSDN博客
Docker Compose:用于管理多容器应用。Harbor需要Docker Compose来启动其组件。下面会有我写的详细操作步骤。你也可以从Standalone | Docker Docs获取安装指南。
节点 | IP | 所需服务 | |
---|---|---|---|
Harbor服务器 | 192.168.232.60 | docker-ce、docker-compose、harbor-offline-v1.2.2 | |
Client | 192.168.232.61 | docker-ce |
Docker-CE:Docker CE 是 Docker 公司推出的免费版本的 Docker 引擎
Docker-Compose:是 Docker 官方提供的一个工具,用于定义和运行多个容器化应用程序的工具。通过一个单独的 docker-compose.yml 配置文件,可以定义应用程序的服务、网络、卷等信息,然后使用 docker-compose 命令进行统一的管理和操作
Harbor Offline Installer v1.2.2:Harbor 是一个企业级的 Docker 镜像仓库管理系统,提供了图形管理界面、安全访问控制、LDAP/AD 集成等功能,用于存储、管理和分发 Docker 镜像
1.1 安装docker-ce
安装Harbor仓库时,docker环境是必须的;
您的虚拟机里有docker-ce的话可以继续往后操作,如果没有安装docker-ce的可以参考一下我的这篇博客来进行安装部署。
安装docker并拉取镜像超详细步骤(复制粘贴都可以)_docker镜像-CSDN博客
1.2 关闭防火墙
[root@localhost ~]# systemctl stop firewalld |
1.3 服务器进行改名,方便区分
[root@localhost ~]# hostnamectl set-hostname harbor
[root@localhost ~]# bash
[root@harbor ~]#
2.安装Docker-Compose服务
要下载并安装 Docker Compose 独立版,请运行:
curl -SL https://github.com/docker/compose/releases/download/v2.32.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
将可执行权限应用于安装目标路径中的独立二进制文件。
chmod +x /usr/local/bin/docker-compose
使用 测试和执行 Docker Compose 命令。
[root@harbor ~]# ls /usr/local/bin/
docker-compose
[root@harbor bin]# docker-compose --version
Docker Compose version v2.32.0
[root@harbor bin]# ll
总用量 63164
-rwxr-xr-x. 1 root root 64678453 12月 26 13:41 docker-compose
3.部署Harbor服务
3.1 下载Harbor软件包(源码安装)
https://github.com/goharbor/harbor/releases/download/v2.12.1/harbor-offline-installer-v2.12.1.tgz
下载完成后,将下载好的包传入你的虚拟机中
想更加详细的了解如何安装harbor服务的请看官方文档,里面包含如何在线,离线下载
Harbor 文档 |下载 Harbor 安装程序
3.2 解压
[root@harbor ~]# tar -zxvf harbor-offline-installer-v2.12.1.tgz
harbor/harbor.v2.12.1.tar.gz
harbor/prepare
harbor/LICENSE
harbor/install.sh
harbor/common.sh
harbor/harbor.yml.tmpl
[root@harbor ~]# ls
anaconda-ks.cfg harbor harbor-offline-installer-v2.12.1.tgz
将解压包移动到/usr/local目录下
mv harbor /usr/local/
或者你也可以这样写
tar -zxvf harbor-offline-installer-v2.12.1.tgz -C /usr/local/
这条命令会直接将软件包解压到/usr/local目录下,无需使用mv命令进行移动
3.3 修改配置文件
harbor.yml.tmp 文件是 Harbor 安装包中提供的一个模板文件,它包含了启动和配置 Harbor 所需的所有设置项。
[root@harbor ~]# cd /usr/local/harbor/
[root@harbor harbor]# cp -i harbor.yml.tmpl harbor.yml
将 harbor.yml.tmp 复制并重命名为 harbor.yml 不仅仅是为了进行备份,还因为Harbor 的安装和准备脚本(如 prepare 和 install.sh)会查找名为 harbor.yml 的文件来进行配置读取和处理。如果你没有将其重命名为 harbor.yml,这些脚本将无法找到正确的配置文件,从而导致部署错误或失败。
编辑harbor.yml文件
[root@harbor harbor]# vi harbor.yml
再往下滑一点:
3.4 创建并且启动Docker容器
如果你已经编辑好了 harbor.yml 文件,接下来可以运行以下命令来准备 Harbor:
[root@harbor harbor]# ./prepare
./prepare 脚本是 Harbor 安装过程中的一个关键步骤,它负责根据 harbor.yml 文件中定义的配置来生成或更新 Harbor 所需的各种配置文件。
执行安装脚本:
[root@harbor harbor]# ./install.sh
主要功能:
1、创建并启动 Docker 容器:./install.sh 脚本会使用之前通过 ./prepare 生成的 docker-compose.yml 文件,来创建并启动所有必要的 Docker 容器,这些容器构成了完整的 Harbor 系统。
2、初始化数据库和服务:对于首次安装或升级,该脚本会初始化或更新所需的数据库表结构,并为其他服务(如核心服务、作业服务等)做准备。
3、设置管理员密码:如果这是第一次安装 Harbor,./install.sh 会根据 harbor.yml 中的配置设置初始管理员账户的密码。
4、加载默认配置和资源:这可能包括但不限于设置默认策略、添加系统用户、配置项目等。
验证安装状态:在完成所有操作后,脚本可能会检查各个服务的状态,以确保它们都已成功启动。
3.5 测试
浏览器搜索 192.168.232.60:8083
4.重新加载配置文件
如何在修改完配置文件后重新加载成功?
案例目标:
我要将端口号8083修改成85,应该怎么做才能成功重新加载配置文件呢?
案例实施:
1、首先我们修改harbor.yml配置文件
[root@harbor harbor]# vi harbor.yml
2、修改完成后我们先执行./prepare来重新加载配置文件
[root@harbor harbor]# ./prepare
./prepare 脚本会根据最新的 harbor.yml 文件生成或更新必要的配置文件。这一步非常重要,因为它确保了所有内部组件和服务的配置都与你修改后的设置相匹配。
3、停止现有的容器
[root@harbor harbor]# docker-compose down
[+] Running 10/10✔ Container nginx Removed 4.3s ✔ Container registryctl Removed 3.8s ✔ Container harbor-jobservice Removed 3.8s ✔ Container harbor-core Removed 0.8s ✔ Container harbor-portal Removed 1.2s ✔ Container harbor-db Removed 0.8s ✔ Container registry Removed 0.4s ✔ Container redis Removed 0.6s ✔ Container harbor-log Removed 10.3s ✔ Network harbor_harbor Removed 0.1s
为了使新配置生效,你需要先停止当前正在运行的 Harbor 容器。这样可以避免旧配置继续影响系统。
如果你只想停止特定的服务而不是全部服务,可以使用 -s 参数指定服务名称。
4、启动 Harbor
[root@harbor harbor]# docker-compose up -d
[+] Running 10/10? Network harbor_harbor Created 0.2s ? Container harbor-log Started 2.8s ? Container registry Started 10.9s ? Container registryctl Started 10.9s ? Container harbor-db Started 10.9s ? Container harbor-portal Started 10.9s ? Container redis Started 10.9s ? Container harbor-core Started 12.6s ? Container nginx Started 21.1s ? Container harbor-jobservice Started 21.1s
使用新的配置文件重新启动 Harbor。docker-compose up -d 命令会在后台启动所有定义的服务,并根据需要创建和拉取镜像。
5、验证配置是否生效
确认新配置已经成功应用并且 Harbor 正常工作。你可以通过访问 Harbor 的 Web 界面、检查日志文件或测试特定功能来验证这一点。
1.访问harbor的web界面
192.168.232.60:85
登录成功
2.检查日志文件或测试特定功能
[root@harbor harbor]# docker ps # 查看所有运行中的容器状态
[root@harbor harbor]# docker logs <container_name> # 查看特定容器的日志输出
二、Harbor仓库基础使用
Harbor作为镜像仓库,主要的交互方式就是将镜像上传到Harbor,以及从Harbor上下载拉取指定版本的镜像。
- 在传输镜像前,可以先使用Harbor提供的权限管理,将项目设置为私有项目,并对不同用户设置不同角色,从而更方便管理镜像。
如果你的 Harbor 仓库配置为使用 HTTP 而不是 HTTPS,推送镜像的过程基本相同,但有一些特别需要注意的地方,特别是关于 Docker 的安全设置。下面是具体步骤以及注意事项:
使用 HTTP 发布镜像到 Harbor
确保 Docker 配置允许不安全的注册表
默认情况下,Docker 客户端不允许与未使用 HTTPS 的 Docker 注册表通信,因为这被认为是不安全的。为了允许通过 HTTP 推送镜像,你需要修改 Docker 守护进程的配置文件来添加你的 Harbor 作为“不安全的注册表”。
1.1 编辑 Docker 配置文件:
在大多数 Linux 系统上,Docker 配置文件位于 /etc/docker/daemon.json。如果该文件不存在,请创建它。
{"insecure-registries" : ["your-harbor-domain:port"]
}
将 your-harbor-domain 替换为你的 Harbor 实例的域名或 IP 地址,并将 port 替换为实际使用的 HTTP 端口号(例如 80 或你自定义的其他端口)。
[root@harbor ~]# vi /etc/docker/daemon.json
[root@harbor ~]# cat /etc/docker/daemon.json
{"registry-mirrors": ["https://vi0gw6fg.mirror.aliyuncs.com", "https://docker.m.daocloud.io", "https://docker.mirrors.sjtug.sjtu.edu.cn" ],"insecure-registries": ["192.168.232.60:85"]
}
没有配置阿里云加速器的,可以参考我的这篇博客,里面有非常详细的教程
安装docker并拉取镜像超详细步骤(复制粘贴都可以)_docker镜像-CSDN博客
1.2 重启 Docker 服务: 修改配置文件后,记得重启 Docker 服务以使更改生效。
[root@harbor ~]# systemctl restart docker
2. 登录到 Harbor
由于我们现在使用的是 HTTP 协议,所以可以直接使用以下命令登录:
docker login http://192.168.232.60:85
系统会提示你输入用户名和密码。成功登录后,你会看到“Login Succeeded”的消息。
或者你也可以这样登录
docker login -uadmin -pHarbor12345 192.168.232.60:85
我也不知道为什么http方式登录不进去,这里跪求各位大佬好心帮助。。。
[root@harbor harbor]# docker login -uadmin -pHarbor12345 192.168.232.60
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get "https://192.168.232.60/v2/": dial tcp 192.168.232.60:443: connect: connection refused
[root@harbor harbor]# docker login -uadmin -pHarbor12345 192.168.232.60:85
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get "http://192.168.232.60:85/v2/": Get "https://192.168.232.60:85/service/token?account=admin&client_id=docker&offline_token=true&service=harbor-registry": http: server gave HTTP response to HTTPS client
①添加用户构建项目
1、创建用户
系统管理-用户管理-创建用户
创建成功后:
2、构建项目(设置为私有)
3、给项目追加用户
②发布镜像到Harbor
1、首先设置登录仓库信息
docker login -u 用户名 -p 密码 Harbor地址
[root@harbor harbor]# docker login -uadmin -pHarbor12345 192.168.232.60:85
2、标记镜像
在推送之前,你需要为镜像打上正确的标签,以便它能够被推送到指定的 Harbor 项目中。标签应该包含 Harbor 的域名、项目名称以及镜像名称和标签。
docker tag <local-image>:<tag> your-harbor-domain/<project>/<image-name>:<tag>
例如,如果你有一个名为 hello-world 的镜像,并希望将其推送到 my_test1 项目中,标签可以是:
docker tag hello-world:latest 192.168.232.60:85/my_test1/hello-world:latest
3、推送镜像到 Harbor
使用 docker push 命令将标记好的镜像推送到 Harbor 仓库。
docker push your-harbor-domain/<project>/<image-name>:<tag>
继续上面的例子:
docker push 192.168.232.60:85/my_test1/hello-world:latest
4、验证镜像是否成功推送
登录到 Harbor 的 Web 界面,导航到相应的项目页面,检查镜像列表以确认镜像已经成功上传。
也可以使用 Docker CLI 来验证:
docker pull your-harbor-domain/<project>/<image-name>:<tag>
③从Harbor中拉取镜像
1、拉取仓库镜像
成功登录之后,你可以使用 docker pull 命令来拉取所需的镜像。确保你使用的镜像名称包含完整的仓库路径和标签。
docker pull 192.168.232.60:85/my_test1/hello-world:latest
2、验证镜像
拉取完成后,你可以使用 docker images 命令列出本地存储的所有镜像,以确认新拉取的镜像是否已成功下载。
docker images
3、运行容器
最后,你可以启动一个容器来测试拉取的镜像是否正常工作。
docker run --rm -it 192.168.232.60:85/my_test1/hello-world:latest
三、容器运行的基础使用
1、 基本运行命令
最简单的运行命令如下:
docker run --rm -it 192.168.232.60:85/my_test1/hello-world:latest
--rm:在容器退出时自动删除容器。
-it:交互模式,保持标准输入输出打开。
2、指定端口映射
如果你想将容器内的端口映射到主机上的特定端口,可以使用 -p 参数。例如,将容器的 8080 端口映射到主机的 8080 端口:
docker run -d -p 8080:8080 192.168.232.60:85/my_test1/hello-world:latest
-d:后台运行容器。
-p:指定端口映射,格式为 host_port:container_port。
3、挂载卷
如果你需要将主机上的目录或文件挂载到容器内,可以使用 -v 参数。例如,将主机的 /data 目录挂载到容器的 /app/data 目录:
docker run -d -v /data:/app/data 192.168.232.60:85/my_test1/hello-world:latest
4、设置环境变量
如果需要在容器启动时设置环境变量,可以使用 -e 参数。例如,设置 APP_ENV=production:
docker run -d -e APP_ENV=production 192.168.232.60:85/my_test1/hello-world:latest
5、命名容器
给容器指定一个名称可以方便管理和引用,使用 --name 参数。例如,将容器命名为 lifeng0577
docker run -d --name lifeng0577 192.168.232.60:85/my_test1/hello-world:latest
6、查看容器日志
如果你想查看正在运行的容器的日志输出,可以使用 docker logs 命令:
docker logs hello-world
7、停止和移除容器
当不再需要运行的容器时,可以使用以下命令停止并移除它:
docker stop myapp-containerdocker rm myapp-container
或者,如果你之前使用了 --rm 选项,容器会在退出时自动被删除。
四、远程主机下载镜像
问题:
如何使用另外一台虚拟机,来下载本次实验机器搭建仓库中的镜像呢?
任务实施:
要在另一台虚拟机上下载(拉取)来自这台虚拟机上 Harbor 仓库的镜像,你需要确保以下几点:
1.网络可达性:两台虚拟机之间的网络是连通的,并且目标虚拟机上的 Harbor 服务可以被源虚拟机访问。
2.Harbor 配置正确:Harbor 注册表配置正确,并且可以通过网络访问。
3.Docker 客户端配置:源虚拟机上的 Docker 客户端已配置为信任 Harbor 的证书(如果是 HTTPS),或配置了不安全注册表(如果是 HTTP)。
1、登录 Harbor
在另一台虚拟机上安装并配置 Docker 后,使用 docker login 命令登录到 Harbor。请替换 <your_username> 和 <your_password> 为实际的用户名和密码。
echo "<your_password>" | docker login --username <your_username> --password-stdin http://192.168.232.60:85
如果 Harbor 使用 HTTPS,则替换 URL 为 https://192.168.232.60 并确保端口号正确。
2、配置 Docker 客户端(仅限 HTTP)
如果你使用的是 HTTP 而不是 HTTPS,需要配置 Docker 客户端以信任这个不安全的注册表。编辑 /etc/docker/daemon.json 文件,添加 Harbor 的地址到 insecure-registries 列表中,并重启 Docker 服务。
{"insecure-registries": ["192.168.232.60:85"]
}
然后重启 Docker 服务以应用更改:
systemctl restart docker
3、拉取镜像
成功登录后,使用 docker pull 命令从 Harbor 拉取所需的镜像。请根据你的实际需求替换 <namespace>、<repository> 和 <tag>。
docker pull 192.168.232.60:85/<namespace>/<repository>:<tag>
例如,如果你想拉取一个名为 hello-world 的镜像,并且它位于 my_test1 命名空间中,标签为 latest,你可以这样操作:
docker pull 192.168.232.60:85/my_test1/hello-world:latest
4、验证镜像
拉取完成后,你可以使用 docker images 命令来列出本地存储的所有镜像,以确认新拉取的镜像是否已成功下载。
docker images