下面将结合 Docker,将镜像推送到 Harbor,以及从 Harbor 拉去镜像。以下是 Harbor 基本使用的步骤:
打开浏览器,输入 Harbor 的地址(如 http://your-harbor-server:port),默认端口为 80,可以输入:http://192.168.1.4:80 访问,192.168.1.4 是 Harbor 所在服务器的 IP 地址。
使用管理员账号(默认用户名是 admin,密码是 Harbor12345,首次登录后建议修改密码)或其他已创建的用户账号登录。如下图:
点击“登录”按钮登录到 Harbor,登录成功将进入到 Harbor 主页,如下图:
默认情况下,存在一个名为“library”的公开项目。
在 Harbor 的界面中,点击 “项目” 菜单,然后点击 “新建项目” 按钮。如下图:
输入项目名称、项目描述等信息,并设置项目的访问级别(公开或私有),存储数量,存储容量等限制,点击“确定”,如下图:
新创建了一个名为“demo”的项目。
在使用 docker push 命令将镜像推送到 Harbor 前,请使用 docker login 登录 Harbor,如下:
root@hxvm:~# docker login hxvm:80 Username: admin Password: Error response from daemon: Get "https://hxvm:80/v2/": http: server gave HTTP response to HTTPS client
这个错误通常是因为 Docker 客户端默认使用 HTTPS 协议尝试连接到 Harbor 仓库,但 Harbor 服务端配置的是 HTTP 协议(或者 Docker 客户端被错误地配置为强制使用 HTTPS 连接到一个实际上是 HTTP 服务的 Harbor)。当这种协议不匹配时,就会出现 server gave HTTP response to HTTPS client 的错误。
解决方案:
(1)将 Harbor 配置为使用 HTTPS,推荐用于生产环境。
(2)配置 Docker 信任非安全的仓库,适用于测试环境。
编辑 /etc/docker/daemon.json 文件(如果文件不存在则创建它)。在文件中添加以下内容来允许 Docker 信任非安全(HTTP)的 Harbor 仓库:
{ "insecure-registries": ["hxvm:80"] }
这里的 hxvm:80 是你的 Harbor 服务的主机名和端口,你需要根据实际情况进行替换。添加完成后,保存文件并重启 Docker 服务。如下:
// 修改daemon.json root@hxvm:~# vim /etc/docker/daemon.json // 查看daemon.json内容 root@hxvm:~# cat /etc/docker/daemon.json { "registry-mirrors": [ "https://docker.m.daocloud.io" ], "insecure-registries": ["hxvm:80"] } // 重启docker root@hxvm:~# systemctl restart docker // 查看docker状态 root@hxvm:~# systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2024-09-30 11:02:44 CST; 14s ago TriggeredBy: ● docker.socket Docs: https://docs.docker.com Main PID: 261697 (dockerd) Tasks: 28 ... // 注意,记得进入harbor安装目录使用 docker-compose 启动harbor root@hxvm:~/harbor# docker-compose up -d harbor-log is up-to-date Starting harbor-portal ... Starting registry ... registryctl is up-to-date Starting harbor-portal ... done Starting registry ... done Starting harbor-core ... done nginx is up-to-date Starting harbor-jobservice ... done
再次登录 Harbor,如下:
root@hxvm:~# docker login hxvm:80 Username: admin Password: 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/#credential-stores Login Succeeded
登录成功了。
在本地使用 Docker 命令对镜像进行标记,命令格式:docker tag your-image your-harbor-server:port/your-project/your-image:tag。例如:
// 查看本机拥有的镜像 root@hxvm:~# docker images | grep springcloud springcloud-user latest 188b0acb32a9 10 days ago 380MB springcloud-products latest 908852fc51f6 10 days ago 380MB springcloud-order latest 69d6221bfca2 10 days ago 383MB springcloud-eureka latest d0fa6df3821b 10 days ago 382MB springcloud-db latest e698e0b6c91c 2 weeks ago 573MB // 给本机 springcloud_eureka 镜像打标签 root@hxvm:~# docker tag springcloud-eureka hxvm:80/demo/springcloud-eureka:v1.0 // 查看打标签后的镜像 root@hxvm:~# docker images | grep v1.0 hxvm:80/demo/springcloud-eureka v1.0 d0fa6df3821b 10 days ago 382MB
然后使用 docker push your-harbor-server:port/your-project/your-image:tag 将镜像推送到 Harbor 仓库。例如:
// 将打了标签的 springcloud-eureka 推送到 harbor root@hxvm:~# docker push hxvm:80/demo/springcloud-eureka:v1.0 The push refers to repository [hxvm:80/demo/springcloud-eureka] ada109513566: Pushed 49b59fcdef48: Pushed 34f7184834b2: Pushed 5836ece05bfd: Pushed 72e830a4dff5: Pushed v1.0: digest: sha256:78d0b37e54e04abd76e8fc7f3c8720874a618587466c2bf953d7a17f0162b81a size: 1369
执行完上面命令后,登录到 Harbor 的 web 页面,进入 demo 项目进行查看,如下图:
上图显示了刚刚推送的镜像信息。
在需要使用镜像的服务器上,使用 docker login your-harbor-server:port 登录到 Harbor。例如:
root@hxvm:~# docker login hxvm:80 Username: admin Password: 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/#credential-stores Login Succeeded
然后使用 docker pull your-harbor-server:port/your-project/your-image:tag 拉取镜像。例如:
// 拉去 hxvm:80/demo/springcloud-eureka:v1.0 镜像 root@hxvm:~# docker pull hxvm:80/demo/springcloud-eureka:v1.0 v1.0: Pulling from demo/springcloud-eureka Digest: sha256:78d0b37e54e04abd76e8fc7f3c8720874a618587466c2bf953d7a17f0162b81a Status: Downloaded newer image for hxvm:80/demo/springcloud-eureka:v1.0 hxvm:80/demo/springcloud-eureka:v1.0
如果你不知道镜像的具体名称,可以登录 Harbar 的 web 页面去查看,例如:
注意:Harbor 给出的 docker pull 命令存在问题,自动将端口 80 给去掉了,如果使用它给出的命令拉去镜像,将出现如下错误:
root@hxvm:~# docker pull hxvm/demo/springcloud-eureka:v1.0 Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)