Docker 搭建私有镜像仓库

一、镜像仓库简介

Docker的镜像仓库是一个用于存储和管理Docker镜像的中央位置。镜像仓库的主要作用是提供一个集中的地方,让用户可以上传、下载、删除和共享Docker镜像。镜像仓库又可以分为公共镜像仓库和私有仓库镜像仓库:

  • 公共镜像仓库
    Docker Hub 是 Docker 官方提供的公共镜像仓库,也是最大的 Docker 镜像仓库之一。它提供了大量的公共镜像供用户使用。只不过Docker Hub 在国内访问速度较慢,一些国内的云服务商提供了类似于 Docker Hub 且更为稳定、快速的公共镜像仓库。例如,网易云镜像服务、DaoCloud 镜像服务、阿里云镜像服务等。

  • 私有镜像仓库
    在某些情况下,企业或个人可能需要在私有网络或受限制的环境中使用Docker镜像。这时就可以搭建自己的私有镜像仓库来存储和共享这些镜像,同时可以使用身份验证和授权来控制访问。Docker Registry 是 Docker 提供的官方仓库服务,将 Docker Registry 部署在自己的服务器上,并通过简单的配置来实现私有仓库的搭建。

二、搭建私有镜像仓库

搭建私有镜像仓库时,一般是拉取和运行 Docker 官方提供的 Registry 镜像来实现,只不过官网没有提供图形化界面,第三方提供了图形化界面的镜像可以拉取 docker-registry-ui 这个镜像。

2.1 通过 Registry 镜像搭建基础版的私有镜像仓库

(1)首先通过docker命令来拉取registry镜像:
docker pull registry

(2)再到服务器上创建一个数据存储卷挂载到容器中的/var/lib/registry 目录,推送到私有镜像仓库的镜像都是存储到这个目录的。
mkdir -p /Users/smile/Desktop/soft/registry

(3)最后通过registry镜像启动容器。
docker run -d -p 5005:5000 -v /Users/smile/Desktop/soft/registry:/var/lib/registry registry
在这里插入图片描述

(4)容器运行成功后就可以往当前的这个私人镜像仓库里面推送和拉取镜像了。通过访问http://你的IP地址:5005/v2/_catalog可以查看当前私有镜像服务中包含的镜像,只不过这样通过registry镜像启动容器只能算的上是一个基础版本的私人镜像仓库,具备仓库管理的完整功能,但是没有图形化界面。
在这里插入图片描述

2.2 搭建有图形化界面的私有镜像仓库

要搭建有图形化界面的私有镜像仓库,其实就是在已经通过registry镜像启动容器的前提下 ,再通过docker-registry-ui 这个镜像再启动一个图形化界面容器。存储以及管理镜像还是在registry镜像启动的容器中完成,docker-registry-ui 镜像启动的容器只负责从registry镜像启动的容器中查询存储的镜像信息然后展示在页面上,所以这里通过docker-compose来同时启动这两个镜像的容器。

(1)首先拉取joxit/docker-registry-ui镜像
docker pull joxit/docker-registry-ui

(2)再到服务器上创建一个registry-ui的安装目录
mkdir -p /Users/smile/Desktop/soft/registry-ui

(3)进入到registry-ui目录,然后创建并编辑 docker-compose.yml 文件

