【Docker】Docker Image(镜像)

文章目录

  • 一、Docker镜像是什么?
  • 二、镜像生活案例
  • 三、为什么需要镜像
  • 四、镜像命令详解
    • docker rmi
    • docker save
    • docker load
    • docker history
    • docker image prune
  • 五、镜像操作案例
  • 六、镜像综合实战
    • 实战一、离线迁移镜像
    • 实战二、镜像存储的压缩与共享

一、Docker镜像是什么?

Docker image 本质上是一个 read-only 只读文件, 这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行 application 所必须的文件.

  • 我们可以把 Docker image 理解成一个模板, 可以通过这个模板实例化出来很多容器。
  • image 里面是一层层文件系统 Union FS。联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统。

每一层文件系统我们叫做一层 layer,联合文件系统可以对每一层文件系统设置三种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是 docker镜像中每一层文件系统都是只读的。

构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统。一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样。当你使用的时候,你只会看到一个完全的整体,你不知道里面有几层,也不清楚每一层所做的修改是什么。


二、镜像生活案例

镜像相当于我们 Java 或者 C++ 中的类,相当于一个模板,可以很方便的构建出来不同的对象。

在这里插入图片描述

镜像生活案例

我们以日常的地板为例,开发商的房子提供给用户的时候一般是做好了地暖,而这些地暖其实是一层一层添加的,最底层的钢筋水泥层,然后添加保温层,采暖管,再铺设水泥层,到最后交付的时候家家户户都是水泥面,这一层一般是不可修改的,最上层用户一般会再铺设商木地板或者地板砖每家每户的选择不一样,相当于我们镜像的容器层。

在这里插入图片描述


三、为什么需要镜像

在部署应用时,通过手工或写一些脚本的方式进行部署。这样部署面临问题就是云端和本地环境一致问题。用户为每个应用打包过程比较繁琐,需要配置和给中修改等操作,非常费劲。

然而, Docker 镜像就是为了解决这个小小的打包功能,突然一夜之间成名。那么,你可能说 Docker 镜像就是个压缩包,是的,你猜对了,它就像一个压缩包文件。它是如何解决 Paas 时代所面临的云端和本地一致性问题?很简单,它是把一个镜像制作成一个完整的操作系统所有文件和对应的目录结构,这样的压缩包是跟你本地和测试环境用的操作系统一摸一样。

docker 最大的贡献就是定义了容器镜像的分层的存储格式, docker 镜像技术的基础是联合文件系统(UnionFS),其文件系统是分层的。这样既可以充分利用共享层,又可以减少存储空间占用。

docker 镜像提供了一种打包应用程序和预配置服务器环境的便捷方式,可以很方便的将其用于个人用途或与其他 Docker 用户公开共享。

在这里插入图片描述


四、镜像命令详解

在这里插入图片描述

docker rmi

  • 功能
    删除镜像。
  • 语法
docker rmi [OPTIONS] IMAGE [IMAGE...]
  • 别名
docker image rm, docker image remove
  • 关键参数
    • -f :强制删除;
    • –no-prune :不移除该镜像的过程镜像,默认移除;
  • 样例
#通过image id删除
docker rmi 0c00acac9c27
#通过名字:TAG删除
docker rmi busybox:1.35.0

在这里插入图片描述

这里我们需要注意的是,如果有容器引用了该镜像,那么这个镜像不能直接被删除,必须先删除,当然也可以直接带-f命令强制删除。


docker save

  • 功能
    将指定镜像保存成 tar 归档文件。
  • 语法
docker save [OPTIONS] IMAGE [IMAGE...]
  • 别名
docker image save
  • 关键参数

    • -o:输出到的文件
  • 样例

docker save -o mybusybox1.tar busybox:1.36.0

在这里插入图片描述


docker load

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

在这里插入图片描述
在这里插入图片描述


docker history

  • 功能
    显示镜像历史
  • 语法
docker history [OPTIONS] IMAGE
  • 别名
docker image history
  • 关键参数

    • -H , --human :大小和日期采用人容易读的格式展现
    • –no-trunc :显示全部信息,不要隔断;
    • -q, --quiet: 只显示镜像 id 信息;
  • 样例

docker history busybox:1.26.0

在这里插入图片描述
在这里插入图片描述


docker image prune

  • 功能
    删除不使用的镜像
  • 语法
