[Docker][Docker Image]详细讲解

news2024/9/17 8:55:13

目录

  • 1.Docker镜像是什么?
  • 2.Docker镜像加载原理
    • 1.bootfs
    • 2.rootfs
    • 3.为什么CentOS镜像几个G,而Docker CentOS镜像才几百M?
      • 1.CentOS
      • 2.Docker CentOS
  • 3.镜像分层
    • 1.Union FS
    • 2.分层理解
    • 3.容器层 vs 镜像层
  • 4.镜像命令
    • 1.docker images
    • 2.docker image inspect
    • 3.docker tag
    • 4.docker rmi
    • 5.docker save
    • 6.docker load
    • 7.docker history
    • 8.docker import
    • 9.docker image prune
    • 10.docker build


1.Docker镜像是什么?

  • Docker Image本质上是一个只读文件, 这个文件包含了文件系统、 源码、库文件、依赖、工具等一些运行application所必须的文件
  • 可以把Docker Image理解成一个模板, 可以通过这个模板实例化出来很多容器
  • Image里面是一层层文件系统Union FS(联合文件系统),可以将几层目录挂载到一起,形成一个虚拟文件系统

2.Docker镜像加载原理

1.bootfs

  • bootfs主要包含bootloader和kernel,Linux刚启动时会加载bootfs
    • 在Docker镜像的最底层就是bootfs,这一层与Linux是一样的,包含bootloader和kernel
  • 当boot加载完成之后,整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时OS也会卸载bootfs

2.rootfs

  • rootfs在bootfs之上,包含的就是典型的Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件
  • rootfs就是各种不同的OS发行版
    • 如Ubuntu,CentOS

3.为什么CentOS镜像几个G,而Docker CentOS镜像才几百M?

1.CentOS

  • 一个完整的Linux OS会包含Linux内核和rootfs根文件系统
    • 即:/dev,/proc,/bin,/etc等目录。
  • 平时看到的CentOS除了rootfs,还会选装很多软件,服务等,所以CentOS镜像有几个G也很正常

2.Docker CentOS

  • 对于一个精简的OS,rootfs可以很小,只需要包含最基本的命令,工具和程序库就可以了
    • 因为底层直接用Host的kernel,自己只要提供rootfs就可以了
    • 由此可见,对于不同的Linux发行版
      • bootfs基本是一致的,rootfs会有差别
      • 因此不同的发行版可以共用bootfs
  • 对于容器镜像而言,所有容器都是共享宿主机的Linux内核的
    • Docker镜像只需要提供一个很小的rootfs即可,只需要包含最基本的命令,工具,程序库即可,所以docker镜像才会这么小

3.镜像分层

1.Union FS

  • Union FS是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下
  • 构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统
    • 一层层往上叠加,上层的修改会覆盖底层该位置的可见性,就像上层把底层遮住了一样
    • 当你使用的时候,你只会看到一个完全的整体,你不知道里面有几层,也不清楚每一层所做的修改是什么
  • 特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录
  • Union FS是Docker镜像的基础,镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像

2.分层理解

  • 所有的Docker镜像都起始于一个基础镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层

  • 例子

    • 基于Ubuntu 16.04创建一个基础镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层
    • 如在该镜像中添加Python包,就会在基础镜像层之上创建第二个镜像层
    • 如果继续添加一个安全补丁,就会创建第三个镜像层
      请添加图片描述
  • 在添加额外的镜像层的同时,镜像始终保持是当前所有镜像的组合

    • 如下例子:每个镜像层包含3个文件,而镜像包含了来自两个镜像层的6个文件
      请添加图片描述
  • 下图展示了一个稍微复杂的三层镜像,在外部看来只有6个文件,这是因为最上层的文件7时文件5的一个更新版本

    • 这种情况下,上层镜像层中的文件覆盖了底层镜像层中的文件,这样就使得文件的更新版本作为一个新镜像层添加到镜像当中
      请添加图片描述

3.容器层 vs 镜像层

  • Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部
  • 这一层就是通常说的容器曾,容器层之下的都叫镜像层
    请添加图片描述

4.镜像命令

1.docker images

  • 功能:查看所有本地的主机上的镜像
  • 语法docker images [OPTIONS] [REPOSITORY][:TAG]]
  • 关键参数
    • -a, --all:列出本地所有的镜像
    • -q, --quiet:只显示镜像ID
    • digests:显示镜像的摘要信息
    • -f:显示满足条件的镜像
    • --format:指定返回值的模板文件
    • --no-trunc:显示完整的镜像信息

2.docker image inspect

  • 功能:查看镜像详细信息
  • 语法docker image inspect [OPTIONS] IMAGE [IMAGE...]
  • 注意docker inspect会自动检查是镜像还是容器然后显示详细信息
  • 示例docker image inspect nginx:1.23.3

