Docker搭建私有镜像中心Harbor的详细过程

 更新时间:2026年06月09日 09:04:05   作者:NE_STOP  
这段文章详细介绍了如何搭建私有Docker镜像中心Harbor,包括从阿里云注册账号到配置私bor私镜像中心的具体步骤,感兴趣的朋友跟随小编一起看看吧

公网镜像中心

Docker Hub 和阿里云都是Docker 的公网镜像中心,用户可以将镜像push到镜像中心的镜像仓库里,可以将仓库设为私有库,他人无法访问,保证镜像安全。

但是,实际工作中,一般在公司内部搭建一个私有镜像中心。

发布镜像到阿里云

  • 注册一个阿里云账号,并完成实名认证
  • 创建镜像中心实例
  • 登录阿里云后搜索“容器镜像服务”,然后进入并创建个人实例
  • 设置Registry登录密码。
  • 创建命名空间
  • 阿里云在镜像中心和镜像仓库之间增加了一层“命名空间”,可以将镜像仓库分类到不同的命名空间中,所以要先创建命名空间。
  • 创建镜像仓库,先选择好命名空间

这里选择本地仓库。

登录阿里云镜像中心

docker login --username=dt_5224810793 crpi-8nnmc9aojy1lrfpp.cn-chengdu.personal.cr.aliyuncs.com

复制并重命名镜像

docker tag hello-my-world crpi-8nnmc9aojy1lrfpp.cn-chengdu.personal.cr.aliyuncs.com/ali_1/ali_1_ck:1.0

推送镜像

docker push crpi-8nnmc9aojy1lrfpp.cn-chengdu.personal.cr.aliyuncs.com/ali_1/ali_1_ck:1.0

此时就推送成功了!

登出阿里云仓库

docker logout crpi-8nnmc9aojy1lrfpp.cn-chengdu.personal.cr.aliyuncs.com

私有镜像中心

htpasswd命令

registry 私有镜像中心默认没有用户认证功能,可通过htpasswd来实现用户认证!

htpasswd用于创建、更新http基本认证的密码文件。

安装httpd-tools

htpasswd 需要先安装httpd-tools 工具包

yum install -y httpd-tools

创建文件并添加用户

创建/root/auth 目录并进入。在其中存放生成的认证文件

# 指定用户zhangsan 密码123 并写入到auth目录中的htpasswd.user文件中
htpasswd -Bbc htpasswd.user zhangsan 123
# 再创建两个用户,此时无需选项-c
htpasswd -Bb htpasswd.user lisi 123
htpasswd -Bb htpasswd.user wangwu 123

修改密码

# 若指定用户不存在,则添加用户;若存在,就修改密码
htpasswd -Bb htpasswd.user wangwu 456

删除用户名和密码

htpasswd -D htpasswd.user wangwu

使用-n选项创建文件

# -n选项和重定向符可将密码写入到文件,比如将用户名和密码写入当前目录的authfile中
htpasswd -Bbn wangwu 456 > authfile
# 这种情况下修改密码可通过追加重定向符来完成
htpasswd -Bbn Tom 456 >> authfile

容器的退出状态码

退出状态码可以向用户反馈容器中应用的退出方式!

状态码分类

容器退出状态码是【0,255】范围内的整数,分为三类:0、【1,128】、【129,255】

  • 状态码0:表示容器中应用正常退出。
  • 【1,128】:非正常退出,容器内部运行错误引发的容器无法启动或应用运行出错。
  • 【129,255】:非正常退出,表示容器接收到终止信号而退出。

常见状态码如下:

  • 状态码1:表示程序内部错误(比如:分母为0,内存溢出)或Dockerfile中的无效引用(比如引用了不存在的文件)
  • 状态码125:容器启动后要执行【command】,但是【command】没运行成功,原因一般是【command】引用了未定义的变量或者执行了没权限的目录。
  • 状态码126:容器启动后要执行【command】,但是【command】没运行成功,原因是缺少依赖。
  • 状态码127:容器启动后要执行【command】,但是【command】没运行成功,原因是引用了不存在的文件或目录。
  • 状态码128:当自己开发的容器内的代码引发退出命令,但是给出的状态码不再0-255范围内,就会返回128
  • 状态码130:容器中的应用接收到来自操作系统的终止信号,应用立即退出,返回130.
  • 状态码137:容器中的应用接收到来自docker的强制终止信号,应用立即退出,返回137.
  • 状态码143:容器中的应用接收到来自docker的优雅终止信号,如果没用户访问,容器会立即退出,并返回143;如果有用户访问,那么docker会等待10s,10s后向容器发送kill信号,返回137状态码

退出状态码的查看方式:docker ps -adocker inspect

容器重启策略

在生产环境下,容器退出后使用手动重启不现实,这时可以使用容器重启策略,在容器创建时指定--restart 选项 不同的值,达到不同的效果。

  • no:默认策略,退出时不重启。
  • on-failure[:n]: 容器非正常退出时(退出状态码非0)才重启容器,气候可以跟一个整数,表示重启次数。
  • always:只要退出就重启
  • unless-stopped:只要退出就重启,除非docker stop 或 docker kill 命令停止容器。

