【Docker】Docker镜像分层

news/2025/3/1 4:03:29/文章来源:https://www.cnblogs.com/o-O-oO/p/18600631

我们在上一章,讲了虚拟化,虚拟化是把硬件虚拟化,然后创建出来的虚拟机完全隔离,而Docker则是软件(内核)虚拟化,他的隔离性会低于虚拟机。我们将通过3-4周来讲解Docker相关内容,由于涉及到内容较多,就不一一列出来具体的细节,主要从以下几个方面来讲解:


Docker基本情况
Docker基本命令
Dockerfile
Docker镜像---📍
Docker仓库
Docker原理
Docker网络&存储&日志
Docker-Compose
Docker番外篇

我们前面下载的官方镜像,也通过Dockerfile编写自己的镜像,那这个镜像到底是一个什么的文件,在Linux里面到底是怎么存在的呢?下面我们将通过拆解镜像文件来确认这些问题。

这里我们找了一新机器,安装完成Docker以后,下载了一个centos7的镜像,首先我们先看看这个镜像的是怎么构建的。

从这个构建过程我们可以看到就是通过ADD增加了一个文件,然后有一个标签和CMD,标签和CMD都是大小都是0,也就是没有真实数据,在运行容器的时候才会生效。

然后我们在讲Docker-详细信息和目录介绍的时候,介绍过docker对应的目录里面有2个目录是跟镜像相关

# 这个是只有一个镜像的情况
cat /var/lib/docker/image/overlay2/repositories.json
{"Repositories": {"192.168.31.43:5000/centos": {"192.168.31.43:5000/centos:7": "sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9","192.168.31.43:5000/centos@sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f": "sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9"}}
}

这个镜像id,无论是下载到哪个服务器,这个值都不会改变。

在镜像和容器存储目录下是这样的

# 这个也是只有一个容器的的目录结构
[root@localhost overlay2]# pwd
/var/lib/docker/overlay2
[root@localhost overlay2]# ll
total 0
drwx--x--- 3 root root     30 Dec  1 11:44 98307d998c9cea8d1880a1a97139fb09c3ca3c188e34dec219347c45242fb8b1
brw------- 1 root root 253, 0 Dec  1 11:44 backingFsBlockDev
drwx------ 2 root root     40 Dec  1 11:44 l

而这个983xxx的目录下其实就是centos7镜像的下的rootfs文件。

当我们继续增加了其他镜像的时候,这个数据目录也会进行增加。

增加了一个容器,对应的目录也增加。

如果把一个镜像文件(通过docker save打包的文件),解压出来以后看到的目录大概是这样的

blobs:通常存储就是镜像的文件数据,其他文件就是这个镜像的元数据,简单来理解就是blobs的内容就是放置到overlay2目录,其他数据会放置到image目录。

其实上面的东西有点抽象,这篇文章写了好久也没有找到比较好的方式来描述这个问题。

简单的总结下:

1.在构建Dockerfile的时候,每一个命令,其实就是一层,所以我们通过&&把多个命令组装在一起,可以节约层数。

2.有些层数是大小是0,会在运行容器的时候才生效,所以从overlay2里面就看不到对应的目录。

3.一个基础镜像是200M,然后我基于这个镜像做了新的增加,增加的内容是1M,那么这个镜像的大小就是201M,加前面一个200M镜像应该是400M,但是实际还是只有200M的样子。

4.我们无论在上传还是下载的镜像的时候,都会把这个镜像信息进行比对,还是接着刚才的2个镜像如果要上传到仓库,第一次就会真实上传200M,上传第二个镜像的时候,他就只会上传那1M文件;如果是下载也是同理。这样就可以实现,上传,下载,本地存储都可以复用相同的层。

5.曾经踩过的坑:就是镜像某个层被删除&损坏,无法正常运行容器,后面是通过重新下载镜像还是重新load解压镜像才解决的(具体是哪个已经忘记)。

原创 运维小路

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

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

相关文章

转载:【AI系统】AI轻量化与并行策略

了解 AI 计算模式对 AI 芯片设计和优化方向至关重要。本文将会接着从轻量化网络模型和大模型分布式并行两个主题来深入了解 AI 算法的发展现状,引发关于 AI 计算模式的思考。 轻量化网络模型 随着神经网络应用的普及,越来越多的模型需要在特定的硬件平台部署,如移动端和嵌入…

