CentOS 搭建 Docker 私有镜像仓库

CentOS 搭建 Docker 私有镜像仓库

搭建 Docker 私有镜像仓库能为团队提供高效、安全的镜像管理方案。下面将详细介绍每个步骤的操作细节,其中命令部分均用代码块展示。

一、环境准备

要搭建 Docker 私有镜像仓库,首先得确保服务器环境符合要求,这是后续操作顺利进行的基础。

1. 服务器要求

建议使用 CentOS 7 或 8 系统,内存至少 2GB,存储空间 20GB 以上,这样能保证仓库在处理多个镜像时运行流畅。

2. 安装 Docker Engine

Docker 是搭建私有仓库的核心依赖,不同 CentOS 版本安装命令略有差异。

  • CentOS 7 安装 Docker:
yum install -y docker
  • CentOS 8 安装 Docker:
dnf install -y docker

安装完成后,需要启动 Docker 服务并设置开机自启,确保服务器重启后 Docker 能自动运行。

systemctl start docker
systemctl enable docker

3. 开放必要端口

Docker 私有仓库默认使用 5000 端口,需在防火墙中开放该端口,否则其他客户端无法访问仓库。

firewall-cmd --zone=public --add-port=5000/tcp --permanent
firewall-cmd --reload

执行上述命令后,5000 端口将被永久开放,防火墙配置也会立即生效。

二、搭建 Docker 私有镜像仓库

准备工作完成后,就可以开始搭建私有仓库了,主要包括拉取仓库镜像和启动仓库容器两个步骤。

1. 拉取 registry 镜像

Docker 官方提供的 registry 镜像专门用于搭建私有仓库,使用以下命令拉取:

docker pull registry

拉取过程中,Docker 会从官方仓库下载镜像文件。拉取完成后,用docker images命令可查看是否成功,若列表中出现 registry 镜像信息,说明拉取成功。

docker images

2. 启动仓库容器

启动容器时,需要进行端口映射、命名容器以及数据挂载等配置,确保仓库能正常运行且数据可持久化。

docker run -d -p 5000:5000 --name myregistry -v /opt/registry:/var/lib/registry registry
  • -d:让容器在后台运行,不占用当前终端。

  • -p 5000:5000:将容器的 5000 端口映射到宿主机的 5000 端口,这样外部才能通过宿主机端口访问仓库。

  • –name myregistry:给容器命名为 myregistry,方便后续管理和操作。

  • -v /opt/registry:/var/lib/registry:把宿主机的/opt/registry目录挂载到容器的/var/lib/registry目录,容器内的镜像数据会存储到宿主机的该目录,即使容器被删除,数据也不会丢失。

启动后,用docker ps命令查看容器是否正常运行,若状态为 “Up”,则表示仓库容器启动成功。

docker ps

三、配置仓库访问权限

为了保证私有仓库的安全性,需要配置访问权限,只有授权用户才能进行推送和拉取操作。

1. 安装 httpd-tools 工具

该工具用于生成存储用户名和密码的文件,是实现身份认证的关键。

  • CentOS 7 安装:
yum install -y httpd-tools
  • CentOS 8 安装:
dnf install -y httpd-tools

2. 创建认证信息存储目录

专门创建一个目录来存放认证文件,便于管理。

mkdir -p /opt/registry/auth

-p选项确保如果目录不存在,会自动创建父目录。

3. 生成密码文件

通过 htpasswd 命令生成包含用户信息的密码文件。

  • 首次创建用户:
htpasswd -Bc /opt/registry/auth/htpasswd username

这里的username是你要创建的用户名,执行命令后会提示输入密码,输入两次确认后,就会在/opt/registry/auth目录下生成htpasswd文件。-B表示使用 bcrypt 算法加密密码,更安全;-c表示创建新文件。

  • 添加其他用户:

如果需要添加更多用户,不需要-c选项,否则会覆盖现有文件。

htpasswd -B /opt/registry/auth/htpasswd another_username

4. 重启仓库容器应用认证配置

先停止并删除之前的容器,再用新的配置启动。

docker stop myregistry
docker rm myregistry

然后执行以下命令重新启动容器,加载认证配置:

docker run -d -p 5000:5000 --name myregistry -v /opt/registry:/var/lib/registry -v /opt/registry/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry

其中,-v /opt/registry/auth:/auth将存放认证文件的目录挂载到容器内;-e设置的环境变量指定了认证方式、认证领域和密码文件路径。

四、配置客户端访问仓库

其他用户的客户端需要进行相应配置才能连接到私有仓库。

1. 非 HTTPS 访问配置

如果仓库未配置 HTTPS,客户端需要允许非 HTTPS 访问。

编辑客户端的/etc/docker/daemon.json文件(不存在则创建):

vi /etc/docker/daemon.json

在文件中添加仓库地址:

{"insecure-registries":["仓库服务器IP:5000"]}

保存退出后,重启 Docker 服务使配置生效:

systemctl restart docker

2. 登录仓库

配置完成后,用户需要登录才能进行操作。

docker login 仓库服务器IP:5000

输入正确的用户名和密码后,显示 “Login Succeeded” 则登录成功。

