docker镜像

article/2025/3/12 13:52:16

docker镜像

文章目录

  • docker镜像
    • 1.镜像的概念
    • 2.docker镜像层
    • 3.docker存储驱动
    • 3.docker registry
    • 4.Docker Hub

1.镜像的概念

Docker镜像类似于虚拟机中的镜像,是一个只读的模板,也是一个独立的文件系统,包括运行容器所需的数据。

Docker镜像:是Docker容器的静态表示,包括Docker容器所要运行的应用代码及运行时的配置。Docker镜像采用分层的方式构建,每个镜像均由一系列的"镜像层”组成。镜像一旦被创建就无法被修改。

docker镜像采用分层构建机制,最底层为bootfs,其上为rootfs

  • bootfs:用于系统引导的文件系统,包括bootloader和kernel,容器启动完成后会被卸载以节约内存资源
  • rootfs:位于bootfs之上,表现为docker容器的根文件系统
    • 传统模式中,系统启动之时,内核挂载rootfs会首先将其挂载为“只读”模式,完整性自检完成后将其重新挂载为读写模式
    • docker中,rootfs由内核挂载为“只读”模式,而后通过“联合挂载”技术额外挂载一个“可写”层

2.docker镜像层

在这里插入图片描述
1.(内核层):由AUFS,LXC,Bootfs(boot file system)组成为上层的镜像提供kernel内核支持

AUFS是一个联合文件系统,它使用同一个Linux host上的多个目录,逐个堆叠起来,对外呈现出一个统一的文件系统。AUFS使用该特性,实现了Docker镜像的分层 分层的思想
bootfs:负责与内核交互 主要是引导加载kernel,linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层时bootfs,这一层与经典的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统就会卸载bootfs
rootfs(root file system)属于base images 在bootfs之上(base images)比如在linux系统中包含/dev,/proc,/bin,/etc等标准目录和文件,包含创建、启动操作系统的一些必要的组件,rootfs就是各个不同的操作系统的发行版本,比如Ubuntu,CentOS等等
lxc早期的内核引擎与docker引擎对接交互,docker提供一些库文件和引导文件。现在docker自身内置了所需要的lib库
2.base image(基础/系统镜像层):构建镜像运行的操作系统环境

3.add image(run指令运行的镜像层):比如nginx镜像的yum安装模块,或者nginx编译安装的指令,使用镜像封装每一个run执行命令

4.Container(可读写执行层):将下面的镜像组合运行提供给docker client使用

3.docker存储驱动

docker提供了多种存储驱动来实现不同的方式存储镜像,下面是常用的几种存储驱动:

  • AUFS:文件级的存储驱动
  • OverlayFS:一种Union FS
  • Devicemapper:映射框架机构
  • Btrfs:文件级存储驱动
  • VFS:接口的“原生”的实现,完全没有使用 ‘’联合文件系统或者写时复制技术‘’

AUFS:(AnotherUnionFS)是一种Union FS,是文件级的存储驱动。AUFS是一个能透明覆盖一个或多个现有文件系统的层状文件系统,把多层合并成文件系统的单层表示。简单来说就是支持将不同目录挂载到同一个虚拟文件系统下的文件系统。这种文件系统可以一层一层地叠加修改文件。无论底下有多少层都是只读的,只有最上层的文件系统是可写的。当需要修改一个文件时,AUFS创建该文件的一个副本,使用CoW将文件从只读层复制到可写层进行修改,结果也保存在可写层。在Docker中,底下的只读层就是image,可写层就是Container。

OverlayFS:Overlay是Linux内核3.18后支持的,也是一种Union FS,和AUFS的多层不同的是Overlay只有两层:一个upper文件系统和一个lower文件系统,分别代表Docker的镜像层和容器层。当需要修改一个文件时,使用CoW将文件从只读的lower复制到可写的upper进行修改,结果也保存在upper层。在Docker中,底下的只读层就是image,可写层就是Container。目前最新的OverlayFS为Overlay2。

