一起学docker系列之六如何搭建私服版本的Docker镜像仓库

news2024/9/21 12:28:11

目录

  • 前言
  • 1 下载并运行私服版本的Docker镜像仓库
  • 2 准备上传私服的Docker镜像
  • 3 为镜像打上符合私服规范的标签
  • 4 修改Docker守护进程的配置文件
  • 5 推送镜像到私服版本的Docker镜像仓库
  • 6 验证私服的镜像
  • 结语

前言

Docker是一种开源的容器技术,可以让开发者和运维人员快速地构建、部署和运行应用程序。Docker镜像是一种轻量级的、可移植的、自包含的软件包,包含了应用程序的代码、依赖、环境和配置。Docker镜像可以从公共的或者私有的仓库中拉取,也可以推送到仓库中供他人使用。

在本文中,我们将介绍如何搭建一个私服版本的Docker镜像仓库,以及如何使用它来存储和分发自定义的Docker镜像。私服版本的Docker镜像仓库是指只能在内网中访问的仓库,通常用于存储公司内部开发的或者修改过的镜像,以保证安全性和隐私性。
在这里插入图片描述

1 下载并运行私服版本的Docker镜像仓库

要搭建一个私服版本的Docker镜像仓库,我们需要使用Docker官方提供的registry镜像,这是一个用Go语言编写的、遵循Docker Registry HTTP API V2规范的、支持多种存储后端的服务。

下载registry镜像

首先,我们需要从Docker Hub上下载registry镜像,这是一个官方提供的用于搭建私有仓库的镜像。执行以下命令:

docker pull registry

使用docker run命令来运行registry镜像,并指定一些参数来配置它。例如,下面的命令会在后台运行一个registry容器,将5000端口映射到宿主机上,将/company/myregistry目录挂载到容器中的/tmp/registry目录作为存储后端,并给予容器特权模式:

docker run -d -p 5000:5000 -v /company/myregistry:/tmp/registry --privileged=true registry

这样,我们就在本地搭建了一个私服版本的Docker镜像仓库,可以通过http://localhost:5000或者http://宿主机IP:5000来访问它。我们可以使用curl命令来查看仓库中有哪些镜像:

curl -XGET  http://localhost:5000/v2/_catalog

如果仓库为空,我们会得到如下输出:

{“repositories”:[]}

2 准备上传私服的Docker镜像

要使用私服版本的Docker镜像仓库,我们需要先创建或者修改一些Docker镜像,并给它们打上合适的标签。例如,我们可以从ubuntu镜像创建一个新的镜像,并给它增加ifconfig命令,以便查看容器内部的网络情况。我们可以使用docker run命令来运行ubuntu镜像,并进入交互式终端:

docker run -it ubuntu /bin/bash

然后,在容器内部执行以下命令来更新软件源并安装net-tools包:

apt-get update

apt-get install net-tools

接着,我们可以退出容器,并使用docker commit命令来保存容器的修改,并给新的镜像打上标签。例如,下面的命令会将容器xxxx(可以用docker ps -a查看容器ID)保存为example/myubuntu:1.3这个镜像,并添加一些元数据信息:

docker commit -m="ifconfig cmd add" -a="example" xxxx example/myubuntu:1.3

这样,我们就创建了一个新的Docker镜像,并给它打上了example/myubuntu:1.3这个标签。

3 为镜像打上符合私服规范的标签

上面的标签并不符合私服版本的Docker镜像仓库要求,因为它没有指定仓库地址和端口。为了能够推送这个镜像到私服版本的Docker镜像仓库中,我们需要给它重新打上一个符合规范的标签。规范是这样的:

host:port/repository:tag

其中,host是仓库的IP地址或者域名,port是仓库的端口号,repository是仓库中的命名空间,tag是镜像的版本号。例如,下面的命令会给example/myubuntu:1.3这个镜像重新打上一个符合规范的标签:

docker tag example/myubuntu:1.3 192.168.1.189:5000/example/myubuntu:1.3

这里,我们假设私服版本的Docker镜像仓库的IP地址是192.168.1.189,端口号是5000,命名空间是example。我们可以使用docker images命令来查看镜像的标签:

REPOSITORY TAG IMAGE ID CREATED
SIZE example/myubuntu 1.3 9a9c6f8f6a4e 2
minutes ago 72.9MB
192.168.1.189:5000/example/myubuntu 1.3 9a9c6f8f6a4e 2 minutes ago 72.9MB ubuntu latest
f643c72bc252 2 weeks ago 72.9MB registry
latest b6b53be908de 2 weeks ago 26.2MB

我们可以看到,example/myubuntu:1.3和192.168.1.189:5000/example/myubuntu:1.3其实是同一个镜像,只是标签不同。我们可以删除不需要的标签,以节省空间。例如,下面的命令会删除example/myubuntu:1.3这个标签:

docker rmi example/myubuntu:1.3

4 修改Docker守护进程的配置文件

