四、Docker镜像详情

news2024/10/6 12:28:23

学习参考:尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出)

目录

  • 前言
  • 一、Docker镜像
    • 1.1 概念
    • 1.2 UnionFS(联合文件系统)
    • 1.3 Docker镜像加载原理
    • 1.4 重点理解
  • 二、docker commit 命令
    • 2.1 是什么?
    • 2.2 命令格式
    • 2.3 案例
  • 总结
  • 参考

前言

如果只局限于,需要镜像就去pull一个,那就小了、格局小了!
在这里插入图片描述
我们也可以自己搞一个镜像,发布一下。以后拉去自己发布的镜像。

一、Docker介绍 中,简单的介绍了Docker镜像。接下来将会展开说一说。

一、Docker镜像

1.1 概念

  是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。

1.2 UnionFS(联合文件系统)

  首先,想要了解UnionFS需要先要来介绍一下Docker的镜像时分层的。
以我们的pull为例,在下载的过程中我们可以看到docker的镜像好像是在一层一层的在下载。如图每一个是一层一层的(layer)
在这里插入图片描述

  为什么要这样分层?这样分层的优点是什么?这就要开始了解一下 UnionFS(联合文件系统)了。

  UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

就像我们堆积木一样,有一块基础的积木(基础镜像),在此基础上,为我们需要其他的什么积木块,就将其一层一层的向上搭积木(一层就相当于一个镜像),最终暴露的是我们你整个积木的最上层,最上层就是暴露给我们允许操作的,其他下面的每层很容易理解是不允许改动的。最上层就是提供给我们的容器,允许我们进行操作。

1.3 Docker镜像加载原理

  Docker的镜像实际上由一层一层的文件系统组成,就是种层级的文件系统UnionFS。bootfs(boot file system)主要包含bootloader(boot加载器)kernel(内核), bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是引导文件系统bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用已由bootfs转交给内核,此时系统也会卸载bootfs

  rootfs(root file system) ,在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。
在这里插入图片描述

为什么之前看到ubuntu只有不到80M?
在这里插入图片描述
  对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供 rootfs 就行了。由此可见对于不同的linux发行版, bootfs基本是一致的, rootfs会有差别, 因此不同的发行版可以公用bootfs。

  正如之前文章所说:可以把容器看作是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间)和运行在其中的应用程序。

来解决为什么要这样分层?这样分层的优点是什么?
  镜像分层最大的一个好处就是共享资源方便复制迁移,就是为了复用
比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;
  同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

1.4 重点理解

  当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。
在这里插入图片描述

二、docker commit 命令

2.1 是什么?

docker commit 命令,是提交容器副本使之成为一个新的镜像。具体可以结合2.3案例理解。

2.2 命令格式

docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]

2.3 案例

  1. 运行之前pull的ubuntu镜像,发现vim命令并不能使用。
    docker run -it run ubuntu /bin/bash
    在这里插入图片描述
  2. 安装vim
    • 更新apt-get,相当于centos的yum
      apt-get update
      在这里插入图片描述
    • 安装vim
      apt-get -y install vim
      这里root@88270a4917e7 中的88270a4917e7是我们是我们运行后新的镜像实例。 在这里插入图片描述3. commit我们自己刚刚加强过的镜像,就是安装vim后的ubuntu镜像
      docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
      
      在这里插入图片描述
  3. 启动新镜像
    docker run -it run 79f3ce78e883 /bin/bash(这里把image id换成自己的)
    在这里插入图片描述
    vim可以使用了!在运行之前的ubuntu还是没有vim的,其实是新的镜像使用了ubuntu基础镜像,再次基础上想搭积木一样搭了一层vim。

总结

  Docker中的镜像分层,支持通过扩展现有镜像,创建新的镜像。类似Java继承于一个Base基础类,自己再按需扩展。
  新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层。
在这里插入图片描述1

参考


  1. https://www.bilibili.com/video/BV1gr4y1U7CY?p=25&vd_source=4b18ffafb682feb64036f2758972d2f0 ↩︎

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

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

相关文章

分布式调用与高并发处理 Zookeeper分布式协调服务

一、Zookeeper概述 1.1 集中式和分布式 单机架构 一个系统业务量很小的时候所有的代码都放在一个项目中就好了,然后这个项目部署在一台服务器上,整个项目所有的服务都由这台服务器提供。 缺点: 服务性能存在瓶颈,用户增长的时候…

LENOVO联想笔记本电脑 拯救者Y520-15IKBN(80Y5)原装Win10系统文件,恢复出厂OEM系统

lenovo联想笔记本电脑,拯救者Y520-15IKBN(1050、1050Ti) (80Y5)出厂状态Windows10系统,原装OEM系统镜像 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 所需要工具:16G或以上的U盘 文件格式:IS…

Python基础学习注意事项

