Docker容器之镜像仓库详解

article/2025/3/12 13:30:29

Docker容器之镜像仓库详解

文章目录

  • Docker容器之镜像仓库详解
    • 1. 什么是Docker Image?
    • 2. 什么是Docker Registry?
    • 3. 镜像相关的操作

本文将集中对镜像、仓库、容器的概念与三者之间的联系进行详细介绍,以及基本的镜像管理操作。

1. 什么是Docker Image?

About Docker Image

容器是容器镜像的运行实例。容器镜像是一个不可变的只读文件,其中包含有关创建Docker容器的说明。每次基于容器镜像文件启动容器时,无论在何处部署容器镜像文件,都将获得完全相同的Docker容器。

在这里插入图片描述
Docker镜像是一个只读的模板,含有启动容器所需要的文件系统及其内容,因此,其用于创建并启动容器。比如,一个镜像可以包含一个运行在Apache上的Web应用和其使用的Ubuntu操作系统。

镜像是用来创建容器的。Docker提供了简单的方法来建立新的镜像或者升级现有的镜像,你也可以下载别人已经创建好的镜像。Docker镜像是Docker的 构造 部分。

在这里插入图片描述

如上图所示,镜像采用分层构建机制,最底层为bootfs,其次为rootfs。

  • bootfs:用于系统引导的文件系统,包括BootLoader和kernel,容器启动完成后会会被卸载以节约内存资源;

  • rootfs:位于bootfs之上,表现为docker容器的根文件系统;

    • 传统模式中,系统启动之时,内核挂载rootfs时会首先将其以“只读”模式挂载,完整性自检完成后将其重新挂载为读写模式;
    • docker中,rootfs由内核以“只读”模式挂载,而后通过“联合挂载”技术额外挂载一个“可写”层,容器中的写操作都在这个层完成。

Docker Image Layer

通常,我们下载的镜像可能包含了很多层,位于下层的镜像称为父镜像(parent image),最底层的称为基础镜像(base image);最上层为“可读写”层,即可写容器。其下层均为“只读”

如下图所示中,基础镜像为ubuntu,这是可能是一个裁剪过的ubuntu系统,它作为整个镜像的base image;当加入了emacs后,又重新创建了一个包含了ubuntu和emacs的镜像;随后在emacs镜像重新加入Apache,又重新创建了一个包含了ubuntu、emacs、Apache的镜像;接下来,启动容器后,docker会在这些父镜像的最上层附加一层“可写容器”层。

容器在启动时,会将该镜像中的所有父镜像按顺序下载至本地,再启动容器。
在这里插入图片描述

base image通常都是由docker hub的专业维护人员制作而成,有了base image,再制作镜像就相对

通过上图我们了解到,镜像是分了很多层,那么这些层又是通过何种技术实现的,这就是接下来需要讨论的,AuFS和OverlayFS。

AuFS

AuFS的英文全称为Adanced multi-layered Unification File System(高级多层统一文件系统),它是一种Union File System。Union FS指把不通物理位置的目录合并mount到同一个目录中。UnionFS的一个显著的作用,即将一个CD/DVD和一个硬盘中的目录给联合挂载到一起,而后就可以对这个只读的CD/DVD上的文件进行修改,但是,修改的文件不是存在原来的CD/DVD上,而是存于硬盘中的目录。

AuFS主要就是用于为Linux文件系统实现“联合挂载”,它是UnionFS的重新实现,由Junjiro Okajima(岡島順治郎)在2006年开发的。

Docker最初使用aufs作为容器文件系统层,而且它目前仍作为存储后端之一来支持;aufs的竞争产品是overlayfs,后者从3.18版本开始被合并到Linux内核。

Docker的分层镜像,除了aufs,docker还支持brtfs,devicemappervfs等,在ubuntu系统下,docker默认的容器文件系统为aufs,而在CentOS7上,最初用的是devicemapper,现在是overlayfs。据说,devicemapper的表现极不稳定。

OverlayFS

OverlayFS是一个面向Linux的文件系统服务,其实现一个面向其他文件系统的联合挂载。

它于2014年被合并到LInux内核的3.18版本。其4.0版本带来必要的改进,例如Docker中所需的overlay2存储驱动程序。

