关于 Docker Registry (镜像仓库)

news2024/11/24 14:26:59

什么是镜像仓库

概念

镜像仓库(Docker Registry)负责存储、管理和分发镜像,并提供了登录认证能力,建立了仓库的索引。

镜像仓库管理多个 Repository,Repository 通过命名来区分。每个 Repository 包含一个或多个镜像,镜像通过镜像名称和标签(Tag)来区分(也就是每个镜像的每一个小版本)。

一个容器镜像又包含 元数据 和 blob。

元数据就是由 dockerfile 构建出来的描述文件,主要记录了一个容器镜像有多少层,每一层里有什么内容。

blob 中存储的就是真正的可执行文件,也是真正占有空间的东西。

  • 镜像仓库(Registry):要从哪一个镜像仓库拉取镜像,通常通过 DNS 或 IP 地址来确定一个镜像仓库如 hub.docker.com;一个 Registry 中可以存在多个 Repository,Repository 又可分为顶层仓库和用户仓库(用户仓库名称格式为:用户名/仓库名,每个仓库可以包含多个 Tag,每个 Tag 对应一个镜像)。

  • Repository:由某特定的 docker 镜像的所有迭代版本组成的镜像仓库。

  • 镜像名称(name)+ 标签(tag):如 nginx:latest。

  • 认证能力:提供用户注册、登录、登出能力。

  • 索引:提供镜像的索引信息,方便检索。

镜像仓库分类

按是否对外开放划分:

  1. 公有仓库:如阿里云、dockerhub 等被放到公有网络上,不用登录就可以下载,可免费供大家使用的镜像。

  2. 私有仓库:不对外开放,一般被放在私有网络上,只有内部人员可以使用。

按供应商和面向群体划分:

  1. sponsor registry(赞助):第三方的 registry,供客户和 docker 社区版使用。

  2. mirror registry(镜像):第三方的 registry,只让客户使用,例如阿里云等。

  3. vender registry(供应商):由发布 docker 镜像的供应商提供的 registry,例如 Google 和 Redhat 提供的镜像仓库服务。

  4. private registry:通过没有防火墙和额外的安全层的私有实体提供的 registry,仅供内部使用。

镜像仓库工作机制

镜像仓库使用流程

  • 通过 docker login 登录仓库

  • Docker pull 拉取需要的镜像

  • 通过 dockerfile 或 commit 等方式制作完镜像后通过 docker push 上传到仓库

镜像仓库如何在实际研发中使用

首先要知道,一个项目或系统,从开始研发到上线使用的过程中,要经过几个不同的环境。

  • 开发环境:开发人员使用的一套环境。

  • 测试环境:需求开发完成后,发布到供测试人员进行测试的环境。

  • 预发布环境:版本测试完成后,发布到和生产类似的环境,提前模拟生产发布。

  • 生产环境:真正面向客户的环境。

针对不同的阶段要有不同的环境,才能得到想要的效果,所以也就需要不同的镜像来满足不同阶段对于环境的不同需求。

Docker Registry 中的镜像通常由开发人员制作,然后推送到公有或私有的 Registry 上保存,供其他人员使用,例如部署到生产环境。

镜像仓库的拉取机制

启动容器时,docker daemon 会试图从本地获取相关的镜像。本地镜像不存在时,其将从 Registry 中下载该镜像并保存到本地。

搭建 nginx 服务

了解 web 服务器和 Nginx

Web 服务器,一般是指“网站服务器”,是指驻留于互联网上某种类型计算机的程序。Web 服务器可以向 Web 浏览器等客户端提供文档,也可以防止网站文件,让全世界浏览,更可以放置数据文件,让全世界下载。

Nginx 作为 web 服务器可以向各种浏览器等客户端提供浏览服务,比如通过手机、电脑、平板可以访问百度来实现对 web 服务器的访问。

正向代理

由于防火墙的原因,我们并不能直接访问外网,可以借助 VPN 来实现,这就是一个正向代理的例子。

正向代理“代理”的是客户端,而客户端是知道目标的,目标是不知道客户端是通过 VPN 访问的。

反向代理

当我们在外网访问百度的时候,其实会进行一个转发,代理到内网,这就是所谓的反向代理。

也就是说,反向代理“代理”的是服务器端,而且这个过程对于客户端而言是透明的。

开始搭建 Nginx

本来按理来说,应该先介绍搭建过程中涉及到的各种命令,但是,我懒得写了...读者如果遇到了自己不熟悉的命令,请先跳转百度一下!

先找到一个合适的 nginx

