一起学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.hqwc.cn/news/205618.html

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

相关文章

QML22、常规组件Page

Page是一个容器控件,可以方便地向页面添加页眉和页脚项。 title : string 此属性保存页面标题。 header : Item 此属性保存页眉项。标题项被定位到顶部,并调整大小为页面的宽度。缺省值为空。 注意:指定一个ToolBar, TabBar,或DialogButtonBox作为页眉会自动将各自的ToolBar…

Mysql 8.0主从复制模式安装(兼容Mysql 5.7)

Mysql V8.0.35安装 官网地址:MySQL :: Download MySQL Community Server 下载【Mysql 8.0.35】压缩包 解压压缩包,仅保留6个安装文件即可 mysql-community-client-8.0.31-1.el7.x86_64.rpm mysql-community-client-plugins-8.0.31-1.el7.x86_64.rpm my…

Vocoder,声码器详解——语音信号处理学习(十)

参考文献: [1] Vocoder (由助教許博竣同學講授)哔哩哔哩bilibili [2] Oord A, Dieleman S, Zen H, et al. Wavenet: A generative model for raw audio[J]. arXiv preprint arXiv:1609.03499, 2016. [3] https://deepmind.com/blog/article/wavenet-generative-mode…

涉密人员离职怎么做好安全管理?

在信息安全领域,涉密人员的离职安全管理具有极其重要的意义。一旦涉密人员离职,可能会对单位的信息安全造成威胁,因此必须采取有效的措施来确保涉密人员离职后的信息安全。 一、涉密人员离职安全管理的现状 目前,许多单位在涉密人…

js双击修改元素内容并提交到后端封装实现

前面发过一个版本了,后来又追加了些功能。重新发一版。新版支持select和radio。 效果图: 右上角带有绿标的,是可以修改的单元格。如果不喜欢显示绿标,可以传递参数时指定不显示,如果想改为其它颜色,也可以…

Python 跨文件夹导入自定义包

一、问题再现 有时我们自己编写一些模块时,跨文件夹调用会出现ModuleNotFoundError: No module named XXX 二、解决方案 只需要在下层文件夹中的__init__.py文件中,添加如下代码即可: import sys from os import path sys.path.append(pa…

windows11记事本应用程序无法打开,未响应,崩溃,卡死

windows11记事本应用程序无法打开,未响应,崩溃,卡死 文章目录 问题描述搜索引擎(度娘)卸载后如何安装问题未解决另一个解决方案:步骤:1.设置 → 语音和区域 → 输入2.选择“高级键盘设置”3.替…

神经网络常用激活函数详解

🎀个人主页: https://zhangxiaoshu.blog.csdn.net 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️,如有错误敬请指正! 💕未来很长,值得我们全力奔赴更美好的生活&…

代码文档浏览器 Dash mac中文版软件特色

Dash mac是一个基于 Python 的 web 应用程序框架,它可以帮助开发者快速构建数据可视化应用。Dash 的工作原理是将 Python 代码转换成 HTML、CSS 和 JavaScript,从而在浏览器中呈现交互式的数据可视化界面。Dash 提供了一系列组件,包括图表、表…

html网站-关于发展历程的案例

一、案例一 1.效果图&#xff1a; 2.代码&#xff1a; 所用到的文件自行在官网下载&#xff0c;也可在git上拉取。 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><meta…

贪心算法及相关例题

目录 什么是贪心算法&#xff1f; leetcode455题.分发饼干 leetcode376题.摆动序列 leetcode55题.跳跃游戏I leetcode45题.跳跃游戏II leetcode621题.任务调度器 leetcode435题.无重叠空间 leetcode135题.分发糖果 什么是贪心算法&#xff1f; 贪心算法更多的是一种思…

BW4HANA 从头到脚 概念详解 ---- 持续更新中

1. 理解BW4HANA是干嘛的 好歹干了这么久的活了&#xff0c;从当初的啥也不懂到现在感觉啥都知道点&#xff0c;虽然知道的有限&#xff0c;但是也不是小白。渐渐的也知道了SAP开发的一些逻辑。本来咱是想当个BW的大牛的。但是现在感觉这条船要沉了是怎么回事。个人才稍微摸到点…