在给镜像打上符合规范的标签后,我们还需要做一件事情,就是修改Docker守护进程的配置文件,以允许使用非安全的HTTP协议来访问私服版本的Docker镜像仓库。默认情况下,Docker守护进程只允许使用HTTPS协议来访问仓库,但是私服版本的Docker镜像仓库可能没有配置SSL证书,所以我们需要在配置文件中添加一项insecure-registries来指定哪些仓库可以使用HTTP协议。配置文件的位置一般是/etc/docker/daemon.json,如果没有这个文件,我们可以自己创建一个。我们可以使用vim命令来编辑这个文件,并增加如下内容:

{
“insecure-registries”:[“192.168.1.189:5000”] }

这里,我们指定了私服版本的Docker镜像仓库的地址和端口号。保存并退出后,我们需要重启Docker守护进程来使配置生效。我们可以使用systemctl命令来重启Docker守护进程:

systemctl restart docker

这样,我们就完成了所有的准备工作。

5 推送镜像到私服版本的Docker镜像仓库

现在我们可以使用docker push命令来推送镜像到私服版本的Docker镜像仓库中了。例如,下面的命令会推送192.168.1.189:5000/example/myubuntu:1.3这个镜像到私服版本的Docker镜像仓库中:

docker push 192.168.1.189:5000/example/myubuntu:1.3

推送成功后,我们可以再次使用curl命令来查看私服版本的Docker镜像仓库中有哪些镜像:

curl -XGET  http://192.168.1.189:5000/v2/_catalog

我们会得到如下输出:

{“repositories”:[“example/myubuntu”]}

从输出中,我们可以看到私服库上存在一个名为example/myubantu的镜像,这就是我们刚才上传的镜像。

6 验证私服的镜像

我们可以使用docker pull命令来从私服版本的Docker Registry拉取我们上传的镜像,然后运行它来验证镜像是否可用。例如,我们可以使用以下命令来拉取并运行刚才上传的镜像:

docker pull 192.168.1.189:5000/example/myubantu:1.3
docker run -it --rm 192.168.1.189:5000/example/myubantu:1.3 /bin/bash

这两个命令会先从私服版本的Docker Registry拉取192.168.1.189:5000/example/myubantu:1.3这个镜像,然后以交互模式运行它,并启动一个bash shell。如果运行成功,我们会看到类似以下的输出:

root@e5c4f4c7a8e8:/#

从输出中,我们可以看到我们已经进入了容器的根目录,这说明镜像是可用的。

结语

通过以上的步骤,我们就完成了使用私服版本的Docker Registry的过程,包括运行私服版本的Docker Registry、上传自己的Docker镜像、验证私服库上的镜像和拉取并运行私服库上的镜像。希望这篇博客对你有所帮助,如果你有任何问题或建议,请在评论区留言。

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

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

相关文章

每日一练 | 华为认证真题练习Day135

1、如果一个以太网数据帧的Length/Tyme0z8100,那么这个数据帧的载荷可能是?(多选) A. TCP数据段 B. UDP数据 C. ICMP报文 D. ARP报文 2、如图所示,路由器R1上部署了静态NAT命令,当PC访问互联网时&#…

ON1 Photo RAW 2024 for Mac——专业照片编辑的终极利器

ON1 Photo RAW 2024 for Mac是一款专为Mac用户打造的照片编辑器,以其强大的功能和易用的操作,让你的照片编辑工作变得轻松愉快。 一、强大的RAW处理能力 ON1 Photo RAW 2024支持大量的RAW格式照片,能够让你在编辑过程中获得更多的自由度和更…

Socket通信之网络协议基本原理

