使用docker该怎么做:从公有仓库拉取镜像并上传到私有仓库

news2025/5/9 18:21:24

在容器化部署中,将公有镜像仓库(如Docker Hub)的镜像迁移到私有仓库(如Harbor、Nexus)是常见需求。

一、为什么需要将镜像从公有仓库传到私有仓库?

  1. 网络连通性:公有仓库依赖公网访问,私有环境(如内网集群)可能无法直接拉取,需通过私有仓库中转。
  2. 权限控制:私有仓库可实现细粒度权限管理,避免公有镜像被误删或未经授权访问。
  3. 版本管理:统一镜像版本,避免因公有仓库镜像更新导致的环境不一致问题。
  4. 合规性要求:部分企业要求敏感业务镜像必须存储在内部可控的私有仓库中。

二、准备工作

  1. 环境要求

    • 已安装Docker(客户端与服务端)。
    • 私有仓库地址(如hub.fano.ai)及访问权限(账号/密码或令牌)。
    • 目标镜像(示例:zabbix/zabbix-proxy-sqlite3:alpine-7.2.4)。
  2. 核心工具

    • docker pull:从公有仓库拉取镜像。
    • docker tag:为镜像打标签,关联私有仓库路径。
    • docker login:登录私有仓库进行认证。
    • docker push:将镜像推送到私有仓库。

三、操作步骤:以Harbor私有仓库为例