linxux学习01

Linux第一天 1、为什么要学习linux? 因为大数据中绝大部分核心组件都是基于linux操作系统运行的,企业中基本上都是linux系统。2、怎么去学linux?(什么是大数据)大数据技术组件 hadoop hive zookeeper hbase spark flink kafka ranger dolphinescheduler es hudi doris .…

转载:【AI系统】模型演进与经典架构

了解 AI 计算模式对 AI 芯片设计和优化方向至关重要。本文将会通过模型结构、压缩、轻量化和分布式几个内容,来深入了解 AI 算法的发展现状,引发关于 AI 计算模式的思考,重点围绕经典网络模型和模型量化压缩两方面进行展开。 经典模型结构设计与演进 神经网络的基本概念 神经…

第86篇 8种基本数据结构

1.数据结构概述 数据结构是计算机存储、组织数据的方式。 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构的优良将直接影响着我们程序的性能; 常用的数据结构有:数组(Array)、栈(Stack)、队列(Queue)、链表(Linked List)、树(Tree)、图(…

全球供应链一体化解决方案

在当今全球化的经济背景下,供应链管理的效率和效果对企业的成功至关重要。本文将带您深入了解中外运物流如何通过其全球供应链一体化解决方案,帮助企业优化从客户端到端的供应链流程。什么是一体化解决方案?即面向企业整体供应链的集成解决方案,覆盖客户端到端供应链,并在…

【docker】教你将程序打包成 Docker 镜像

引言 在现代软件开发中,容器化技术已经成为趋势。不仅仅是Docker,云原生架构、Kubernetes等同样依赖镜像技术来实现应用的快速交付和高效部署。将程序制作成镜像是迈向容器化和云原生的第一步。这篇文章将从零开始,带你轻松掌握将程序打包成镜像的核心技能,为你的应用构建“…

多头注意力

1.原理相比于单头注意力模型来说,不同之处是输入中的每一个token都放入多个注意力头中计算,并将同一个token得到的结果进行拼接后再通过一个线性层得到结果

CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序

Selenium Selenium 是一款开源且可移植的自动化软件测试工具,专门用于测试网页端应用程序或者采集网页端数据。它能够在不同的浏览器和操作系统上运行,具有很强的跨平台能力。Selenium可以帮助测试人员更高效地自动化测试基于Web网页端的应用程序,也可以帮忙开发者方便地完成…

记一次TIA V16下面1200PLC硬件编译错误的处理

今天使用TIA V16做了一个CPU 1214C AC/DC/Rly的程序,编译的时候报错如下:双击错误之处也没跳转到出错位置。刚开始以为是不是路径有中文,项目名有中文,后来一想都16版本了,不至于吧? 电脑里面另一个虚拟机里有TIA V17,把项目程序拷贝到那边,打开编译通过了。我估计是固…

转载:【AI系统】AI系统架构的组成

AI 系统组成 如图所示,大致可以将 AI 系统分为以下几个具体的方向:AI 训练与推理框架 AI 框架不仅仅是指如 PyTorch 等训练框架,还包括推理框架。其负责提供用户前端的 AI 编程语言,接口和工具链。负责静态程序分析与计算图构建,编译优化等工作。AI 框架本身通过提供供用户…

转载:【AI系统】AI系统概述与设计目标

AI 系统全栈架构 通过对 AI 的发展、以及模型算法、硬件与数据的趋势介绍,我们已经了解了 AI 系统的重要性。本文将介 AI 系统的设计目标、组成和生态,让读者形成 AI 系统的知识体系,为后续展开每篇文章的内容做好铺垫。 AI 系统设计本身需要各个环节通盘考量,无论是系统性…

转载:【AI系统】AI 发展驱动力

AI 起源于上世纪五十年代,经历了几次繁荣与低谷,直到 2016 年谷歌旗下的 DeepMind 发布 AlphaGo 程序赢得与世界围棋冠军的比赛,大众对 AI 的关注与热情被重新点燃。其实 AI 技术早在这个标志事件之前已经在工业界很多互联网公司中得到了广泛应用与部署。例如,搜索引擎服务…