# 进入到registry-ui目录
cd registry-ui# 创建并编辑 docker-compose.yml 文件
vim docker-compose.yml# docker-compose.yml文件内容
version: '3.0'   ## Docker Compose文件使用的是3版本的语法和功能
services:		## 指定要启动的服务registry:		## 第一个启动的服务名image: registry	## 第一个启动的服务使用的镜像volumes:  ## 指定启动服务时挂载的目录- /Users/smile/Desktop/soft/registry:/var/lib/registry- /Users/smile/Desktop/soft/registry/config.yml:/etc/docker/registry/config.ymlports:	## 指定启动服务时主机端口的映射- 5005:5000registry-ui:   ## 第二个启动的服务image: joxit/docker-registry-ui   ## 第二个启动的服务使用的镜像ports:  ## 指定启动服务时主机端口的映射- 5006:80environment:- REGISTRY_TITLE=私有仓库  ## 由于registry-ui启动后的容器需要访问 registry 镜像运行的容器,以便获取registry仓库中存放的镜像列表信息。## 所以127.0.0.1就是对应启动registry服务的主机ip,5005就是对应启动registry服务的主机映射到容器的端口。- REGISTRY_URL=http://127.0.0.1:5005depends_on:   ## 表明 registry-ui 依赖于 registry,这样就会先启动registry- registry

(4)在 registry-ui 目录下运行 docker-compose 命令来执行docker-compose.yml配置文件启动容器。
docker-compose up -d
在这里插入图片描述

(5)最后打开浏览器输入 http://你的IP地址:5006 访问搭建好的 docker 私有镜像仓库的图像化页面。这里虽然页面能正常显示,但是还有两个问题需要解决
在这里插入图片描述
(6)第一个问题:默认为https,不允许http方式推送镜像。解决方式如下:

  1. centos系统:修改docker配置文件 /etc/docker/daemon.json ,在里面添加下面配置
{## 配置http方式,指定启动registry镜像的主机ip+主机映射端口"insecure-registries": ["http://127.0.0.1:5005"]
}

我是mac系统,使用的是Docker Desktop运行的,在设置里面找到Docker Engine,在里面加上上面的配置。

  1. 修改完后重载配置和重启docker服务。
sudo systemctl daemon-reload
sudo systemctl restart docker

(7)第二个问题:docker-registry-ui 镜像启动的容器调用registry镜像启动的容器获取存储的镜像时存在跨域问题。
在这里插入图片描述
解决方法:在registry镜像启动的容器中的config.yml配置文件中添加docker-registry-ui 镜像启动的容器访问地址,允许跨域访问,一般是在启动registry镜像启动的容器时,在主机上新建一个同样的config.yml配置文件,在主机上先改好,启动时再挂载到容器中。也可以启动后再进入到容器中去改,只不过稍微复杂点。

1.先到主机上创建文件并进行编辑:
vim config.yml2. 输入下面内容:
version: 0.1
log:fields:service: registry
storage:cache:blobdescriptor: inmemoryfilesystem:rootdirectory: /var/lib/registry
http:addr: :5000headers:X-Content-Type-Options: [nosniff]## 这里配registry-ui服务的主机ip+主机映射端口Access-Control-Allow-Origin: ['http://127.0.0.1:5006']Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE']Access-Control-Allow-Headers: ['Authorization', 'Accept']Access-Control-Max-Age: [1728000]Access-Control-Allow-Credentials: [true]Access-Control-Expose-Headers: ['Docker-Content-Digest']
health:storagedriver:enabled: trueinterval: 10sthreshold: 33. 启动容器的时将这个config.yml文件挂载到容器的/etc/docker/registry/config.yml,我上面docker-compose.yml文件中启动registry容器时已经添加上去了。

做好上面这些修改好,把之前启动有问题的容器删除,重新在执行下docker-compose up -d命令重新启动这两个服务的容器。
在这里插入图片描述

三、私有仓库镜像管理

(1)首先需要使用 tag 命令重新指定要推送的镜像的标签。因为要想将服务器上的 Docker 镜像推送到刚才搭建的私有镜像仓库中,必须指定该私有镜像的仓库的ip+端口。要想在使用push命令推送镜像时同时指定要推送的私有镜像的仓库的ip+端口,就只能重新将镜像打个标签,且标签中必须带有要推送的私有镜像仓库的ip+端口。
docker tag nginx:latest 127.0.0.1:5005/nginx:latest
在这里插入图片描述

(2)使用push命令推送这个新打的tag镜像到私有仓库:
docker push 127.0.0.1:5005/nginx:latest