AUFS和Overlay都是联合文件系统,但AUFS有多层,而Overlay只有两层,所以在做写时复制操作时,如果文件比较大且存在比较低的层,则AUSF会慢一些。而且Overlay并入了linux kernel mainline,AUFS没有。目前AUFS已基本被淘汰。

Devicemapper:Device mapper是Linux内核2.6.9后支持的,提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略。AUFS和OverlayFS都是文件级存储,而Device mapper是块级存储,所有的操作都是直接对块进行操作,而不是文件。Device mapper驱动会先在块设备上创建一个资源池,然后在资源池上创建一个带有文件系统的基本设备,所有镜像都是这个基本设备的快照,而容器则是镜像的快照。所以在容器里看到文件系统是资源池上基本设备的文件系统的快照,并没有为容器分配空间。当要写入一个新文件时,在容器的镜像内为其分配新的块并写入数据,这个叫用时分配。当要修改已有文件时,再使用CoW为容器快照分配块空间,将要修改的数据复制到在容器快照中新的块里再进行修改。

OverlayFS是文件级存储,Device mapper是块级存储,当文件特别大而修改的内容很小,Overlay不管修改的内容大小都会复制整个文件,对大文件进行修改显然要比小文件要消耗更多的时间,而块级无论是大文件还是小文件都只复制需要修改的块,并不是整个文件,在这种场景下,显然device mapper要快一些。因为块级的是直接访问逻辑盘,适合IO密集的场景。而对于程序内部复杂,大并发但少IO的场景,Overlay的性能相对要强一些。

Btrfs:Btrfs被称为下一代写时复制文件系统,并入Linux内核,也是文件级存储驱动,但可以像Device mapper一直接操作底层设备。Btrfs把文件系统的一部分配置为一个完整的子文件系统,称之为subvolume 。采用 subvolume,一个大的文件系统可以被划分为多个子文件系统,这些子文件系统共享底层的设备空间,在需要磁盘空间时便从底层设备中分配,类似应用程序调用 malloc()分配内存一样。为了灵活利用设备空间,Btrfs 将磁盘空间划分为多个chunk 。每个chunk可以使用不同的磁盘空间分配策略。比如某些chunk只存放metadata,某些chunk只存放数据。这种模型有很多优点,比如Btrfs支持动态添加设备。用户在系统中增加新的磁盘之后,可以使用Btrfs的命令将该设备添加到文件系统中。Btrfs把一个大的文件系统当成一个资源池,配置成多个完整的子文件系统,还可以往资源池里加新的子文件系统,而基础镜像则是子文件系统的快照,每个子镜像和容器都有自己的快照,这些快照则都是subvolume的快照。

vfs:对于vfs要创建新层,需要对上一层进行“深度复制”。与其他存储驱动程序相比,这会导致性能降低和磁盘上更多的空间使用。但是,它是健壮,稳定的,并且可以在每种环境中使用

3.docker registry

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

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

docker registry的分类:

  • Sponsor Registry:第三方的Registry,供客户和Docker社区使用
  • Mirror Registry:第三方的Registry,只让客户使用
  • Vendor Registry:由发布docker镜像的供应商提供的registry
  • Private Registry:通过设有防火墙和额外的安全层的私有实体提供的registry

docker registry的组成:

  • Repository
    • 由某特定的docker镜像的所有迭代版本组成的镜像仓库
    • 一个Registry中可以存在多个Repository
      • Repository可分为“顶层仓库”和“用户仓库”
      • 用户仓库名称格式为“用户名/仓库名”
    • 每个仓库可包含多个Tag(标签),每个标签对应一个镜像
  • Index
    • 维护用户帐户、镜像的检验以及公共命名空间的信息
    • 相当于为Registry提供了一个完成用户认证等功能的检索接口

Docker Registry中的镜像通常由开发人员制作,而后推送至“公共”或“私有”Registry上保存,供其他人员使用,例如“部署”到生产环境。
在这里插入图片描述

4.Docker Hub

