当前位置: 首页 > news >正文

Docker--搭建私有镜像中心Harbor

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

发布镜像到阿里云

  1. 注册一个阿里云账号,并完成实名认证

  2. 创建镜像中心实例

    登录阿里云后搜索“容器镜像服务”,然后进入并创建个人实例

    设置Registry登录密码。

  3. 创建命名空间

    阿里云在镜像中心和镜像仓库之间增加了一层“命名空间”,可以将镜像仓库分类到不同的命名空间中,所以要先创建命名空间。

  4. 创建镜像仓库,先选择好命名空间

这里选择本地仓库。

  1. 登录阿里云镜像中心

    docker login --username=dt_5224810793 crpi-8nnmc9aojy1lrfpp.cn-chengdu.personal.cr.aliyuncs.com
  2. 复制并重命名镜像

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

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

    此时就推送成功了!

  1. 登出阿里云仓库
docker logout crpi-8nnmc9aojy1lrfpp.cn-chengdu.personal.cr.aliyuncs.com

私有镜像中心

htpasswd命令

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

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

  1. 安装httpd-tools

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

    yum install -y httpd-tools
  2. 创建文件并添加用户

    创建/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
  3. 修改密码

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

    htpasswd -D htpasswd.user wangwu
  5. 使用-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

  1. 下载安装包

    wget https://github.com/goharbor/harbor/releases/download/v2.6.2/harbor-offline-installer-v2.6.2.tgz
  2. 解压安装包

    tar -zxvf harbor-offline-installer-v2.6.2.tgz -C /opt/apps/
  3. 修改harbor.yml

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

    cp harbor.yml.tmpl harbor.yml

    修改harbor.yml三个地方:

    • 将hostname 指定为当前主机IP
    • 注释掉所有https相关配置
    • 修改admin用户的密码
  4. 运行prepare

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

    ./prepare
  5. 运行 install.sh

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

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

Habor 的启停

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

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

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

Docker客户端操作

  1. 修改daemon.json文件

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

  1. 重启Docker引擎

    systemctl restart docker
  2. 登录私有镜像中心,输入用户名和密码

    docker login 192.168.192.101
  3. 复制并重命名镜像

    通过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
  4. 推送镜像

    docker push 192.168.192.101/test/admin/hmyw:1.0

    此时镜像推送完成

  5. 登出私有镜像中心

    docker logout 192.168.192.101
http://www.jsqmd.com/news/1132770/

相关文章:

  • AI Agent开发实战指南:从GitHub趋势项目到工程化落地
  • Netflix《海贼王》重制版:现代动画技术与IP重塑的行业标杆
  • 如何快速构建专业级动态歌词组件:终极Web开发者指南
  • 开源AI视频抠像解决方案:MatAnyone让专业级视频处理触手可及
  • REPENTOGON脚本扩展器:高性能游戏模组开发与部署技术指南
  • IIM-42652与PIC18F85J50的6DoF运动追踪系统设计
  • 基于51单片机的气象站环境检测系统 风速风向温湿度 气象监测仪241(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • 技术深度解析:Alternative Mod Launcher架构设计与实现机制
  • 从零搭建SpringBoot微服务完整教程
  • 扩散模型中文提示词优化:从原理到工程实践
  • 免费AI音频处理神器:让Audacity变身智能音频工作室
  • 终极指南:VLC Android电视版 - 打造完美智能电视媒体中心
  • 2026 年必看!安徽宣城泾县非遗木梳古法制作,选购靠谱手工梳子攻略
  • Video2X完全指南:免费AI视频修复神器,让模糊视频重获新生
  • Android固件提取终极指南:Firmware Extractor一站式解决方案
  • STM32与TPAFE0808实现8通道高精度信号采集方案
  • MatAnyone终极指南:基于一致性记忆传播的稳定视频抠像框架
  • 从推箱子到世界模型:JEPA架构如何让AI学会推理与规划
  • 理解是新的瓶颈?Karpathy:思考可以外包,但理解不能!硅谷工程师给出三层实战技巧
  • 【vLLM 工程实践】大模型高效部署全流程
  • 简单图论大学习
  • VK视频下载解决方案:无缝保存社交媒体内容的专业工具
  • 如何轻松实现微信/QQ/TIM消息防撤回:实用工具完全指南
  • 安卓修改大师反编译全攻略:从命令行到图形化的一站式APK定制...
  • 硅基流动递表港交所:Token 工厂的“高增长、高亏损“困局
  • 高效D类音频放大器MAX9744与STM32L442KC设计指南
  • PyFluent:用Python代码实现CFD仿真的革命性突破
  • VMware虚拟网络编辑器中NAT,桥连模式,仅主机模式的区别 内网公网IP的区别
  • 小红书自然流量低迷?从搜索 SEO 底层拆解笔记无曝光核心诱因
  • python celery 异常