3.docker tag

  • 功能:标记本地镜像,将其归入某一仓库
  • 语法docker tag SOUCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
  • 示例docker tag ubuntu:22.04 myregistry.com/myubuntu:22.04

4.docker rmi

  • 功能:删除镜像
  • 语法:`docker rmi [OPTIONS] IMAGE [IMAGE…]
  • 关键参数
    • -f:强制删除
    • --no-purse:不移除该镜像的过程镜像,默认移除

5.docker save

  • 功能:将指定镜像保存成tar归档文件
  • 语法docker save [OPTIONS] IMAGE [IMAGE...]
  • 关键参数-o:输出到文件
  • 示例docker save -o SnowK.tar Die:v1.0

6.docker load

  • 功能:导入使用docker save命令导出的镜像
  • 语法docker load [OPTIONS]
  • 关键参数
    • -i, --input:指定导入的文件,代替STDIN
    • -q, --quiet:精简输出信息
  • 示例docker load -i SnowK.tar

7.docker history

  • 功能:显示镜像历史
  • 语法docker history [OPTIONS] IMAGE
  • 关键参数
    • -H, --human:大小和日期采用人容易读的格式展现
    • --no-trunc:显示全部信息,不要隔断
    • -q, --quiet:只显示镜像ID信息

8.docker import

  • 功能:从归档文件中创建镜像
  • 语法docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
  • 关键参数
    • -c:应用Docker指令创建镜像
    • -m:提交时的说明文字

9.docker image prune

  • 功能:删除不使用的镜像
  • 语法:`docker image prune [OPTIONS]
  • 关键参数
    • -a, -all:删除全部不使用的镜像
    • --filter filter:指定过滤条件
    • -f, --force:不提示是否删除