五、测试私有仓库

完成上述配置后,需要测试仓库是否能正常接收和提供镜像。

1. 推送镜像到仓库

先在客户端对本地镜像进行标记,使其符合私有仓库的命名规范。

docker tag nginx:latest 仓库服务器IP:5000/mynginx:v1

这里以 nginx 镜像为例,仓库服务器IP:5000是私有仓库地址,mynginx:v1是自定义的镜像名和标签。

然后推送标记后的镜像到仓库:

docker push 仓库服务器IP:5000/mynginx:v1

推送过程中会显示进度,完成后提示推送成功。

2. 从仓库拉取镜像

在另一台已配置好的客户端上,拉取刚才推送的镜像,测试仓库是否能正常提供镜像。

docker pull 仓库服务器IP:5000/mynginx:v1

若拉取成功,说明仓库工作正常。

六、仓库维护与扩展

对仓库进行定期维护和合理扩展,能保证其长期稳定运行。

1. 查看仓库镜像信息

通过 HTTP 请求可以查看仓库中的镜像列表和标签信息。

  • 查看所有镜像:在浏览器或用 curl 命令访问http://仓库服务器IP:5000/v2/_catalog。

  • 查看指定镜像标签:访问http://仓库服务器IP:5000/v2/镜像名称/tags/list。

2. 清理冗余数据

随着镜像的频繁推送和删除,仓库会产生无用的冗余数据,需要定期清理。

先进入仓库容器:

docker exec -it myregistry sh

然后执行清理命令:

registry garbage-collect /etc/docker/registry/config.yml

该命令会删除未被引用的镜像数据,释放存储空间。

3. 配置 HTTPS 访问(可选)

为了提高安全性,可配置 HTTPS 访问。需要准备 SSL 证书,然后在启动仓库容器时添加证书相关的挂载和环境变量,具体可参考 Docker 官方文档的详细配置步骤。

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

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

相关文章

Zookeeper的简单了解

Zookeeper的简单了解 Zookeeper是一个为分布式应用程序提供协调服务的中间件。 主要作用有三点:分布式锁、注册中心、配置管理、。 特点有读写速度快(内存存储)、有监听机制(用于发布订阅)、保证了顺序一致性&#xff…

Android Fragment 全解析

在 Android 开发中,Fragment 是构建灵活界面的核心组件 —— 它既能像 “迷你 Activity” 一样包含布局和逻辑,又能灵活地嵌入到不同 Activity 中复用。无论是平板的多面板布局,还是手机的单页切换,Fragment 都能让界面适配更高效…

0-1BFS(双端队列,洛谷P4667 [BalticOI 2011] Switch the Lamp On 电路维修 (Day1)题解)

对于权重为0或1的路径搜索中&#xff0c;使用双端队列可以对最短路问题进行时间复杂度的优化&#xff0c;由于优先队列的O(longn)级别的插入时间&#xff0c;对于双端队列O(1)插入可以将时间复杂度减少至O(M); https://www.luogu.com.cn/problem/P4667 #include<bits/stdc…

基于LNMP架构的分布式个人博客搭建

1.运行环境主机主机名系统服务192.168.75.154Server-WebLinuxWeb192.168.75.155Server-NFS-DNSLinuxNFS/DNS2.基础配置配置主机名&#xff0c;静态IP地址开启防火墙并配置部分开启SElinux并配置服务器之间使用同ntp.aliyun.com进行时间同步服务器之间使用用ntp.aliyun.com进行时…

基于开源AI智能名片链动2+1模式S2B2C商城小程序的人格品牌化实现路径研究

摘要&#xff1a;在数字化消费时代&#xff0c;人格品牌化已成为企业突破同质化竞争的核心策略。本文以开源AI智能名片、链动21模式与S2B2C商城小程序的融合为切入点&#xff0c;构建“技术赋能-关系重构-价值共生”的人格品牌化理论框架。通过分析用户触达、信任裂变与价值沉淀…

设计模式十一:享元模式(Flyweight Pattern)

享元模式是一种结构型设计模式&#xff0c;它通过共享对象来最小化内存使用或计算开销。这种模式适用于大量相似对象的情况&#xff0c;通过共享这些对象的公共部分来减少资源消耗。基本概念享元模式的核心思想是将对象的内在状态&#xff08;不变的部分&#xff09;和外在状态…

Webpack/Vite 终极指南:前端开发的“涡轮增压引擎“

开篇:当你的项目变成"俄罗斯套娃" "我的index.js怎么引入了87个文件?!" —— 这是每个前端开发者第一次面对复杂项目依赖时的真实反应。别担心,今天我要带你认识两位"打包侠":老牌劲旅Webpack和新锐黑马Vite 一、构建工具:前端世界的&qu…

Windows 下配置 GPU 用于深度学习(PyTorch)的完整流程

1. 安装 NVIDIA 显卡驱动 前往 NVIDIA官网 下载并安装适合你显卡型号&#xff08;如 5070Ti&#xff09;的最新版驱动。下载 NVIDIA 官方驱动 | NVIDIA安装完成后建议重启电脑。 2. 安装 CUDA Toolkit 前往 CUDA Toolkit 下载页。 选择 Windows、x86_64、你的系统版本&#…

