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

Docker镜像仓库

目录

前言

1. 常见的镜像仓库

2. 搭建私有镜像仓库

3. 私有库的推送、拉取镜像

4. 总结


前言

Docker镜像仓库简单来说就是存储和管理Docker镜像的平台或服务。它允许开发人员上传自己创建的镜像,并与团队成员共享和协作使用。

1. 常见的镜像仓库

镜像仓库有公共的和私有的两种形式:

  • 公共仓库:允许用户下载别人发布的镜像或者上传自己的镜像,例如国外Docker官方的DockerHub,国内也有网易云镜像服务,DaoCloud镜像服务,阿里云镜像服务等。
  • 私有仓库:提供了更高的安全性和控制,例如用户自己搭建的本地私有Docker Registry。企业自己的镜像存放库等。

2. 搭建私有镜像仓库

可以参考我的CentOS7安装Docker里面的图形化界面版本的详细操作。

3. 私有库的推送、拉取镜像

在搭建好自己的图形化私有库之后,访问http://我的虚拟机IP:8080/,就可以看到,我这里暂时还没有上传镜像:

接下来,我会以之前下载的nginx镜像为例,演示如何上传镜像到私有库和从私有库拉取镜像的操作:

推送镜像到私有镜像库之前必须tag,那么tag命令究竟是什么呢?

我们可以用docker tag --help命令来看看,这个命令是用来干什么的:

看这里我们可以知道,docker tag命令是来创建一个新的镜像标签,这个新的标签指向已有的镜像。这样方便我们通过这样的标识来识别和管理镜像。

接下来,我们来用进行镜像的拉取和推送,步骤如下:

1)重新tag本地镜像,名称前缀为私有仓库的地址:我的虚拟机IP:8080/,你们根据自己的情况来命名:

docker tag nginx:latest 我的虚拟机IP:8080/nginx:1.0 

结果如下:

我们可以看到打上tag标签的镜像跟原来的nginx镜像的镜像ID完全一致,说明这并不是一个新的镜像,而是原来的那个镜像。

2)将镜像推送到私有库

docker push 我的虚拟机IP:8080/nginx:1.0 

 结果如下:

这里可以看见,docker根据我们的tag标签,找到了我们自己搭建的私有库的地址,然后推送上去。我们访问一下私有库地址:http://虚拟机IP:8080/,就可以看到:

这里多了一个刚刚push上去的nginx镜像。点进去,可以看到镜像的大小以及tag的版本号:

3)从私有库拉取镜像

在拉去镜像前,我们下把本地已经下载好的nginx两个镜像删除:

可以看到,我的本地已经完全没有nginx的任何镜像了。

接下来,我们通过下面命令,从私有库上面拉取镜像:

docker pull 虚拟机IP:8080/nginx:1.0

结果如下: 

然后,通过docker images命令查看一下都有哪些镜像:

 

这里显示,我们已经成功从私有库拉取镜像了。

4. 总结

接下来,我们总结一下,拉取镜像的重要步骤:

  1. 推送本地镜像到仓库前必须重命名(docker tag)镜像,以镜像仓库地址为前缀
  2. 镜像仓库推送前需要把仓库地址配置到docker服务的deamon.json文件中,被docker信任(这一步在搭建私有库里面有)
  3. 推送镜像使用docker push命令
  4. 拉取镜像使用docker pull命令

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • R语言统计分析——自编函数
  • 盘点那些实用的开发技术!!
  • 扎克伯格说Meta训练Llama 4所需的计算能力是Llama 3的10倍
  • 【Mind+】掌控板入门教程01 “秀”出我创意
  • slf4j 日志框架的使用方法
  • 理想发周榜,不是新能源市场的原罪
  • Blackcat V2.2付费会员制WordPress资源站主题
  • Python应用—利用opencv实现图像匹配
  • 【杂谈】在大学如何学得计算机知识,浅谈大一经验总结
  • VMware Workstation 17 图文安装教程
  • 【Qt】QDateTimeEdit
  • 一刷代码随想录(贪心5)
  • ChatGPT:GPT,GPT2,GPT3,Prompt
  • 请转告HPC计算AI计算单位,选对存储事半功倍
  • 元气森林|每天拆解一个品牌营销方案
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • gf框架之分页模块(五) - 自定义分页
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • JS变量作用域
  • LintCode 31. partitionArray 数组划分
  • mongodb--安装和初步使用教程
  • node入门
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Swift 中的尾递归和蹦床
  • 阿里云前端周刊 - 第 26 期
  • 从伪并行的 Python 多线程说起
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 思否第一天
  • 问题之ssh中Host key verification failed的解决
  • hi-nginx-1.3.4编译安装
  • "无招胜有招"nbsp;史上最全的互…
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (003)SlickEdit Unity的补全
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (力扣题库)跳跃游戏II(c++)
  • (译) 函数式 JS #1:简介
  • (转)c++ std::pair 与 std::make
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)大道至简,职场上做人做事做管理
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • (轉)JSON.stringify 语法实例讲解
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET 命令行参数包含应用程序路径吗?
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET学习教程二——.net基础定义+VS常用设置