步骤1:从公有仓库拉取镜像(docker pull

# 拉取Docker Hub上的zabbix代理镜像
docker pull zabbix/zabbix-proxy-sqlite3:alpine-7.2.4
  • 原理:Docker通过分层存储机制,仅下载本地缺失的镜像层(Layer)。镜像由多个只读层叠加而成,相同层可复用,减少下载量。
  • 输出示例
    alpine-7.2.4: Pulling from zabbix/zabbix-proxy-sqlite3
    7b1a6ab2e47: Pull complete  # 基础层(如Alpine系统)
    ...
    Digest: sha256:xxxxxxxxxx  # 镜像哈希值,唯一标识镜像内容
    Status: Downloaded newer image for zabbix/zabbix-proxy-sqlite3:alpine-7.2.4
    

步骤2:为镜像打标签(docker tag

# 将镜像重命名为私有仓库路径格式:私有仓库地址/项目名/镜像名:标签
docker tag zabbix/zabbix-proxy-sqlite3:alpine-7.2.4 hub.fano.ai/thirdparty/zabbix-proxy-sqlite3:alpine-7.2.4
  • 原理:标签本质是镜像ID的别名,通过tag命令建立“私有仓库路径”与“本地镜像”的映射关系。
  • 关键格式
    docker tag [原镜像名:标签] [私有仓库地址/项目名/镜像名:标签]
    
    例如:hub.fano.ai是私有仓库地址,thirdparty是项目名(需提前在私有仓库创建)。

步骤3:登录私有仓库(docker login

# 登录Harbor私有仓库
docker login hub.fano.ai
  • 认证流程
    1. 输入私有仓库账号密码,Docker客户端向仓库发送认证请求。
    2. 仓库返回临时令牌(Token),存储在本地~/.docker/config.json中,有效期内无需重复登录。
  • 常见问题
    • 若私有仓库使用HTTP而非HTTPS,需在Docker配置中添加insecure-registries(生产环境不建议)。
    • 权限不足时,提示unauthorized: access denied,需联系管理员分配推送权限。

步骤4:推送镜像到私有仓库(docker push

# 推送打标签后的镜像到私有仓库
docker push hub.fano.ai/thirdparty/zabbix-proxy-sqlite3:alpine-7.2.4
  • 传输优化
    Docker通过镜像层哈希值校验,仅上传私有仓库中不存在的层,避免重复传输。
  • 成功标志
    输出各层的推送进度,最终提示:
    The push refers to repository [hub.fano.ai/thirdparty/zabbix-proxy-sqlite3]
    alpine-7.2.4: pushed to remote  # 标签推送成功
    

四、核心原理深度解析

1. 镜像分层存储机制

  • 分层结构:镜像由多个只读层(Layer)组成,每层是文件系统的一次变更(如安装软件、修改配置)。
  • 层复用:不同镜像可共享相同层(如基础操作系统层),减少存储和传输成本。
  • UnionFS:Docker通过联合文件系统(如Overlay2)将多层合并为一个文件系统视图,供容器运行时使用。

2. 标签(Tag)的本质

  • 非唯一标识:标签是用户自定义的别名,同一镜像可拥有多个标签(如latestv1.0指向同一镜像ID)。
  • 仓库路径映射:打标签时,需显式指定私有仓库的完整路径(仓库地址/项目名/镜像名:标签),否则Docker默认推送到Docker Hub。

3. 认证与权限控制

  • Token机制docker login获取的Token是临时凭证,用于向仓库证明用户有权限拉取/推送镜像。
  • 私有仓库项目:推送前需确保目标项目存在(Harbor可通过UI创建),且当前账号拥有该项目的“推送”权限(通常为Project Admin或Developer角色)。

五、注意事项

  1. 镜像标签格式
    确保标签符合规范(字母、数字、短横线、下划线,不包含特殊字符),避免因格式错误导致推送失败。

  2. 网络代理配置
    若私有仓库部署在内网,需在Docker客户端配置代理服务器,或通过跳板机中转镜像(如使用docker save/docker load导出导入)。

  3. 版本一致性
    打标签时,建议保留原镜像的版本号(如alpine-7.2.4),避免后续部署时因版本混乱导致问题。

  4. 清理冗余镜像
    推送完成后,可通过docker rmi删除本地临时标签或旧镜像,释放磁盘空间:

    docker rmi hub.fano.ai/thirdparty/zabbix-proxy-sqlite3:alpine-7.2.4  # 删除打标签后的镜像(非强制)
    docker rmi zabbix/zabbix-proxy-sqlite3:alpine-7.2.4  # 删除原公有仓库镜像(按需)
    

六、总结

将镜像从公有仓库迁移到私有仓库,是容器化部署中保障环境稳定、权限可控的重要环节。核心流程可概括为:
拉取镜像(公有仓库)→ 标记路径(关联私有仓库)→ 认证登录(获取推送权限)→ 增量推送(高效传输)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2339178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Uniapp:列表选择提示框

目录 一、出现场景二、效果展示三、具体使用 一、出现场景 在项目的开发过程中,有这样一种场景,就是点击按钮走后续的逻辑之前还需要选择前提条件,就一个条件的情况下如果使用弹出框就显示比较多余,列表选择提示框刚好能够满足我…

【python】django sqlite版本过低怎么办

方法一:下载最新版本 复制上面的内容的链接 在服务器上进行操作 wget https://sqlite.org/2025/sqlite-autoconf-3490100.tar.gz tar -zxvf sqlite-autoconf-3490100.tar.gz cd sqlite-autoconf-3490100 ./configure --prefix/usr/local make && make in…

山东大学软件学院创新项目实训开发日志(18)之对话自动生成标题设为用户第一次对话发的文字

本次功能的实现主要集中在后端,前端代码不用改变: 前端界面效果展示:

【机器学习】PCA-奇异值分解-上采样与下采样-傅里叶变换

1. PCA 主成分分析 主成分分析(PCA)是一种常用的数据降维方法。 它通过找到数据中方差最大的方向(主成分),将原始高维数据映射到较低维空间,同时尽可能保留原始信息。 数学实现上,通常通过协方…

【day8】调用AI接口,生成自动化测试用例

1、项目结构建议 project/ ├── api_docs/ # 存放接口文档 │ └── XX系统.swagger.json ├── ai_generator/ # AI测试用例生成模块 │ └── test_case_generator.py ├── tests/ # 生成的测试用例 │ └── test_user_api.py ├── conftest.py # pytest配置 ├─…

【Tauri2】026——Tauri+Webassembly

前言 不多废话 直言的说,笔者看到这篇文章大佬的文章 【04】Tauri 入门篇 - 集成 WebAssembly - 知乎https://zhuanlan.zhihu.com/p/533025312尝试集成一下WebAssembly,直接开始 正文 准备工作 新建一个项目 安装 vite的rsw插件和rsw pnpm instal…

Notepad++中将文档格式从Windows(CR LF)转换为Unix(LF)

在Windows中用记事本写了一个.sh的Linux运行脚本,是无法直接在Linux中执行,需要首先把文本编码格式转换为Unix的,特别是换行符这些,转换步骤如下: 1、打开文档 在Notepad中打开需要转换的文件。 2、进入文档格式转换…

Linux常见工具如yum、vim、gcc、gdb的基本使用,以及编译过程和动静态链接的区别

目录 一、工具的本质 二、一些常用的工具 1.yum 2.vim 1)vim的三种基本模式: 2)vim的基本操作 ①命令模式下的基本操作: ②插入模式: ③底行模式: 3)vim的配置:让他变得更好用 3.gcc…

RBAC的使用

1、简述RBAC的作用及工作流程 Rbac基于角色访问控制,用于管理用户对集群资源的访问权限,通过定义角色和绑定规则,将用户与权限进行关联,作用:权限精细化管理,操作便捷与统一管理,动态调整权限。…

MySQL+Redis实战教程:从Docker安装部署到自动化备份与数据恢复20250418

MySQLRedis实战教程:从Docker安装部署到自动化备份与数据恢复 一、前言 在企业应用中,对MySQL和Redis运维的要求越来越高: 不能仅是启动就算部署运行稳定、隔离、访问控制、备份恢复、安全可靠,才是 企业级的基本功能 本文将手…

AI驱动商业变革:零售行业的智能化跃迁

引言:AI技术迈入黄金时代 2024年成为生成式AI(Gen AI)全面落地的关键年。据麦肯锡《技术趋势展望》报告,生成式AI相关投资同比增长​7倍​​,其经济价值预计达​​2.6-4.4万亿美元​​[1]。在零售领域,该技…

AI调试工具有哪些?

一、深度学习框架专用调试工具 TensorBoard • 功能:实时监控训练指标(损失值、准确率)、可视化神经网络结构、分析参数分布和梯度信息 • 适用框架:TensorFlow、PyTorch(通过插件) • 特点:支持…

交易模式革新:Eagle Trader APP上线,助力自营交易考试效率提升

近年来,金融行业随着投资者需求的日益多样化,衍生出了众多不同的交易方式。例如,为了帮助新手小白建立交易基础,诞生了各类跟单社区;而与此同时,一种备受瞩目的交易方式 —— 自营交易模式,正吸…

健身会员管理系统(ssh+jsp+mysql8.x)含运行文档

健身会员管理系统(sshjspmysql8.x) 对健身房的健身器材、会员、教练、办卡、会员健身情况进行管理,可根据会员号或器材进行搜索,查看会员健身情况或器材使用情况。

捋一遍Leetcode【hot100】的二叉树专题

二叉树专题 除了后面两个,都挺简单 二叉树的中序遍历 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int …

【测试文档】项目测试文档,测试管理规程,测试计划,测试文档模版,软件测试报告书(Word)

原件获取列表: 系统测试方案-2.docx B-Web安全服务渗透测试模板.docx 压力测试报告.docx安全测试用例及解析.docx 测试计划.doc 测试需求规范.doc 测试需求指南.docx 测试用例设计白皮.doc 单元测试报告模板.doc 单元测试计划模板.doc 回归测试指南.doc 集成测试报…

Linux的联网网络管理攻略

RHEL9版本特点 在RHEL7版本中,同时支持network.service和NetworkManager.service(简称NM)。 在RHEL8上默认只能通过NM进行网络配置,包括动态ip和静态ip,若不开启NM,否则无法使用网络RHEL8依然支持network.service&am…

Linux上位机开发实践(SoC和MCU的差异)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 soc一般是指跑linux的芯片,而mcu默认是跑rtos的芯片,两者在基本原理方面其实差异不大。只不过,前者由于性能的原…

ios app的ipa文件提交最简单的方法

ipa文件是ios的app打包后生成的二级制文件,在上架app store connect或做testflight测试的时候,它提示我们需要使用xcode、transporter或xcode命令行等方式来上传。 而xcode、transporter或xcode命令行的安装都需要使用mac电脑,假如没有mac电…

详细解释浏览器是如何渲染页面的?

渲染流程概述 渲染的目标:将HTML文本转化为可以看到的像素点 当浏览器的网络线程收到 HTML 文档后,会产生一个渲染任务,并将其传递给渲染主线程的消息队列。在事件循环机制的作用下,渲染主线程取出消息队列中的渲染任务&#xff0…