详解力扣高频SQL50题之180. 连续出现的数字【困难】

传送门&#xff1a;180. 连续出现的数字 题目 表&#xff1a;Logs -------------------- | Column Name | Type | -------------------- | id | int | | num | varchar | -------------------- 在 SQL 中&#xff0c;id 是该表的主键。 id 是一个自增列。 找出所有至少连续…

VSCode 报错 Error: listen EACCES: permission denied 0.0.0.0:2288

使用 npm run dev 启动项目时报错&#xff1a;error when starting dev server: Error: listen EACCES: permission denied 0.0.0.0:2288at Server.setupListenHandle [as _listen2] (node:net:1881:21)at listenInCluster (node:net:1946:12)at Server.listen (node:net:2044:…

[2025CVPR-图象超分辨方向]DORNet:面向退化的正则化网络,用于盲深度超分辨率

1. ​问题背景与挑战​ 盲深度超分辨率&#xff08;Blind Depth Super-Resolution, DSR&#xff09;的目标是从低分辨率&#xff08;LR&#xff09;深度图中恢复高分辨率&#xff08;HR&#xff09;深度图&#xff0c;但现有方法在真实场景下面临显著挑战&#xff1a; ​已知…

关系与逻辑运算 —— 寄存器操作的 “入门钥匙”

前言 哈喽大家好&#xff0c;这里是 Hello_Embed 的新一篇学习笔记。在前文中&#xff0c;我们学习了如何用结构体指针操作硬件寄存器&#xff0c;而寄存器的配置往往离不开位运算和条件判断 —— 比如通过逻辑运算精准修改某几位的值&#xff0c;通过关系运算判断硬件状态。这…

使用 Python 将 CSV 文件转换为带格式的 Excel 文件

在日常的数据处理和报表生成工作中&#xff0c;CSV 格式因其简洁性而被广泛采用。但在展示数据时&#xff0c;CSV 文件往往缺乏格式和结构化样式&#xff0c;不利于阅读与分析。相比之下&#xff0c;Excel 格式&#xff08;如 .xlsx&#xff09;不仅支持丰富的样式设置&#xf…

每天读本书-《如何度过每天的24小时》

全景式书籍探索框架 1. “这本书是关于什么的&#xff1f;”——核心定位 一句话核心思想&#xff1a;这本书的核心并非教你如何高效地工作&#xff0c;而是倡导你将工作之外的“自由时间”视为一个“内在的另一天”&#xff0c;并投入智力与热情去经营它&#xff0c;从而获得精…

前端开发 React 状态优化

为了更深入地理解 React 状态管理的性能问题及其解决方案&#xff0c;本文将详细分析 React Context 和 State 的性能问题&#xff0c;配以示例代码说明优化策略。之后&#xff0c;讨论 Redux 作为不可变库的性能问题&#xff0c;并引出 Immer 作为优化解决方案。1. React Stat…

剑指offer第2版:双指针+排序+分治+滑动窗口

一、p129-JZ21使奇数位于偶数前面&#xff08;不考虑相对位置&#xff09;&#xff08;hoare快排双指针&#xff09; 调整数组顺序使奇数位于偶数前面(二)_牛客题霸_牛客网 如果不考虑相对位置的话&#xff0c;那么我们可以模仿hoare快排&#xff0c;使用双指针的思想&#xf…

14-C语言:第14天笔记

C语言&#xff1a;第14天笔记 内容提要 指针 变量指针与指针变量 指针变量做函数参数指针变量指向数组元素 数组指针与指针数组 数组指针回顾 变量指针与指针变量 变量指针&#xff1a;变量的地址值&#xff08;首地址&#xff09;&#xff0c;本质是指针、地址 指针变量&#…

【笔记】活度系数推导

文章目录一、理想溶液的假设与局限性1.1 理想溶液的定义1.2 理想溶液的局限性二、活度与活度系数的引入2.1 活度的定义2.2 修正后的化学势表达式三、活度系数的物理意义四、为什么需要活度系数&#xff1f;4.1 理论需求4.2 扩散理论中的必要性五、活度系数的具体作用5.1 在化学…

基于Docker的GPU版本飞桨PaddleOCR部署深度指南(国内镜像)2025年7月底测试好用:从理论到实践的完整技术方案

还是网上没找到这个基于Docker的GPU版本飞桨PaddleOCR部署教程&#xff0c;于是就有了这一篇。 这个的确坑很多&#xff0c;可能后面变一个版本就不好用了&#xff0c;也是为什么这篇博客不完全粘贴代码的原因。 端口是示例&#xff0c;可以随意改。在人工智能与文档数字化高速…

Python-初学openCV——图像预处理(三)

目录 一、边缘填充 1、边界复制 2、边界反射 3、边界反射101 4、边界常数 5、边界包裹 二、透视变换 三、图像掩膜 1、制作掩膜 2、与运算 3、颜色替换 四、ROI切割 五、图像添加水印 一、边缘填充 我们对图像进行处理后&#xff0c;需要对空出来的区域进行一个填充…