10.docker build

  • 功能:使用Dockerfile创建镜像
  • 语法:`docker build [OPTIONS] PATH|URL| -
  • 关键参数
    • --build-arg=[]:设置镜像创建时的变量
    • -f:指定要使用的 Dockerfile 路径
    • --label=[]:设置镜像使用的元数据
    • --no-cache:创建镜像的过程不使用缓存
    • -pull:尝试去更新镜像的新版本
    • --quiet, -q:安静模式,成功后只输出镜像 ID
    • --rm:设置镜像成功后删除中间容器
    • -t, --tag:镜像的名字及标签,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个标签
    • --network:默认default,在构建期间设置RUN指令的网络模式

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

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

相关文章

大数据信用报告查询会不会留下查询记录?怎么选择查询平台?

最近有不少网友都在咨询一个问题,那就是大数据信用报告查询会不会留下查询记录,会不会对自己的征信产生影响,下面本文就详细为大家介绍一下,希望对你了解大数据信用有帮助。 首先、大数据信用与人行征信是独立的 很多人只知道人行…

innovus:如何only select highlighted

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 来自星球提问; 1)ICC2 2)innovus View->Set Preference,勾选Only Select Highlighted

新装centos7虚拟机如何配置网络,NAT配置固定IP

首先声明,我想使用的是NAT连接模式,并且设置完IP之后,使得这个IP固定住,以后不会再变了。 文章目录 1,打开Vmware软件的【编辑】-【虚拟网络编辑器】2,先选择VMnet8(画1处)&#xf…

2025上海国际显示技术及应用创展览会

DIC EXPO2025中国(上海)国际显示技术及应用创展览会 时间:2025年8月7-9日 地点:上海新国际博览中心 主办单位: 中国光学光电子行业协会液晶分会 联合主办: 中国电子材料行业协会 中国电子商会 韩国…

嵌入式人工智能(32-基于树莓派4B的旋转编码器-EnCoder11)

1、旋转编码器 旋转编码器是一种输入设备,通常用于测量和控制旋转运动。它由一个旋转轴和一系列编码器组成。旋转编码器可以根据旋转轴的位置和方向来测量旋转角度,并将其转化为电子信号输出。 旋转编码器通常分为两种类型:绝对值编码器和增…

【微服务】Spring Cloud Gateway

文章目录 强烈推荐引言主要功能关键概念示例配置依赖添加常见的几种整合案例1. 与 Spring Cloud Eureka 整合2. 与 Spring Cloud Config 整合3. 与 Spring Cloud Sleuth 和 Zipkin 整合4. 与 Spring Cloud Security 整合5. 与 Resilience4j 整合6. 与 Redis 整合 结论强烈推荐专…

Matlab编程资源库(19)级数与符号方程求解

一、级数符号求和 求无穷级数的和需要 符号表达式求和函数 symsum ,其调用 格式为: symsum(s,v,n,m) 其中 s 表示一个级数的通项,是一个符号表达式。 v 是求和变 量, v 省略时使用系统的默认变量。 n 和 m 是求和的开始项 和…

如何恢复WPS文档中未保存或删除的文件

由于各种原因,您可能会丢失 WPS 文档,例如意外删除、硬盘格式化、病毒攻击等。您是否遇到过丢失未保存的 WPS 文件的情况?您知道如何恢复 WPS 文档中未保存的文件吗? WPS Office 是一款办公套件,可以作为 Microsoft O…

火山引擎VeDI数据技术分享:两个步骤,为Parquet降本提效

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 作者:王恩策、徐庆 火山引擎 LAS 团队 火山引擎数智平台 VeDI 是火山引擎推出的新一代企业数据智能平台,基于字节跳动数据平台多年的“数据…

一个私有化的中文笔记工具个人知识库,极空间Docker部署中文版『Trilium Notes』

一个私有化的中文笔记工具&个人知识库,极空间Docker部署中文版『Trilium Notes』 哈喽小伙伴们好,我是Stark-C~ 最近被很多小伙伴问到NAS上的笔记工具,虽说之前也出过Memos,刚开始用起来还不错,但是用了一段时间…

W1R3S靶机全通详细教程

文章目录 w1r3s主机发现主机扫描 端口扫描tcp端口扫描UDP扫描漏洞扫描 攻击面分析FTP渗透匿名登录 web渗透目录爆破 cuppa cms文件包含漏洞getshell提权 w1r3s 引言 近些日子看红笔大佬的靶机精讲视频时,他的一句话让我感受颇深,很多视频在讲解时&…

《Windows API每日一练》23.1 Windows多媒体

本节我们将讲述单线程到多线程的演进过程,以及进程与线程的区别。 本节必须掌握的知识点: 多媒体硬件 API 概述 第172练:交互输入MCI命令 23.1.1多媒体硬件 多媒体硬件是指用于处理音频、视频和其他多媒体内容的硬件设备。在计算机系统中&…

迈尔沃护眼大路灯怎么样?书客、迈尔沃、霍尼韦尔护眼灯测评PK!

迈尔沃护眼大路灯怎么样?作为一名专业的实测博主,温馨提示大家,虽然护眼落地灯是个好东西,它能够提供柔和舒适的环境光,减少对眼睛的伤害,但是千万别乱买跟风,盲目入手踩雷率80%以上。那么如何辨…

SpringBoot集成 Druid 连接池及监控配置详解

Spring Boot 集成 Druid 连接池及监控配置详解 Spring Boot 是当前 Java 开发中的热门框架,而在数据库连接池的选择上,Druid 因其性能和功能强大也备受青睐。在这篇文章中,我们将深入探讨如何在 Spring Boot 项目中集成 Druid 连接池&#x…

大厂linux面试题攻略二之Linux系统管理

一、Linux系统管理权限优化类 1.简述Linux权限划分原则(经验类) 文件权限: 默认权限: 特殊权限; ACL权限: sudo授权: 文件系统属性权限: 解题思路: 注意权限分离(Linux系统…

入门 PyQt6 看过来(案例)17~ 表格

PyQt6提供了两种用于有规律地呈现更多数据的控件,一种是表格结构的控件(QTableView),另一种是树形结构的控件(QTreeView)。表格控件属于QTableView类,QTableWidget继承于QTableView。 1 QTableView 表格控件 QTableView控件中QStandItemMod…

安胜:促进数据跨境有序流动 赋能企业数字化转型

数字化转型浪潮中,数据出境面临众多机遇与挑战。从业务角度,经济全球化推动外商投资、跨境业务等业务合作,企业数据跨境流动需求强烈,但数据违规现象频发,不仅导致巨大经济损失,还挑战了国家安全。从监管层…

什么是 HTTP/3?HTTP/3 为何席卷全球?HTTP/3 中有什么新内容?为什么需要它?

超文本传输​​协议 ( HTTP ) 是互联网的基石,有助于加载网页、流式传输视频以及为您最喜爱的应用程序获取数据。 去年 ,负责定义互联网技术的组织 互联网工程任务组 ( IETF )对该协议的新版本 HTTP/3 进行了标准化。自那时起,HTTP/3 和相关…

KubeSphere 部署向量数据库 Milvus 实战指南

作者:运维有术星主 Milvus 是一个为通用人工智能(GenAI)应用而构建的开源向量数据库。它以卓越的性能和灵活性,提供了一个强大的平台,用于存储、搜索和管理大规模的向量数据。Milvus 能够执行高速搜索,并以…

纷享销客北方战区游学营举行 五大专项助力伙伴业务“倍速增长”

首届纷享销客北方战区渠道核心伙伴游学营日前在山东济南登场,此次游学营一共设置了五大模块,包括财务专项、组织建设专项、团队成长专项、开源专项、续费及增购专项,旨在帮助纷享销客渠道伙伴夯实高质量增长基础,全方位提升企业经…