(3)使用pull命令拉取私有镜像仓库中的镜像:
docker pull 127.0.0.1:5005/nginx:latest

(4)删除私有仓库上传的镜像:
docker exec aff70d955cf7 rm -rf /var/lib/registry/docker/registry/v2/repositories/nginx

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

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

相关文章

java Web在线考试管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 JSP 在线考试管理系统是一套完善的web设计系统,对理解JSP java 编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使…

网络网络层之(7)PPPOE协议

网络网络层之(7)PPPOE协议 Author: Once Day Date: 2024年4月7日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文档可参考专栏:通信网络技术_Once-Day…

LeetCode-94(二叉树的中序遍历)

1.递归 时间复杂度O(n) public List<Integer> inorderTraversal(TreeNode root) {List<Integer> res new ArrayList<>();accessTree(root,res);return res;}public void accessTree(TreeNode root,List<Integer>res){if(root null){return;}accessT…

最新剧透前沿信息GPT-5或将今年发布

GPT2 很糟糕 &#xff0c;GPT3 很糟糕 &#xff0c;GPT4 可以 &#xff0c;但 GPT5 会很好。 PS:GPT2 很糟糕,3 很糟糕,4 可以,5 很可以。 如果想升级GPT4玩玩&#xff0c;地址 今年发布的具有推理功能的 GPT5不断发展&#xff0c;就像 iPhone 一样 Sam Altman 于 17 日&am…

OpenAI曾转录100万小时视频数据,训练GPT-4

4月7日&#xff0c;纽约时报在官网发布了一篇名为《科技巨头如何挖空心思&#xff0c;为AI收集数据》的技术文章。 纽约时报表示&#xff0c;OpenAI曾在2021年几乎消耗尽了互联网有用的文本数据源。为了缓解训练数据短缺的难题&#xff0c;便开发了知名开源语音识别模型Whispe…

019——IIC模块驱动开发(基于EEPROM【AT24C02】和I.MX6uLL)

目录 一、 IIC基础知识 二、Linux中的IIC&#xff08;韦东山老师的学习笔记&#xff09; 1. I2C驱动程序的层次 2. I2C总线-设备-驱动模型 2.1 i2c_driver 2.2 i2c_client 三、 AT24C02 介绍 四、 AT24C02驱动开发 实验 驱动程序 应用程序 一、 IIC基础知识 总线类…

Idea中 maven 下载jar出现证书问题

目录 1&#xff1a; 具体错误&#xff1a; 2&#xff1a; 忽略证书代码&#xff1a; 3&#xff1a; 关闭所有idea&#xff0c; 清除缓存&#xff0c; 在下面添加如上忽略证书代码 4&#xff1a;执行 maven clean 然后刷刷新依赖 完成&#xff0c;撒花&#xff01;&#x…

A Learning-Based Approach for IP Geolocation

下载地址:Towards IP geolocation using delay and topology measurements | Proceedings of the 6th ACM SIGCOMM conference on Internet measurement 被引次数:185 Abstract 定位IP主机地理位置的能力对于在线广告和网络攻击诊断等应用程序是非常吸引力的。虽然先前的方…

[Kubernetes集群:master主节点初始化]:通过Calico和Coredns网络插件方式安装

文章目录 前置&#xff1a;Docker和K8S安装版本匹配查看0.1&#xff1a;安装指定docker版本 **[1 — 7] ** [ 配置K8S主从集群前置准备操作 ]一&#xff1a;主节点操作 查看主机域名->编辑域名->域名配置二&#xff1a;安装自动填充&#xff0c;虚拟机默认没有三&#xf…

深度学习-多尺度训练的介绍与应用

一、引言 在当今快速发展的人工智能领域&#xff0c;多尺度训练已经成为了一种至关重要的技术&#xff0c;特别是在处理具有复杂结构和不同尺度特征的数据时。这种技术在许多应用中发挥着关键作用&#xff0c;例如图像识别、自然语言处理和视频分析等。 多尺度训练的定义 多尺…

「44」直播间换脸,揭开神秘的面纱……

「44」换脸神器 让你瞬间秒变「明星脸」带货 DeepFace是Facebook的人脸识别系统之一&#xff0c;旨在在照片和视频中准确识别和标识人脸。它使用深度学习和神经网络技术来进行高度精确的人脸匹配和验证。 DeepFace利用了大量的训练数据和先进的人脸识别算法&#xff0c;能够…

Word 画三线表模板---一键套用

1、制作三线表 1&#xff09;设置为无边框 选中表格&#xff0c;点击「右键」——「边框」——「无框线」。 2&#xff09;添加上下边框线 选中表格后&#xff0c;点击【右键】——【表格属性】——【边框和底纹】&#xff0c;边框线选择【1.5磅】&#xff0c;然后点击【上框…

【数组】【最长距离】使循环数组所有元素相等的最少秒数

本文涉及知识点 数组 最长距离 LeetCode2808. 使循环数组所有元素相等的最少秒数 给你一个下标从 0 开始长度为 n 的数组 nums 。 每一秒&#xff0c;你可以对数组执行以下操作&#xff1a; 对于范围在 [0, n - 1] 内的每一个下标 i &#xff0c;将 nums[i] 替换成 nums[i] …

react17+18 中 setState是同步还是异步更新

在类组件中使用setState&#xff0c;在函数式组件中使用hooks的useState。 setstate目录 1. 类组件1.1 react 17版本1.2 react 18版本 2、函数式组件 1. 类组件 1.1 react 17版本 参考内容&#xff1a;第十一篇&#xff1a;setState 到底是同步的&#xff0c;还是异步的&…

Selenium+Chrome Driver 爬取搜狐页面信息

进行selenium包和chromedriver驱动的安装 安装selenium包 在命令行或者anaconda prompt 中输入 pip install Selenium 安装 chromedriver 先查看chrome浏览器的版本 这里是 123.0.6312.106 版 然后在http://npm.taobao.org/mirrors/chromedriver/或者https://googlechrom…

EasyPOI复杂表格导入

EasyPOI复杂表格导入 多表头数据导入方式一导入表格实体类文件导入代码测试结果 方式二导入表格实体类文件导入代码测试结果 总结 设置表格从哪行读取表格内容 多表头数据导入 方式一 导入的表格样式如下 导入表格实体类 package com.demo.entity;import cn.afterturn.eas…

基于令牌桶算法对高并发接口的优化

业务背景 项目中有一个抽奖接口&#xff0c;此接口需要处理高并发问题以及使用脚本作弊的问题。 本文主要探讨如何最大程度地减少脚本作弊行为对抽奖业务的影响。 设计思路 如何减少脚本作弊行为对抽奖业务的影响 使用令牌桶算法&#xff0c;对频率过高的用户请求进行拦截 …

pdffactory pro 8注册码序列号下载 附教程

PdfFactory Pro可以说是一款行业专业且技术领先的的PDF虚拟打印机软件。其不仅占用系统内存小巧&#xff0c;功能强大&#xff0c;可支持用户无需使用Acrobat来创建Adobe PDF即可以进行PDF组件的创建和打印。同时&#xff0c;现在全新的PdfFactory Pro 8也正式上线来袭&#xf…

(源码+部署+讲解)基于Spring Boot + Vue编程学习平台的设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2024年Java精品实战案例《100套》 &#x1f345;文末获取源码联系&#x1f345; &#x1f31f;…

【数据结构】考研真题攻克与重点知识点剖析 - 第 7 篇:查找

前言 本文基础知识部分来自于b站&#xff1a;分享笔记的好人儿的思维导图与王道考研课程&#xff0c;感谢大佬的开源精神&#xff0c;习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析&#xff0c;本人技术…