harbor私有镜像中心[HTTP]

一般私有镜像中心是一台换门的服务器,不用做平时Docker容器的运行管理。其他要对其进行push或pull操作的Docker主机称为Docker客户端。

Harbor 是Go语言开发的一款Registry server 开源项目,在Docker Registry 的基础上进行二次封装。作为一个企业级私有Registry服务器,Harbor提供更好的性能和安全,也提供了方便的web管理界面。

安装Harbor

下载安装包

wget https://github.com/goharbor/harbor/releases/download/v2.6.2/harbor-offline-installer-v2.6.2.tgz

解压安装包

tar -zxvf harbor-offline-installer-v2.6.2.tgz -C /opt/apps/

修改harbor.yml

复制一份harbor解压包中的harbor.yml.tmpl 并重命名为harbor.yml

cp harbor.yml.tmpl harbor.yml
  • 修改harbor.yml三个地方:
    • 将hostname 指定为当前主机IP
    • 注释掉所有https相关配置
    • 修改admin用户的密码

运行prepare

在harbor解压目录中运行prepare命令。该命令会先拉取prepare镜像,然后生成很多的配置文件。

./prepare

运行 install.sh

在harbor解压目录中运行install.sh命令,其会自动完成五步的安装过程,并最后启动很多容器。

./install.sh

此时就可以通过http://IP 进行访问了。

Habor 的启停

Harbor是由10个容器同时运行完成的,而且是同福哦docker-compose完成的容器编排。

Harbor安装完后会在解压目录下生成docker-compose.yml文件,所以Harbor的启停命令都是由docker-compose完成的,且需要在Harbor的解压目录中完成

docker compose stop # 停止
docker compose up -d # 启动

Docker客户端操作

  • 修改daemon.json文件
  • Docker客户端默认采用https请求,但私有镜像中心不接收https请求。需要手动修改Docker客户端的/etc/docker/daemon.json文件。

重启Docker引擎

systemctl restart docker

登录私有镜像中心,输入用户名和密码

docker login 192.168.192.101

复制并重命名镜像

通过docker tag 对镜像进行复制并重命名。

重命名镜像的<repository>中采用<domain-name>/<project-name>/<software-name>

如果要区分用户,也可以采用<domain-name>/<project-name>/<username>/<software-name>

docker tag hello-my-world 192.168.192.101/test/admin/hmyw:1.0

推送镜像

docker push 192.168.192.101/test/admin/hmyw:1.0

此时镜像推送完成

登出私有镜像中心

docker logout 192.168.192.101

到此这篇关于Docker--搭建私有镜像中心Harbor的文章就介绍到这了,更多相关Docker私有镜像中心Harbor内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • IDEA使用Docker插件(菜鸟教程)

    IDEA使用Docker插件(菜鸟教程)

    本文主要介绍了IDEA使用Docker插件,文中通过图文示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Docker四种网络类型原理实例解析

    Docker四种网络类型原理实例解析

    这篇文章主要介绍了Docker四种网络类型原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Docker部署KingbaseES数据库操作指南

    Docker部署KingbaseES数据库操作指南

    本文主要介绍了Docker部署KingbaseES数据库操作指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-04-04
  • 基于Docker、Nginx和Jenkins实现前端自动化部署

    基于Docker、Nginx和Jenkins实现前端自动化部署

    本文主要介绍了搭建Docker+Nginx+Jenkins环境,用于实现前端自动化部署的流程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • docker-compose使用volumes注意项介绍

    docker-compose使用volumes注意项介绍

    这篇文章主要介绍了docker-compose使用volumes注意项,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Docker Swarm入门实例详解

    Docker Swarm入门实例详解

    这篇文章主要介绍了Docker Swarm 入门实例详解的相关内容,小编觉得十分不错,在这里给大家分享下,需要的朋友可以参考。
    2017-10-10
  • Docker部署RocketMQ的实现示例

    Docker部署RocketMQ的实现示例

    本文主要介绍了Docker部署RocketMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • 部署k8s和docker、jenkins的区别和联系详析

    部署k8s和docker、jenkins的区别和联系详析

    Jenkins、Docker与Kubernetes是现代软件开发和运维中不可或缺的核心工具,它们分别承担不同层次的关键角色,这篇文章主要介绍了部署k8s和docker、jenkins的区别和联系的相关资料,需要的朋友可以参考下
    2025-11-11
  • Docker安装MySQL及授权远程访问的详细教程

    Docker安装MySQL及授权远程访问的详细教程

    Docker是一种流行的容器化平台,可以简化应用程序的部署和管理,下面这篇文章主要给大家介绍了关于Docker安装MySQL及授权远程访问的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-05-05
  • docker文件存放路径, 获取容器启动命令操作

    docker文件存放路径, 获取容器启动命令操作

    这篇文章主要介绍了docker文件存放路径, 获取容器启动命令操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11

最新评论