docker image prune [OPTIONS]
  • 关键参数

    • -a , --all : 删除全部不使用的镜像;
    • –filter filter:指定过滤条件;
    • -f, --force :不提示是否删除;
  • 样例

#清理不被任何容器使用的无效或悬空镜像
docker image prune
#删除所有容器不使用的镜像
docker image prune -a

在这里插入图片描述
在这里插入图片描述


五、镜像操作案例

使用busybox查看容器启动后的IP,并把该镜像删除掉

💕 查找并下载镜像

在这里插入图片描述
在这里插入图片描述

💕 详细查看镜像及列表存储位置

在这里插入图片描述
在这里插入图片描述

💕 运行容器

在这里插入图片描述
在这里插入图片描述


六、镜像综合实战

实战一、离线迁移镜像

  1. 服务器 1 上镜像保存为 tar 文件
    在这里插入图片描述
  2. scp 或者只用使用可视化工具拷贝镜像到第二台服务器上
scp mytestv1.0.tar root@47.115.224.66 /data/test/
  1. 从 tar 中恢复镜像
docker load -i mytestv1.0.tar 

实战二、镜像存储的压缩与共享

查看镜像的压缩

  1. 查看本地镜像
    在这里插入图片描述
    这里我们可以看到服务端的镜像比拉取到本地之后的大小要小得多。可以节省传输镜像时的带宽。
  2. 将镜像推送到远端仓库后查看
    在这里插入图片描述
    在这里插入图片描述

查看镜像的共享

  1. 将同一个镜像打包好几个不同的标签
    在这里插入图片描述
  2. 将它们分别推送到仓库中
    在这里插入图片描述在这里插入图片描述

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

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

相关文章

【SQL高频基础题】619.只出现一次的最大数字

题目: MyNumbers 表: ------------------- | Column Name | Type | ------------------- | num | int | ------------------- 该表可能包含重复项(换句话说,在SQL中,该表没有主键)。 这张表的每…

面试官都爱看的作品集,你做对了吗?

经常有朋友在群里问作品集的相关问题:设计师不知道从哪里开始作品集,觉得自己拿不到作品,作品集没有亮点,真的不知道怎么改进,作品集投递后没有回应,很受打击。 针对这些问题,我们将向您展示如何调整和改进…

正点原子--STM32基本定时器学习笔记(2)

目录 1. 相关寄存器介绍 1.1 控制寄存器 1(TIMx_CR1)​编辑 1.2 DMA/中断使能寄存器(TIMx_DIER) 1.3 状态寄存器(TIMx_SR) 1.4 计数器(TIMx_CNT) 1.5 预分频器(TIMx_PSC) 1.6 自动重装载寄存器(TIMx_ARR) 2. 工程建立 3. 导入tim.c文件 4. 相关HAL库函数介绍 4.1 H…

[linux]-总线,设备,驱动,dts

1. 总线BUS 在物理层面上,代表不同的工作时序和电平特性: 总线代表着同类设备需要共同遵守的工作时序,不同的总线对于物理电平的要求是不一样的,对于每个比特的电平维持宽度也是不一样,而总线上传递的命令也会有自己…

动态扩缩容下的全局流水号设计

关于全局流水号,业内用的比较多的就是雪花算法,一直没理解在动态扩缩容下其中的workId和 datacenterId如何设置,查到了几个方法:reidis中取,待后期实践下。 先简单的介绍一下雪花算法,雪花算法生成的Id由…

计算结构化数据集范围内给定位置的单元格 ID

开发环境: Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example demo解决问题:计算结构化数据集范围内给定位置的单元格 ID 关键点: vtkImageData对象,表示一个三维的像素网格。grid->Set…

零代码3D可视化快速开发平台

老子云平台 老子云3D可视化快速开发平台,集云压缩、云烘焙、云存储云展示于一体,使3D模型资源自动输出至移动端PC端、Web端,能在多设备、全平台进行展示和交互,是全球领先、自主可控的自动化3D云引擎。此技术已经在全球申请了专利…

6.0 Zookeeper session 基本原理详解教程

客户端与服务端之间的连接是基于 TCP 长连接,client 端连接 server 端默认的 2181 端口,也就 是 session 会话。 从第一次连接建立开始,客户端开始会话的生命周期,客户端向服务端的ping包请求,每个会话都可以设置一个…

MySQL 表的增删查改(练习)

