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

目录

  • 前言
  • 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.mzph.cn/news/159509.shtml

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

相关文章

Android : ListView + BaseAdapter-2简单应用

​​容器与适配器:​​​​​ http://t.csdnimg.cn/ZfAJ7 实体类 News.java package com.example.mylistviewadapter2.entity;public class News {private String title;private String content;private int img;public News(String title, String conte…

金蝶云星空部署包导出文件

文章目录 金蝶云星空部署包导出文件 金蝶云星空部署包导出文件 打开补丁包后,贴入导出文件的文件夹,然后按F2即可导出到目标文件夹。

2023年最佳Aspera替代方案,选择适合的Aspera替代方案

查找当前可用的Aspera替代方案。比较 2023年Aspera替代方案的评级、评论、定价和功能。列出了市场上最好的Aspera替代方案,它们提供与 IBM Aspera 类似的竞争产品。对下面的Aspera替代方案进行排序,以根据需求做出最佳选择。 1、镭速 镭速(私…

java继承和重写(代码演示)

java中的继承和重写 概念 继承 在 Java 中,继承是面向对象编程中的重要概念,它允许一个类(称为子类)继承另一个类(称为父类)的属性和方法。子类可以继承父类的非私有属性和方法,并且可以添加…

每日一题 2304. 网格中的最小路径代价(中等,动态规划)

由于他每一行的每一个值都可以到下一行的所有节点,且路径的代价没有什么相关性,所以只能用 O(mn2) 的动态规划求解 class Solution:def minPathCost(self, grid: List[List[int]], moveCost: List[List[int]]) -> int:m, n len(grid), len(grid[0])…

PC分页操作

page-size 每页显示条目个数 current-page 当前页数 total 数据总数 current-change【currentPage 改变时会触发】 <el-paginationbackgroundlayout"prev, pager, next"align"right"style"padding: 10px":page-size"pageParams.pagesize…

连接k8s和凌鲨

通过连接k8s和凌鲨&#xff0c;可以让研发过程中的重用操作更加方便。 更新容器镜像调整部署规模查看日志运行命令 架构 所有操作通过k8s proxy连接&#xff0c;通过设置namespace label赋予访问权限。只有赋予特定label的namespace才能被访问。 使用步骤 部署k8s proxy 你…

【Java】基于SaaS模式的Java基层医院卫生健康云HIS系统源码

一、模板管理 模板分为两种&#xff1a;病历模板和报表模板。模板管理是运营管理的核心组成部分&#xff0c;是基层卫生健康云中各医疗机构定制电子病历和报表的地方&#xff0c;各医疗机构可根据自身特点特色定制电子病历和报表&#xff0c;制作的电子病历及报表可直接在业务…

【qsort学习及改造冒泡排序能排序任何数】

qsort学习及改造冒泡排序能排序任何数 qsort的使用 qsort的使用 这个函数也不是很复杂&#xff01;&#xff01;&#xff01; qsort(void*base,size_t num,size_t width,int(int (__cdecl *compare )(const void *elem1, const void *elem2 )))  void * base,为数组的基地…

【深度学习】python调用超分Real-ESRGAN

Real-ESRGAN是超分自然场景图和动漫图&#xff0c;视频也可以&#xff0c;项目地址&#xff1a;https://github.com/xinntao/Real-ESRGAN/tree/master 安装python包&#xff1a; basicsr>1.4.2 facexlib>0.2.5 gfpgan>1.3.5 numpy opencv-python Pillow torch>1.…

GD32替换STM32使用HAL库开发问题

GD32HAL库开发问题 1can初始化进入error handle2发送邮箱不能按照填写顺序发送3 GD32修改代码被stm32cudemx覆盖问题 1can初始化进入error handle HAL库的HAL_CAN_Init中&#xff0c;hcan->Instance->MSR寄存器无法清零&#xff0c;STM32先清零&#xff0c;再退出睡眠模…

编译 CUDA加速的 OpenCV-4.8.0 版本

文章目录 前言一、编译环境二、前期准备三、CMake编译四、VS编译OpenCV.sln五、问题 前言 由于项目需要用上CUDA加速的OpenCV&#xff0c;编译时也踩了不少坑&#xff0c;所以这里记录一下。 一、编译环境 我的编译环境是&#xff1a; Win10 RTX4050 CUDA-12.0 CUDNN 8.9.…

代码混淆不再愁:一篇掌握核心技巧

​ 1. 概述 代码混淆是将计算机程序的代码转换成一种功能上等价&#xff0c;但是难以阅读和理解的形式。 对于软件开发者来说&#xff0c;代码混淆可以在一定程度上保护程序免被逆向。 对于逆向工程师来说&#xff0c;学习代码混淆可以帮助我们研究反混淆技术。 2. 常见混淆…

半导体工艺控制设备1

半导体工艺控制设备对芯片良率至关重要&#xff0c;随着制程微缩需求倍增。工艺节点每缩减一代&#xff0c;工艺中产生的致命缺陷数量会增加 50%&#xff0c;因此每一道工序的良品率都要保持在非常高的水平才能保证最终的良品率。当工序超过 500 道时&#xff0c;只有保证每一道…

污水处理智能化:污水处理拓扑图的未来发展趋势

随着城市化进程的不断加速&#xff0c;城市污水处理已经成为了一个重要的问题。污水处理不仅关系到城市环境的质量&#xff0c;还直接影响着人们的生活质量和健康。污水处理拓扑图作为一种新型的污水处理技术&#xff0c;已经被广泛应用于各种污水处理设施中。本文将介绍污水处…

如何判断客户对你是不是真的满意

我们平时生活中打个滴滴、叫个外卖&#xff0c;都会让做星级评价&#xff0c;就算去银行办业务&#xff0c;也会让按个按钮&#xff0c;对窗口的服务做个评价…… 再问一个问题&#xff1a;客户满意了&#xff0c;您的生意就一定好吗&#xff1f; 一、满意度&#xff1a;质量监…

2023 IDEA大会开幕 共探AI新篇章下的技术创新与创业

11月22日&#xff0c;AI与数字经济领域一年一度的科创盛会&#xff0c;2023 IDEA大会在深圳举行。IDEA研究院创院理事长、美国国家工程院外籍院士沈向洋在会上发表主旨演讲&#xff0c;发布IDEA研究院的重磅研产结晶与市场化成果&#xff1b;在大咖云集的论坛环节&#xff0c;多…

AIOps探索 | 应急处置中排障的降本增效方法探索(上)

文章来源&#xff1a;公众号ID-布博士&#xff08;擎创科技资深产品专家&#xff09; 哈喽~友友们大家好&#xff0c;最近运维界也是蛮热闹的&#xff0c;前有语雀多次崩溃&#xff0c;后有阿里全系产品集体故障&#xff0c;不管是哪种&#xff0c;都足够逼疯一个运维工程师。…

Web自动化测试流程:从入门到精通,帮你成为测试专家!

Web应用程序在今天的软件开发中占据着越来越重要的地位。保证Web应用程序的质量和稳定性是非常必要的&#xff0c;而自动化测试是一种有效的方法。本文将介绍Web自动化测试流程&#xff0c;并提供代码示例。 步骤一&#xff1a;选取测试工具 选择适合自己团队的自动化测试工具…