OverlayFS的主要机制涉及当两个文件系统提供同一名称的目录时目录访问的合并。除此之外,OverlayF呈其中一个所产生的对象(如果有),“上层”文件系统优先。OverlayFS与其他覆盖型文件系统不同,OverlayFS合并的子目录树不一定来自不同的文件系统。OverlayFS支持在上层文件系统中的[whiteout和opaque目录,以允许删除文件和目录。

虽然截止2016年11月,大部分Linux发行版的Live CD使用AuFS,但Slackware为其Live CD使用OverlayFS。

在docker最新的18.09版本中,docker在redhat及centos等系统中,默认使用的便是overlay2的存储驱动程序。

[root@localhost ~]# docker info
Containers: 1Running: 1Paused: 0Stopped: 0
Images: 4
Server Version: 18.09.2
Storage Driver: overlay2Backing Filesystem: xfsSupports d_type: trueNative Overlay Diff: true

2. 什么是Docker Registry?

关于Docker Registry

Registry可以理解为仓库,它是用来保存所有创建好的镜像统一存储的位置。它分为私有仓库(Private Registry)和公共仓库(Public Registry)。公有的Docker仓库名字是Docker Hub。Docker Hub提供了庞大的镜像集合供使用。这些镜像可以是你自己创建的,或者你也可以在别人的镜像基础上创建。Docker仓库是Docker的 分发 部分。

启动容器时,docker daemon会试图从从本地获取相关镜像;当本地镜像不存在时,其将从Regitry中下载该镜像并保存至本地;pull镜像必须使用https协议,如果要使用http,必须在配置文件中明确指定信任该http站点

在这里插入图片描述

Docker Registry的分类

Registry用户保存docker镜像,包括镜像的层次结构和元数据。用户可以自建Registry,也可以直接使用docker官方的Docker Hub。

Registry分为以下四种类型:

  • Sponsor Registry:第三方的Registry,供客户和docker社区
  • Mirror Registry:第三方的Registry,只让客户使用。比如阿里云注册后才可使用。
  • Vendor Registry:由发布Docker镜像的供应商提供的Registry;通常代表是组织如redhat、google等。
  • Private Registry:私有仓库;通过设有防火墙和额外的安全层的私有实体提供的Registry。

Docker Registry的组成:Repository 和 index

1)Repository

  • Repository是指由某特定的docker镜像的所有迭代版本组成的镜像仓库。比如,在docker hub搜索nginx,会有一个nginx的Repository,包含有很多版本的nginx。
  • 一个Registry中可以存在多个Repository
    • Repository可以分为“顶层仓库”和“用户仓库”。
    • 顶层仓库名称比如“仓库名”。
    • 用户仓库名称格式为“用户名/仓库名”。
  • 每个仓库可以包含多个Tag(标签),每个标签对应一个

2)Index

  • 维护用户账户、镜像的校验以及公共命名空间的信息
  • 相当于为Registry提供了一个完成用户认证等功能的检索

Docker Registry中的image

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

如下图所示:
在这里插入图片描述

Docker Hub

Docker Hub是世界上最大的容器镜像存储库,其中包含一系列内容源,包括容器社区开发人员,开源项目和独立软件供应商(ISV)构建和分发容器中的代码。用户可以访问免费的公共仓库来存储和共享镜像,也可以选择私人仓库的订阅计划。

**对于开发人员:**存储和共享您的个人项目,并查看容器社区正在构建的内容。

**对于团队:**利用私有仓库将内容限制为特定用户或团队。

**对于ISV:**列出并分发您的软件和插件作为容器,并覆盖容器社区的数百万最终用户。

**对于企业:**从经过验证的ISV中选择经过认证的容器并获得合作支持,这样您就可以确保在生产环境中运行。

在docker Hub中,镜像仓库的namespace层次结构附加了以下几种级别;

NameExamples(/)
organizatredhat/kubernetes,google/kubernetes
login(u)alice/applicaiton,bob/applicaiton
rolesdevel/database,test/database,prod/database

官方镜像仓库:https://hub.docker.com/

第三方镜像仓库:https://quay.io/

3. 镜像相关的操作

镜像生成的三种途径

  • Dockerfile
  • 基于容器制作(docker commit)
  • Dokcer Hub automated builds

在这里插入图片描述


http://chatgpt.dhexx.cn/article/WTVpQYrX.shtml

相关文章

docker镜像仓库

一、docker镜像仓库 docker镜像仓库(repository)是集中存放镜像的地方。方便与后续的镜像拉取与上传,便于对镜像的集中管理。镜像仓库一般可分为Docker Hub公共中央仓库和个人或者公司使用的私有仓库,私有仓库如果是个人使用则可…

Docker -- 镜像仓库(搭建私有镜像仓库、向镜像仓库推送镜像、从镜像仓库拉取镜像)

文章目录 1. 镜像仓库1.1 镜像仓库概念 2. 搭建私有镜像仓库2.1.简化版镜像仓库(不推荐)2.2 带有图形化界面版本(推荐)2.2.1 配置Docker信任地址2.2.2 使用DockerCompose部署带有图象界面的DockerRegistry 3. 向镜像仓库推送镜像4…

最全经典 | 机器视觉基础知识汇总

人工智能的小白资源群,这里有最齐全的干货资源,可以和你一样的入门小白一同交流学习亦可以得到专业技术大神的指导。欢迎入群813416857(AI人工智能学习交流),785685380(机器学习技术交流群)&…