简单增删查改 1.创建的商品表中插入一条数据:名称为“学生书包”、价格18.91、库存101、描述为空 insert into product(name,price,storage) values(学生书包,18.91,101); insert into product values (学生书包,18.91,101,null); 2.在图书表中新增一条记录&…

飞天使-k8s知识点13-kubernetes散装知识点2-statefulsetdaemonset

文章目录 RC RS DeploymentStatefulSet有状态服务控制器DaemonSet守护进程与任务job cronjob RC RS Deployment StatefulSet有状态服务控制器 statefulset StatefulSet 是 Kubernetes 1.9 版本引入的一个新的 API 对象,主要用于处理有状态的服务。StatefulSet 与 De…

spring.jpa.hibernate 配置和源码解析

版本 spring-boot:3.2.2 hibernate:6.4.1.Final 配置项目 DDL模式 生成定义语句修改表结构 配置路径:spring.jpa.hibernate.ddl-auto配置值:org.hibernate.tool.schema.Action枚举类型值 可选值: 可选值说明none默认值。不操作create-…

12.JavaScript(WebAPI) - JS api文献精解

文章目录 1.WebAPI 背景知识1.1什么是 WebAPI1.2什么是 API1.3API 参考文档 2.DOM 基本概念2.1什么是 DOM2.2DOM 树 3.获取元素3.1querySelector3.2querySelectorAll 4.事件初识4.1基本概念4.2事件三要素4.3简单示例 5.操作元素5.1获取/修改元素内容5.1.1innerText5.1.2innerHT…

代码随想录算法训练营|day29

第七章 回溯算法 491.递增子序列46.全排列47.全排列II代码随想录文章详解总结 491.递增子序列 同层去重,只需保证当前层元素不重复即可【前仆后继的感觉】 func findSubsequences(nums []int) [][]int {res, path : [][]int{}, []int{}var help func(nums []int, …

EMC学习笔记(二十一)降低EMI的PCB设计指南(一)

降低EMI的PCB设计指南(一) 1.概述2.射频3.连接器与过孔元件4.静态引脚和动态引脚和输入5.基本回路6.差模与共模 tips:资料主要来自网络,仅供学习使用。 1.概述 印刷电路板(PCB)的一般布局准则,基本上都有相对的文件进…

C++重新入门-C++变量作用域

目录 1.C变量定义 2.C作用域 3.局部变量 4.全局变量 5.块作用域变量 6.初始化局部变量和全局变量 1.C变量定义 一般来说有三个地方可以定义变量: 在函数或一个代码块内部声明的变量,称为局部变量。 在函数参数的定义中声明的变量,称为…

Acwing---835. Trie字符串统计

Trie字符串统计 1.题目2.基本思想3.代码实现 1.题目 维护一个字符串集合,支持两种操作: I x 向集合中插入一个字符串 x;Q x 询问一个字符串在集合中出现了多少次。 共有 N个操作,所有输入的字符串总长度不超过 1 0 5 10^5 105…

2024/2/7 图的基础知识

图的存储 B3643 图的存储 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路&#xff1a;mp[n][n]用来存邻接矩阵&#xff0c;二维vector用来存每个点连的点 完整代码&#xff1a; #include <bits/stdc.h> #define int long long const int N 1e5 10; int n, m; …

【算法】【数据结构】算法与数据结构的关系

程序算法数据结构语言工具和环境 但在算法学习过程中&#xff0c;我认识到算法和数据结构是密不可分的&#xff0c;脱离数据结构谈论算法是空架子。 算法&#xff1a;解决问题的步骤和方法。对数据进行操作和处理的方法。 数据结构&#xff1a;用来存储数据的方式。 数据结构和…

【教程】Linux使用git自动备份和使用支持文件恢复的rm命令

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 背景介绍 首先非常不幸地告诉你&#xff1a;Linux 系统的标准 rm 命令不支持文件恢复功能。一旦使用 rm 删除了文件或目录&#xff0c;它们就会从文件系统中永久删除&#xff0c;除非你使用专门的文件恢复工具尝试…

2.7作业

分别通过select、多进程、多线程实现一个并发服务器 select #include <myhead.h> #define PORT 8888 #define IP "192.168.250.100" int main(int argc, const char *argv[]) {//1、创建用于接受连接的套接字int sfd socket(AF_INET, SOCK_STR…