root@hcss-ecs-3f38:~# docker search nginx
NAME                               DESCRIPTION                                     STARS     OFFICIAL
nginx                              Official build of Nginx.                        19996     [OK]
unit                               Official build of NGINX Unit: Universal Web …   32        [OK]
nginx/nginx-ingress                NGINX and  NGINX Plus Ingress Controllers fo…   92        
nginxinc/nginx-unprivileged        Unprivileged NGINX Dockerfiles                  154       
nginx/nginx-prometheus-exporter    NGINX Prometheus Exporter for NGINX and NGIN…   42        
nginx/nginx-ingress-operator       NGINX Ingress Operator for NGINX and NGINX P…   2         
nginx/unit                         This repository is retired, use the Docker o…   63        
nginxinc/nginx-s3-gateway          Authenticating and caching gateway based on …   6         
nginx/nginx-quic-qns               NGINX QUIC interop                              1         
nginxinc/amplify-agent             NGINX Amplify Agent docker repository           1         
nginxinc/ingress-demo              Ingress Demo                                    4         
nginxproxy/nginx-proxy             Automated nginx proxy for Docker containers …   142       
nginx/unit-preview                 Unit preview features                           0         
bitnami/nginx                      Bitnami container image for NGINX               192       
nginxproxy/acme-companion          Automated ACME SSL certificate generation fo…   135       
ubuntu/nginx                       Nginx, a high-performance reverse proxy & we…   114       
nginxproxy/docker-gen              Generate files from docker container meta-da…   17        
kasmweb/nginx                      An Nginx image based off nginx:alpine and in…   8         
bitnami/nginx-ingress-controller   Bitnami container image for NGINX Ingress Co…   34        
nginxinc/ngx-rust-tool                                                             0         
nginxinc/mra_python_base                                                           0         
nginxinc/mra-fakes3                                                                0         
bitnami/nginx-exporter             Bitnami container image for NGINX Exporter      5         
rancher/nginx                                                                      2         
root@hcss-ecs-3f38:~# 

但是这样命令行的方式查找,不会显示详细的信息,还是建议到官网去查。(更建议使用已经认证过的 nginx)

找到你喜欢的那个镜像,然后拉取:

root@hcss-ecs-3f38:~# docker pull nginx:1.23.3 
1.23.3: Pulling from library/nginx 
3f9582a2cbe7: Pull complete  
9a8c6f286718: Pull complete  
e81b85700bc2: Pull complete  
73ae4d451120: Pull complete  
6058e3569a68: Pull complete  
3a1b8f201356: Pull complete  
Digest:  
sha256:aa0afebbb3cfa473099a62c4b32e9b3fb73ed23f2a75a65ce1d4b4f55a5 
c2ef2 
Status: Downloaded newer image for nginx:1.23.3 
docker.io/library/nginx:1.23.3 

然后查看镜像是否拉取成功:

root@hcss-ecs-3f38:~# docker images 
REPOSITORY TAG IMAGE ID CREATED SIZE 
nginx 1.23.3 904b8cb13b93 8 days ago 142MB 
hello-world latest feb5d9fea6a5 17 months ago 13.3kB 

然后运行镜像:

docker run --name nginx1 --rm -it -p 80:80 nginx:1.23.3 bash 

然后查看一下,在容器的 shell 中,执行 cat /etc/"release" 查看操作系统还是不是 Ubuntu。

之后,启动 nginx:

root@hcss-ecs-3f38:~# nginx
2023/03/10 11:22:05 [notice] 7#7: using the "epoll" event method 
2023/03/10 11:22:05 [notice] 7#7: nginx/1.23.3 
2023/03/10 11:22:05 [notice] 7#7: built by gcc 10.2.1 20210110  
(Debian 10.2.1-6)  
2023/03/10 11:22:05 [notice] 7#7: OS: Linux 5.4.0-100-generic 
2023/03/10 11:22:05 [notice] 7#7: getrlimit(RLIMIT_NOFILE):  
1048576:1048576 
root@5f377aec47ce:/# 2023/03/10 11:22:05 [notice] 8#8: start  
worker processes 
2023/03/10 11:22:05 [notice] 8#8: start worker process 9 
172.17.0.1 - - [10/Mar/2023:11:22:15 +0000] "GET / HTTP/1.1" 200  
615 "-" "curl/7.68.0" "-"

然后保持这个 shell 不退出,打开另一个 shell 窗口执行 curl 命令,可以看到 nginx 的欢迎信息返回:

Shell 
root@hcss-ecs-3f38:~# curl 127.0.0.1 
<!DOCTYPE html> 
<html> 
<head> 
<title>Welcome to nginx!</title> 
<style> 
html { color-scheme: light dark; } 
body { width: 35em; margin: 0 auto; 
font-family: Tahoma, Verdana, Arial, sans-serif; } 
</style> 
</head> 
<body> 
<h1>Welcome to nginx!</h1> 
<p>If you see this page, the nginx web server is successfully  
installed and 
working. Further configuration is required.</p> 
<p>For online documentation and support please refer to 
<a href="http://nginx.org/">nginx.org</a>.<br/> 
Commercial support is available at 
<a href="http://nginx.com/">nginx.com</a>.</p> 
<p><em>Thank you for using nginx.</em></p> 
</body> 
</html> 

如果你的服务器的 80 端口外部能访问,则可以用浏览器看到 nginx 的欢迎页面。

注意云厂商一般都屏蔽了 80 端口,需要联系客服开通。

之后,shell 退出观察再 curl 发现已经 ping 不通了,说明 nginx 是容器里的,而不是服务器里的。

root@hcss-ecs-3f38:~# curl 127.0.0.1 
curl: (7) Failed to connect to 127.0.0.1 port 80: Connection  
refused 

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

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

相关文章

启动EPLAN时出错,打开设置数据库出现错误 该怎么办?

EPLAN 2.9 突然打不开了&#xff0c;弹出 启动EPLAN时出错,打开设置数据库出现错误 提示框。 提示打开下面设置文件出错。 C:\Users\Public\EPLAN\Settings\Electric P8\2.9.4\x64\Cfg\STATION.Basic.DESKTOP-MUED161.xlk 按照文件路径查找&#xff0c;发现该文件没有丢失&a…

用Pytorch实现线性回归(Linear Regression with Pytorch)

使用pytorch写神经网络的第一步就是需要准备好数据集&#xff0c;设计模型&#xff08;用于计算y_hat&#xff08;y的预测值&#xff09;&#xff09;&#xff0c;构造损失函数和优化器&#xff08;使用PyTorch API&#xff09;&#xff0c;写训练周期&#xff08;前馈&#xf…

线性表的链式存储结构————单链表(java)

线性表的链式存储结构————单链表&#xff08;java&#xff09; 文章目录 线性表的链式存储结构————单链表&#xff08;java&#xff09;链表的概述单链表单链表的创建插入结点的操作尾插法头插法 求单链表的长度输出单链表查找单链表数据元素对应的索引值删除数据元素总…

「AI得贤招聘官」通过首批“AI产业创新场景应用案例”评估

近日&#xff0c;上海近屿智能科技有限公司的「AI得贤招聘官」&#xff0c;经过工业和信息化部工业文化发展中心数字科技中心的严格评估&#xff0c;荣获首批“AI产业创新场景应用案例”。 据官方介绍&#xff0c;为积极推进通用人工智能产业高质量发展&#xff0c;围绕人工智能…

HCNA VRP基础

交换机可以隔离冲突域&#xff0c;路由器可以隔离广播域&#xff0c;这两种设备在企业网络中应用越来越广泛。随着越来越多的终端接入到网络中&#xff0c;网络设备的负担也越来越重&#xff0c;这时网络设备可以通过专有的VRP系统来提升运行效率。通过路由平台VRP是华为公司数…

Large Language Model系列之二:Transformers和预训练语言模型

Large Language Model系列之二&#xff1a;Transformers和预训练语言模型 1 Transformer模型 Transformer模型是一种基于自注意力机制的深度学习模型&#xff0c;它最初由Vaswani等人在2017年的论文《Attention Is All You Need》中提出&#xff0c;主要用于机器翻译任务。随…

mac安装win10到外接固态硬盘

1、制作win10系统 1.1 下载 winToUSB&#xff0c;打开后选择第一个 1.2 选择本地下载镜像&#xff0c; 我用的分区方案是适用于UEFI的GPT模式 1.3 点右下角执行&#xff0c;等待执行完成即可 2、mac系统下载win驱动 2.1 comman空格 搜索启动转换助理&#xff0c;打开后选择…

Linux shell编程学习笔记64:vmstat命令 获取进程、内存、虚拟内存、IO、cpu等信息

0 前言 在系统安全检查中&#xff0c;通常要收集进程、内存、IO等信息。Linux提供了功能众多的命令来获取这些信息。今天我们先研究vmstat命令。 1.vmstat命令的功能、用法、选项说明和注意事项 1.1 vmstat命令的功能 vmstat是 Virtual Meomory Statistics&#xff08;虚拟内…

React 实现五子棋