1.Python中 小数字符串不可以转成int,即int("98.9")会报错! 数字字符串串才可以转对应的int、float 2.float数据计算的时候精度会丢失!解决办法:(from decimal import Decimal(可以计算准确&am…

npm启动,node.js版本过高

“dev_t”: “set NODE_OPTIONS”–openssl-legacy-provider" & npm run dev\n"

easyConnect 报本地环境异常错误

一、检查任务管理器中发现ecagent.exe进程是禁用状态。如图: 二、在异常客户端上,找到easyconnect的安装目录(默认路径:C:\Program Files (x86)\Sangfor\SSL\ECAgent),找到ecagent.exe应用程序尝试手动执行…

【2023 可信数据库发展大会】拓数派受邀参与,CTO 郭罡将在大会发表演讲

2023年7月4日~5日,由中国信息通信研究院、中国通信标准化协会指导,中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)主办的2023可信数据库发展会将于北京国际会议中心隆重召开。 大会以“自主创新引领”为主题&#xff0…

深入学习单例设计模式

目录 一.单例模式的定义 二.单例模式的实现方式 1.懒汉模式: 2.饿汉模式 3.静态内部类方式 4.反射模式 5.枚举方式 6.序列化方式 三.单例模式的应用 一.单例模式的定义 保证一个类只有一个实例,并且提供一个全局访问点 使用的场景:…

【table中部分tr的折叠与展开】

示例功能&#xff1a; 1. 点击“作品”按钮&#xff0c;会显示author的作品信息 2. 再次点击“作品”按钮&#xff0c;会收起author的作品信息 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&quo…

IDEA远程Debug调试工具(Remote)的使用

我们在开发的过程中&#xff0c;经常会遇到这样的情况&#xff1a;代码在本地测试得好好的&#xff0c;但部署上线后测试结果就不一样了&#xff0c;这时就需要去服务器上查看日志进行分析从而定位问题&#xff0c;但这样还是会比较麻烦&#xff0c;如果能够Debug调试&#xff…

CSS实现进度条和订单进度条---竖向

之前做了一个横向订单进度条&#xff0c;手机访问显示很难兼容样式&#xff0c;下面做一个竖向的&#xff0c;再结合情况微调一下&#xff0c;方便去兼容手机。 1.直接放页面 代码如下&#xff08;示例&#xff09;&#xff1a; <!DOCTYPE html> <html xmlns:th"…

【Java高级语法】(二十一)数组操作类:解析Arrays类中的全部操作方法,解锁Java数组操作技巧~

Java高级语法详解之数组操作类 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 Arrays类常用方法3.2 使用技巧 4️⃣ 应用场景&#x1f33e; 总结 前言&#xff1a;在学习本文之前&#xff0c;应该先学习并清楚了解Java基础部分的数组相关的概念和知识。 若还不具备学习条件&#xf…

途乐证券|人工智能概念再度下挫 海天瑞声、寒武纪等跌超10%

人工智能概念26日盘中大幅回调&#xff0c;截至发稿&#xff0c;当虹科技跌近18%&#xff0c;美亚柏科、昆仑万维跌约13%&#xff0c;博睿数据、光云科技、海天瑞声、寒武纪等跌超10%&#xff0c;焦点科技跌停&#xff0c;云从科技、朗玛信息、三六零等跌超9%。 香港途乐证券有…

力扣125:判断字符串是否是回文字符串

题目描述&#xff1a; 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个回文串。 字母和数字都属于字母数字字符。 给定一个字符串s&#xff0c;如果它是回文串&#xff0c;返回true&#xff1…

文件批量重命名利器!统一重命名和隐藏编号,让不同类型的文件整齐有序

进入数字时代&#xff0c;我们的电脑中存储了大量的文件&#xff0c;但是随着时间的推移&#xff0c;这些文件名可能变得混乱而难以管理。那么正需要文件批量改名高手来为你排忧解难&#xff0c;不仅可以将不同类型的文件统一重命名&#xff0c;还能隐藏顺序编号&#xff0c;让…

k8s calico 网络异常处理

故障 worker3故障重启后&#xff0c;该节点的 pod 访问不了其它节点服务 2023-06-26T07:44:41.041Z ERROR setup unable to start manager {"error": "Get \"https://10.244.64.1:443/api?timeout32s\": dial tcp 10.244.64.1:443: i/o…

还在用gtest?更好用的测试框架介绍

gtest需要安装有时候带来很多不方便。网络原因&#xff0c;下载安装gtest或者git上拉gtest都可能因为网络原因失败。除了gtest之外&#xff0c;还有很多轻量级易用的单元测试库&#xff0c;比如doctest。 现代C unit-test库 除了gtest之外&#xff0c;还有很多轻量级易用的单元…

Vscode如何快速打开用户的 settings.json 文件

1、打开vscode编辑器&#xff0c;本文演示的vscode是中文版 2、点击右下角齿轮’设置’ 3、在弹出的设置菜单中选择: 设置 ’ 快捷键 cmd, &#xff08;macos&#xff09; ctrl,&#xff08;windows&#xff09; 4、 点击 设置 ’ 后, 弹出设置窗口 5、在设置窗口右上角点击…

一些性能优化思路与策略

一些性能优化思路与策略 1. 前言2. 性能观察指标3.性能监控工具/途径 1. 前言 今天公司同事做技术分享&#xff0c;题目就是&#xff1a;一些性能优化思路与策略&#xff0c;我学习了一下然后做了如下总结。 2. 性能观察指标 响应时间:平均响应时间&#xff0c;TP95、TP99等等…

将字符串“01:03”转换成秒数

场景&#xff1a;我们经常遇到这种场景&#xff0c;用户使用前端的时间组件自定义时间长度&#xff0c;比如antd的timePicker&#xff0c;传递选中的时间给后端&#xff0c;但是在后端中我们一般会使用秒数或者分钟数去保存&#xff0c;而不会保存一个字符串。 这个时候我们需要…

探索OpenCV的AI实现视频超分

OpenCV除了使用光流算法与普通插值实现图像视频超分&#xff0c;还提供AI深度学习实现视频超分。算法模型包括&#xff1a;edsr、espcn、fsrcnn、lapsrn&#xff0c;实现超分的倍数有2、3、4、8。通过AI实现的视频超分比传统算法的效果更好&#xff0c;图像更清晰。 1、超分算…