机器视觉光源知识总结(二)

更多文章请关注微信公众号:机器视觉专业论坛

机器视觉系统的搭建

对于许多新人来说能成功搭建一套完善的视觉系统是比较困难的,机器视觉包括了许多需要掌握的知识点、比产品选型:视觉软件、相机、光源、镜头。比如安装高度、视野大小、系统要求的运行时间、工作环境等等,对于新人来说需要一套完善的知识体系…

OpenCV与机器视觉

最近在网易云课堂把南科大于仕琪团队的OpenCV教程完整看了一遍,对图像处理或者机器视觉又有了一个系统性的理解。OpenCV中文网站就是他创建的,他的研究团队及其相应成果可以在个人网站中查阅。回想过去在图像处理方面的点点滴滴,做了一个详细…

机器视觉——车牌识别实验汇总

文章目录 前言一、车牌识别背景资料简介二、实现车牌识别步骤1.图像采集(Image Correction)2.角度修正(Angle Correction)3.字符分割 第一次分割4.车牌定位(License Plate Location)5.字符分割 第二次分割6…

机器视觉源码分享

视觉方面的研究,但毕业后未能再此领域深耕,故预将研究阶段所做的工业视觉程序进行分享,作为兴趣爱好愿与有识之人一起交流。 有需要的请留言,以下介绍均有源码 0cHM6Ly9ibG9nLmNzZG4ubmV0L01CU0VwZWVr,size_16,color_FFFFFF,t_70)…

机器视觉基础应用知识详解

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达随着工业4.0时代的到来,机器视觉在智能制造业领域的作用越来越重要,为了能让更多用户获取机器视觉的相关基础知识,包括机器视觉技术是…

机器视觉工程师必须了解的基础知识

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达正文 CCD(像素)与视觉系统的基础知识 关于摄像元件 CCD 数码相机的构造与传统的胶片式相机(模拟式)基本相同。所不同的是数…

机器视觉与图像处理知识点总结

图像灰度均值是对平均灰度的一种度量,反映了图像的亮度,均值越大说明图像亮度越大,反之越小。图像灰度方差反映了图像像素值与均值的离散程度,标准差越大说明图像的质量越好。方差是对平均对比度的度量,每个像素点颜色…

机器视觉基础知识详解

什么是机器视觉 机器视觉是人工智能正在快速发展的一个分支。简单说来,机器视觉就是用机器代替人眼来做测量和判断。机器视觉系统是通过机器视觉产品(即图像摄取装置,分CMOS和CCD两种)将被摄取目标转换成图像信号,传送…

机器视觉需要学什么?学习机器视觉需要掌握哪些知识?

图像采集:需要对镜头、光源、相机(CCD)的选型有所了解,有经验的工程师说打光是图像采集的关键。图像采集是对我们后续工作的支撑,采集不到好的图像,对图像处理就会难上好几倍甚至几百倍。 图像处理:图像处理技术一般包…

干货!机器视觉基础知识汇总

来源丨新机器视觉 点击进入—>3D视觉工坊学习交流群 现如今,中国已经成为世界机器视觉发展最为活跃地区,应用范围涵盖了工业、农业、医药、军事、航天、气象等国民经济各个行业。虽然机器视觉的成长速度非常快,但是还是有很多人对机器视觉…

TextView 倾斜属性

android:textStyle"italic"

Android textAppearance的属性设置及TextView属性详解

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666) 转自:http://blog.csdn.net/jaycee110905/article/details/8762238 textAppearance的属性设置 android:textAppearance"?android:attr/textA…

Android控件 TextView属性大全

一、TextView TextView控件一般是用来显示文本 二、如何使用 在layout布局里直接引用&#xff1a; <TextViewandroid:gravity"center_horizontal"android:id"id/tv_moneytext"android:layout_width"match_parent"android:layout_height&q…

Textview属性Kotlin.Android

Textview属性 <TextViewandroid:id"id/textview"android:layout_width"match_parent"android:layout_height"wrap_content"android:text"Hello World!"/>android:layout_width指定宽度 android:layout_height指定高度 "ma…

TextView 文本基础属性

基础属性一栏 &#xff1a; 1 &#xff1a;id :就相当于一个名字 格式 : android:id"id/name" name可自行起名 TextView tvfindViewById(R.id.name);tv.setText("安卓开发"); 创建id可在activity中创建文本对象&#xff0c;使用文本方法进行传值。 通过…

TextView常用属性设置

TextView属性设置 文章目录 TextView属性设置一、基本属性&#xff08;android&#xff1a;&#xff09;marginStart(End)与marginLeft&#xff08;Right&#xff09;的区别 二、其他属性3D效果跑马灯效果获取焦点的两种方法 三、安卓官方文档 提示&#xff1a;以下是本篇文章正…