一起学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镜像、验证私服库上的镜像和拉取并运行私服库上的镜像。希望这篇博客对你有所帮助,如果你有任何问题或建议,请在评论区留言。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析-改进蜣螂算法优化最小二乘支持向量机的分类预测

分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析-改进蜣螂算法优化最小二乘支持向量机的分类预测 目录 分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析-改进蜣螂算法优化最小二乘支持向量机的分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.多特…

HarmonyOS(三)—— 应用程序入口—UIAbility

前言 学习过android的同学都是知道Activity,Activity是Android组件中最基本也是最为常见用的四大组件之一,用户可以用来交互为了完成某项任务。 Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setCon…

Nevron Vision for .NET 2023.1 Crack

Nevron Vision for .NET 适用于桌面和 Web 应用程序的高级数据可视化 Nevron Vision for .NET提供最全面的组件,用于构建面向 Web 和桌面的企业级数据可视化应用程序。 该套件中的组件具有连贯的 2D 和 3D 数据可视化效果,对观众产生巨大的视觉冲击力。我…

阅读记录【arXiv2020】 Adaptive Personalized Federated Learning

Adaptive Personalized Federated Learning 论文地址: https://arxiv.org/abs/2003.13461 摘要 对联邦学习算法个性化程度的研究表明,只有最大化全局模型的性能才会限制局部模型的个性化能力。在本文中,我们提倡自适应个性化联合学习&…

springboot前后端分离项目配置https接口(ssl证书)

文章目录 说明vue.js前端部署vue.js项目axios请求配置本地创建日志文件创建Dockerfile文件配置ssl证书nginx.confvue项目打包上传创建容器部署 后端springboot项目部署配置ssl证书打包部署 补充:jsk证书和pfx证书补充:两种证书的转化JKS转PFXPFX 转 JKS …

基于蛇优化算法优化概率神经网络PNN的分类预测 - 附代码

基于蛇优化算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于蛇优化算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于蛇优化优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络…

docker报错standard init linux.go:228 exec user process caused: exec format error

1、报错 使用Dockerfile自己做的服务镜像,docker run时启动失败,报错如下: standard init linux.go:228 exec user process caused: exec format error2、原因一 当前服务器的CPU架构和构建镜像时的CPU架构不兼容。比如做镜像是在arm机器下…

图形数据库的实战应用:如何在 Neo4j 中有效管理复杂关系

关系数据库管理系统( RDBMS ) 代表了最先进的技术,这在一定程度上要归功于其由周边技术、工具和广泛的专业技能组成的完善的生态系统。 在这个涵盖信息技术(IT) 和运营技术(OT) 的技术革命时代,人们普遍认识到性能方面出现了重大挑战,特别是…

Elasticsearch:将最大内积引入 Lucene

作者:Benjamin Trent 目前,Lucene 限制 dot_product (点积) 只能在标准化向量上使用。 归一化迫使所有向量幅度等于一。 虽然在许多情况下这是可以接受的,但它可能会导致某些数据集的相关性问题。 一个典型的例子是 Cohere 构建的嵌入&#x…

CSS特效016:天窗扬起合上的效果

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧,主要包含CSS布局,CSS特效,CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点,CSS特效主要是一些动画示例,CSS花边是描述了一些CSS…

计算3个点的6种分布在平面上的占比

假设平面的尺寸是6*6,用11的方式构造2,在用21的方式构造3 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 2 2 3 3 3 x 3 3 2 2 2 1 2 2 2 2 2 1 2 2 在平面上有一个点x,11的操作吧平面分成了3部分2a1,2a…

OCR是什么意思,有哪些好用的OCR识别软件?

1. 什么是OCR? OCR(Optical Character Recognition)是一种光学字符识别技术,它可以将印刷体文字转换为可编辑的电子文本。OCR技术通过扫描和分析图像中的文字,并将其转化为计算机可识别的文本格式,从而…

DataFunSummit:2023年OLAP引擎架构峰会-核心PPT资料下载

一、峰会简介 OLAP技术是当前大数据领域的热门方向,该领域在各个行业都有广泛的使用场景,对OLAP引擎的功能有丰富多样的需求。同时,在性能、稳定性和成本方面,也有诸多挑战。目前,OLAP技术没有形成统一的事实标准&…

使用SpringBoot集成MyBatis对管理员的查询操作

增删改查中的查询操作,对所有的普通管理员进行查询操作。 效果展示: 不仅可以在打开页面时进行对管理员的自动查询操作,还可以在输入框进行查询。 首先是前端向后端发送POST请求,后端接收到请求,如果是有参数传到后端…

Py之wikipedia-api:wikipedia-api的简介、安装、使用方法之详细攻略

Py之wikipedia-api:wikipedia-api的简介、安装、使用方法之详细攻略 目录 wikipedia-api的简介 wikipedia-api的安装 wikipedia-api的使用方法 1、 创建 Wikipedia并进行查询 wikipedia-api的简介 Wikipedia-API是一个易于使用的Python封装,用于访…

传统企业如何实现数字化转型?如何加快企业数字化转型?

科技的发展给社会带来了各种变革,技术日新月异,很多传统的东西都被大众抛之脑后,在这个以技术和数据运营为导向的数字化时代,传统企业想要保持足够的核心竞争力,就必须跟上时代的步伐,进行企业数字化转型&a…

使用PySpark 结合Apache SystemDS 进行信号处理分析 (离散傅立叶变换)的简单例子

文章大纲 简介 :什么是 SystemDS ?环境搭建与数据 准备数据预处理模型训练 与 结果评估参考文献简介 :什么是 SystemDS ? SystemDS is an open source ML system for the end-to-end data science lifecycle from data integration, cleaning, and feature engineering, ov…

语音识别入门——常用软件及python运用

工具以及使用到的库 ffmpegsoxaudacitypydubscipylibrosapyAudioAnalysisplotly 本文分为两个部分: P1:如何使用ffmpeg和sox处理音频文件 P2:如何编程处理音频文件并执行基本处理 P1 处理语音数据——命令行方式 格式转换 ffmpeg -i video…

HarmonyOS ArkTS Video组件的使用(七)

概述 在手机、平板或是智慧屏这些终端设备上,媒体功能可以算作是我们最常用的场景之一。无论是实现音频的播放、录制、采集,还是视频的播放、切换、循环,亦或是相机的预览、拍照等功能,媒体组件都是必不可少的。以视频功能为例&a…

java--飞翔的小鸟

游戏玩法:通过鼠标点击使小鸟上下移动穿过柱子并完成得分,小鸟碰到柱子或掉落到地面上都会结束游戏。 游戏内图片 Brid类: package bird;import org.omg.CORBA.IMP_LIMIT;import javax.imageio.ImageIO; import java.awt.image.BufferedIma…