一台机器将自己想要表达的内容,按照某种约定好的格式发送出去,当另外一台机器收到这些信息后,也能够按照约定好的格式解析出来,从而准确、可靠地获得发送方想要表达的内容。这种约定好的格式就是网络协议(Networking P…

C++ 简介、基本语法、数据类型、变量、常量

一、C简介: C是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言。支持过程化编程、面向对象编程和泛型编程。C是C的一个超集,任何合法的C程序都是合法的C程序。 面向对象开发的四大特性: ◆ 封装(Encapsulat…

【转】OAK-D双目相机进行标定及标定结果说明

编辑:OAK中国 首发:A. hyhCSDN 喜欢的话,请多多👍⭐️✍ 内容来自用户的分享,如有疑问请与原作者交流! ▌前言 Hello,大家好,这里是OAK中国,我是助手君。 近期在CSDN刷…

系列十、ThreadLocal的使用场景

一、ThreadLocal的使用场景 (1)使用日期工具类,当用到SimpleDateFormat时,使用ThreadLocal保证线程安全; (2)全局存储用户信息(用户信息存入ThreadLocal,那么当前线程在任…

SSM客户管理系统CRM开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 客户管理系统CRM是一套完善的信息系统,结合springMVC框架完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模…

五金零件经营小程序商城的效果如何

五金零件无论批发还是零售都有很高的需求度,传统消费者往往是线下门店寻找购买,但如今更多的客户选择线上消费,而商家们也选择线上开店拓展更广的客源及生意增长。 除了第三方平台进驻外,私域开店对商家来说也是一种方式。微信场…

【20年扬大真题】编写程序,功能是从键盘输入若干4位数字学号,然后输出学号中百位数字是3的学号 (输入0时结束循环)

【20年扬大真题】 编写程序&#xff0c;功能是从键盘输入若干4位数字学号&#xff0c;然后输出学号中百位数字是3的学号 &#xff08;输入0时结束循环&#xff09; #include<stdio.h> #define MaxSize 20 int BaiWei3(int x) {x x / 100;if (x % 10 3) {return 1;}els…

python中的exec()、eval()以及complie()

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 1.eval函数 函数的作用&#xff1a; 计算指定表达式的值。 也就是说它要执行的python代码只能是单个表达式&#xff08;注意eval不支持任何形式的赋值操作&…

iEnglish全国ETP大赛:教育游戏助力英语习得

“seesaw,abacus,sword,feather,frog,lion,mouse……”11月18日,经过3局的激烈较量,“以过客之名队”的胡玲、黄长翔、林家慷率先晋级“玩转英语,用iEnglish”第三届全国ETP大赛的16强,在过去的周末中,还有TIK徘徊者队、不负昭华队、温柔杀戮者队先后晋级。据悉,根据活动规则,在…

全民阅读营造良好氛围 助力培养孩子阅读习惯

日前,2023年全民终身学习活动周全国总开幕式在重庆举行,自2005年起,终身学习活动周已连续举办了18届,累计带动4亿多群众参与全民终身学习活动周,有效推进全面阅读。 随着全民阅读氛围的持续浓厚,阅读不再是语文学科的专项,不再是学校教育的专属,家庭、社会都在积极参与进来。尤…

多篇论文介绍-可变形卷积

01 具有双层路由注意力的 YOLOv8 道路场景目标检测方法 01 摘要: 随着机动车的数量不断增加&#xff0c;道路交通环境变得更复杂&#xff0c;尤其是光照变化以及复杂背景都会干扰目标检测算法的准确性和精度&#xff0c;同时道路场景下多变形态的目标也会给检测任务造成干扰&am…

飞书多维表格【单选】的排序规则

飞书多维表格的排序竟然不是根据拼音排的&#xff0c;而是根据单选的先后顺序进行排序的。

Mysql查看Binlog文件

前期准备 检查是否开启binlog mysql> SHOW VARIABLES LIKE log_bin; // 或者 mysql> SHOW VARIABLES LIKE log%;ON代表开启&#xff0c;OFF代表关闭。如为OFF需 开启 后才能查看&#xff0c;但只能查看开启之后时间点的。 查看binlog文件有哪些 一般yum安装的mysql…

left join查询耗时太慢,添加索引解决问题

背景 因为最近自己用的小app越用感觉加载越慢&#xff0c;以为是自己app开发逻辑出现问题了&#xff0c;结果才发现是自己很早以前的代码用到的是left join多表联查&#xff0c;以前因为数据少&#xff0c;所以没有感觉&#xff0c;现在数据量稍微一大&#xff0c;耗时就非常严…

Android跨进程传图片或者大数据(解决TransactionTooLargeException)

跨进程传图片方案 直接intent传bitmap使用文件读写intent传递自定义binder&#xff0c;binder中传递image使用网络传输 一、直接intent传bitmap 优势 使用简单 劣势 相关代码可能有侵入性&#xff0c;必须在四大组件中接收。 intent传递数据的总大小是1MB&#xff0c;其中…

Redis(哨兵模式)

哨兵模式的定义&#xff1a; 是Redis的一种高可用解决方案&#xff0c;通过运行多个Redis实例来监控主从Redis实例的状态&#xff0c;当主实例出现故障时&#xff0c;哨兵会自动选举一个从实例作为新的主实例&#xff0c;从而保证系统的高可用性。哨兵模式可以监控多个主从Red…

感恩三十载 再创新辉煌——中国音乐著作权协会成立30周年暨著作权集体管理制度实施30周年纪念大会在京召开

感恩三十载 再创新辉煌 2023年11月19日&#xff0c;中国音乐著作权协会成立30周年暨著作权集体管理制度实施30周年纪念大会在北京举行。中宣部副部长张建春&#xff0c;国际作者和作曲者协会联合会&#xff08;CISAC&#xff09;总干事甘迪奥龙&#xff08;Gadi Oron&#xff0…

【追求卓越02】数据结构--链表

引导 今天我们进入链表的学习&#xff0c;我相信大家对链表都很熟悉。链表和数组一样&#xff0c;作为最基础的数据结构。在我们的工作中常常会使用到。但是我们真的了解到数组和链表的区别吗&#xff1f;什么时候使用数组&#xff0c;什么时候使用链表&#xff0c;能够正确的选…