Docker Hub is a cloud-based registry service which allows you to link to code repositories, build your images and test them, stores manually pushed images, and links to Docker Cloud so you can deploy images to your hosts.

(Docker Hub是一个基于云的注册服务,它允许你链接到代码库,构建你的镜像并测试它们,存储手动推送的镜像,并链接到Docker Cloud,这样你就可以将镜像部署到你的主机上。)

It provides a centralized resource for container image discovery, distribution and change management, user and team collaboration, and workflow automation throughout the development pipeline.

(它为容器映像发现、分布和变更管理、用户和团队协作以及整个开发管道中的工作流自动化提供了一个集中的资源。)
在这里插入图片描述

  • Image Repositories (镜像存储库)

    • Find and pull images from community and official libraries, and manage, push to, and pull from private images libraries to which you have access.

      (从社区和官方库中查找和提取镜像,管理、推送和提取您可以访问的私有镜像库。)

  • Automated Builds(自动构建)

    • Automatically create new images when you make changes to a source code repository.

      (在更改源代码存储库时自动创建新镜像)

  • Webhooks

    • A feature of Automated Builds, Webhooks let you trigger actions after a successful push to a repository.

      (自动构建的一个特性,Webhooks可以让你在成功推送到存储库后触发操作。)

  • Organizations(组织)

    • Create work groups to manage access to image repositories.
  • GitHub and Bitbucket Integration (GitHub和Bitbucket集成)

    • Add the Hub and your Docker Images to your current workflows.

      (添加枢纽和您的Docker图像到您的当前工作流程。)


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

相关文章

Docker入门教程:本地打包docker镜像

什么是Docker? Dockers是基于Go语言开发的虚拟容器技术。以前我们部署应用通常是将源代码打包成一个jar包运行,这样就会受到运行环境、配置环境的限制,而且程序也不能跨服务器运行。Docker基于Linux容器技术,将Java源代码、运行环…

Docker 镜像

(一)下载实例 (二)镜像基本操作 备注: 相同名称的镜像可以存在多个,即需要不同的tags版本 (三)使用 Dockerfile 定制镜像 (1)介绍 镜像的定制实际上就是定…

Docker (一)之docker镜像库地址

一、关于docker的镜像问题: 当我们想要去拉取一个镜像的时候,初始的时候会去从国外的镜像库里面拉取,速度可想而知;这时我们需要给docker配置一个国内的镜像库: 目前发现docker有2个地方可以配置镜像库的地址&#x…

Docker镜像发布到阿里云和私有库

目录 一、Docker镜像 (一)概述 (二)Docker镜像加载原理 (三)镜像分层结构优势 (四)重点理解 (五)docker commit操作实例 (六)总…

【云原生|Docker】Docker镜像操作

作者:柒号华仔 个人主页:欢迎访问我的主页 个人信条:星光不问赶路人,岁月不负有心人。 个人方向:主要方向为5G,同时兼顾其他网络协议,编解码协议,C/C,linux,云原生等&…

Docker私有镜像仓库是什么?

Docker镜像仓库概述 镜像仓库作为Docker技术的核心组件之一,其主要作用就是负责镜像内容的存储和分发。Docker镜像仓库从使用范围来说分为“公有镜像仓库”和“私有镜像仓库”,公有镜像仓库是可以被任何人使用的,例如Docker公司维护的在线存储…

了解和使用 Docker 镜像仓库

前言 在上文 《了解和使用 Docker》 之后,反响不错,也上了热榜。本来是想直接整理一下容器编排工具 Docker Swarm 和 K8s 博文的,但是半路杀出了这个活动😂,为表敬意,先参与一波吧。 本文主要介绍一下容…

Docker容器之镜像仓库详解

Docker容器之镜像仓库详解 文章目录 Docker容器之镜像仓库详解1. 什么是Docker Image?2. 什么是Docker Registry?3. 镜像相关的操作 本文将集中对镜像、仓库、容器的概念与三者之间的联系进行详细介绍,以及基本的镜像管理操作。 1. 什么是Docker Image&…

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两种)将被摄取目标转换成图像信号,传送…