简介 本文将会基于React 实现五子棋小游戏&#xff0c;游戏规则为先让5颗棋子连成1线的一方获胜。 实现效果 技术实现 页面布局 <div><table style{{border: 1px solid #000, borderCollapse: collapse, backgroundColor: lightgray}}><tbody>{squares.ma…

在 Windows 上运行 Linux:WSL2 完整指南(一)

系列文章目录 在 Windows 上运行 Linux&#xff1a;WSL2 完整指南&#xff08;一&#xff09;&#x1f6aa; 在 Windows 上运行 Linux&#xff1a;WSL2 完整指南&#xff08;二&#xff09; 文章目录 系列文章目录前言一、什么是 WSL&#xff1f;1.1 WSL 的主要特性1.2 WSL 的…

STM32智能工业自动化监控系统教程

目录 引言环境准备智能工业自动化监控系统基础代码实现&#xff1a;实现智能工业自动化监控系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;工业自动化与管理问题解决方案与优化收尾与总结 1. 引言 智能…

【unity笔记】十、Obi绳索插件使用

一. 创建绳索 1.1 新建蓝图 在Assets中右键选择创建->Obi->Rope Blueprint&#xff0c;其属性如图所示 1.2 Obi solver 在场景下创建一个obi solver对象&#xff0c;在该对象下再创建Obi Rope对象。 随后将蓝图拖到Obi Rope对象下的Obi Rope组件&#xff0c;即可看到…

【Web服务与Web应用开发】【C#】VS2019 创建ASP.NET Web应用程序,以使用WCF服务

目录 0.简介 1.环境 2.知识点 3.详细过程 1&#xff09;创建空项目 2&#xff09;添加Web表单 3&#xff09;使用Web表单的GUI设计 4&#xff09;添加服务引用 5&#xff09;在Web的button函数中调用服务&#xff0c;获取PI值 6&#xff09;测试 0.简介 本文属于一个…

环境配置|PyCharm——Pycharm本地项目打包上传到Github仓库的操作步骤

一、Pycharm端的设置操作 通过Ctrl+Alt+S快捷组合键的方式,打开设置,导航到版本控制一栏中的Git,在Git可执行文件路径中,输入Git.exe。 按照下图顺序,依次点击,完成测试。输出如图标④的结果,即可完成测试。 输出下图结果,配置Git成功,如本地未安装Git,需自行安装。

设计模式9-工厂模式(Factory Method)

[TOC](工厂模式(Factory Method)) 写在前面 对象创建模式 通过对象超级模式绕开。动态内存分配&#xff08;new)&#xff0c;来避免对象创建过程中所导致的紧耦合(依赖具体类)&#xff0c;从而支持对象创建的稳定&#xff0c;它是结构抽象之后的第一步工作。 典型模式&…

新版本安卓更换下载源解决gradle时间太久问题

老版本android studio 解决方法如下 : android studio gradle:build model执行时间太久 最近又做到安卓的任务了,下载的安卓studio最新版 这个版本的android studio 不能用上面那种老版本的方法了,需要更新方法 新版本需要跟换两个地方 gradle/wrapper/gradle-wrapper.proper…

JAVA 异步编程(异步,线程,线程池)一

目录 1.概念 1.1 线程和进程的区别 1.2 线程的五种状态 1.3 单线程,多线程,线程池 1.4 异步与多线程的概念 2. 实现异步的方式 2.1 方式1 裸线程&#xff08;Thread&#xff09; 2.1 方式2 线程池&#xff08;Executor&#xff09; 2.1.1 源码分析 2.1.2 线程池创建…

三丰云评测:免费虚拟主机与免费云服务器体验

今天我来为大家分享一下我对三丰云的评测。作为一家知名的云服务提供商&#xff0c;三丰云一直以来备受用户好评。他们提供免费虚拟主机和免费云服务器服务&#xff0c;深受网站建设者和开发者的喜爱。 首先谈谈免费虚拟主机服务。三丰云的免费虚拟主机方案性价比非常高&#x…

代码随想录算法训练营第33天|LeetCode 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

1. LeetCode 509. 斐波那契数 题目链接&#xff1a;https://leetcode.cn/problems/fibonacci-number/ 文章链接&#xff1a;https://programmercarl.com/0509.斐波那契数.html 视频链接&#xff1a;https://www.bilibili.com/video/BV1f5411K7mo 思路&#xff1a; 动态规划步骤…

django-ckeditor富文本编辑器

一.安装django-ckeditor 1.安装 pip install django-ckeditor2.注册应用 INSTALLED_APPS [...ckeditor&#xff0c; ]3.配置model from ckeditor.fields import RichTextFieldcontent RichTextField()4.在项目中manage.py文件下重新执行迁移&#xff0c;生成迁移文件 py…