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方式推送镜像。解决方式如下:
- centos系统:修改docker配置文件
/etc/docker/daemon.json,在里面添加下面配置
{## 配置http方式,指定启动registry镜像的主机ip+主机映射端口"insecure-registries": ["http://127.0.0.1:5005"]
}
我是mac系统,使用的是Docker Desktop运行的,在设置里面找到Docker Engine,在里面加上上面的配置。
- 修改完后重载配置和重启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
相关文章:
Docker 搭建私有镜像仓库
一、镜像仓库简介 Docker的镜像仓库是一个用于存储和管理Docker镜像的中央位置。镜像仓库的主要作用是提供一个集中的地方,让用户可以上传、下载、删除和共享Docker镜像。镜像仓库又可以分为公共镜像仓库和私有仓库镜像仓库: 公共镜像仓库 Docker Hub 是…...
Nginx反向代理与Tomcat实现ssm项目前后端分离部署
Nginx nginx是一款http和支持反向代理的web服务器,以其优越的性能被广泛使用。以下是百度百科的介绍。 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.…...
element UI 日期选择器 当前年份之前不可选
<el-date-pickertype"year"format"YYYY"value-format"YYYY"v-model"declareYear"placeholder"请选择年份":disabled-date"disabledDateFun"/>function disabledDateFun(time) {if (time.getFullYear() <…...
windows wireshark抓包rtmp推流出现TCP Retransmission
解决办法:tcp.port1935 && !(tcp.analysis.retransmission)...
C++之std::initializer_list详解
相关文章系列: C/C中{}的用法总结(全)_c {}-CSDN博客 目录 1.引言 2.容器的初始化 3.函数中使用std::initializer_list 4.自定义类型中使用std::initializer_list 5.迭代std::initializer_list 6. 在模板中使用std::initializer_list 7.std::initializer_lis…...
4月9日学习记录
[GXYCTF 2019]禁止套娃 涉及知识点:git泄露,无参数RCE 打开环境,源码什么的都没有,扫描后台看看 扫描发现存在git泄露 用githack下载查看得到一串源码 <?php include "flag.php"; echo "flag在哪里呢&#…...
解析快手滑块验证码的逆向工程
快手滑块验证码是一种常见的反机器人验证方式,通过模拟用户拖动滑块来验证用户身份。本文将介绍如何逆向工程快手滑块验证码的加密算法和轨迹生成方式,并提供详细的代码实现。 1. 加密算法解析 首先,我们需要了解滑块验证码生成时所用的加密…...
mysql运维知识总结
1. 日志 1.1 错误日志 错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过 程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。 该日志是默认开启的&…...
【目标检测】-入门知识
1、回归与分类问题 回归问题是指给定输入变量(特征)和一个连续的输出变量(标签),建立一个函数来预测输出变量的值。换句话说,回归问题的目标是预测一个连续的输出值,例如预测房价、股票价格、销售额等。回归问题通常使用回归分析技术,例如线性回归、多项式回归、决策树…...
翻译笔实现文字识别功能的原理
翻译笔作为一种便携式设备,近年来在语言学习、旅游、商务交流等领域中逐渐受到人们的青睐。其核心功能之一便是文字识别,即将纸质或电子文档中的文字快速、准确地转化为机器可读的文本格式。那么,翻译笔是如何实现这一神奇功能的呢࿱…...
文件批量重命名,繁体中文秒变简体中文,轻松实现高效翻译
在数字化时代,我们的工作、学习和生活都离不开电脑文件。随着时间的推移,文件数量不断增加,管理起来变得越来越困难。你是否曾经为如何高效、有序地管理文件而烦恼?现在,有一款强大的文件批量重命名工具,它…...
UML学习
UML(Unified Modeling Language):统一建模语言,提供了一套符号和规则来帮助分析师和设计师表达系统的架构、行为和交互 类图:描绘类、接口之间的关系(继承、实现、关联、依赖等)以及类的内部结构(属性和方法),直观展现系统的静态…...
【话题:工作生活】2022年工作总结--疫情下的上海,疫情中的我。
现在是阳历2023年11月27日星期一,我再次开始撰写自己的年终工作总结。希望再过1、2个月,这份年终总结能够出炉,与大家相遇。 给自己定个小目标,年终的工作生活总结坚持写10年。我2017年毕业,之后就开始写每年的年终总结…...
13.磁盘逻辑卷管理
目录 概述实践查看盘 概述 实践 查看盘 命令 lsblk [rootks2p-hadoop04 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 447.1G 0 disk ├─sdb1 8:17 0 200M 0 part /boot/efi ├─sdb2 8:18 …...
SFTP服务详解:安全高效的文件传输新选择
在数字化日益盛行的今天,文件传输已成为我们日常生活和工作中不可或缺的一部分。然而,传统的文件传输方式往往存在着安全隐患和效率低下的问题。幸运的是,SFTP(SSH File Transfer Protocol)服务的出现为我们提供了一个安全、高效的文件传输解决方案。今天,就让我们一起深…...
mp4转flv怎么转?电脑怎么把视频转成flv?
MP4(MPEG-4 Part 14)是一种多媒体容器格式,广泛用于包含视频、音频、字幕等多种数据流。MP4因其高度灵活性、压缩效率和兼容性成为视频领域的主流格式,支持范围涵盖从在线视频到移动设备的各类应用场景。 FLV文件格式的多个优点 …...
计算机视觉——Python OpenCV BGR转HSV
这里将介绍如何使用 OpenCV 与 Python 来作彩色影像转HSV(RGB to HSV 或 BGR to HSV),在写 Python 影像处理程序时常会用到 OpenCV cvtColor 作颜色空间转换的功能,接下来介绍怎么使用 Python 搭配 OpenCV 模块来进行 RGB/BGR 转 HSV 彩色转HSV空间。 H…...
DC9 Debian和sql注入
信息收集 sudo arp-scan -l 列出局域网主机 arp-scan向局域网中所有可能的ip地址发出arp请求包,如果得到arp回应,就证明局域网中某台主机使用了该ip dc9的ip : 192.168.146.133 访问网页 cms为Debian 端口扫描 22端口是filtered 隐藏目…...
Windows系统上运行appium连接iOS真机自动化测试
步骤: 1、windows安装tidevice工具 2、Mac系统打包安装WebDriverAgent(WDA)工具 3、安装Appium 4、连接iOS手机 iOS自动化的实现和执行都依赖Mac系统,因为需要通过Xcodebuild编译安装WDA (WebDriverAgent)到iOS设备中,通过WDA实现对被测应用进行操作。而Windows系统无…...
vue3使用jsQR解析二维码
1.了解jsQR jsQR是一个纯javascript脚本实现的二维码识别库,不仅可以在浏览器端使用,而且支持后端node.js环境。jsQR使用较为简单,有着不错的识别率。 2.效果图 3.二维码 4.下载jsqr包 npm i -d jsqr5.代码 <script setup> import …...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
