【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.hqwc.cn/news/458788.html

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

相关文章

孙思邈中文医疗大模型

孙思邈, 唐代医药学家、道士, 被后人尊称为"药王". 其十分重视民间的医疗经验, 不断积累走访, 及时记录下来, 写下著作《千金要方》. 唐朝建立后, 孙思邈接受朝廷的邀请, 与政府合作开展医学活动, 完成了世界上第一部国家药典《唐新本草》. 孙思邈中医药大模型(简称:…

【C语言】位与移位操作符详解

目录 1.⼆进制和进制转换 ①十进制:生活中最常用 ②二进制:计算机中使用的,每个数字称为一个比特 ③八进制、十六进制也如上 ④二进制转十进制 ⑤十进制转二进制 ⑥二进制转八进制 ⑦二进制转十六进制 2.原码、反码、补码 3.移位操…

【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(下)

目录 1 -> 再谈构造函数1.1 -> 构造函数体赋值1.2 -> 初始化列表1.3 -> explicit关键字 2 -> static成员2.1 -> 概念2.2 -> 特性 3 -> 友元3.1 -> 友元函数3.2 -> 友元类 4 -> 内部类5 -> 匿名对象6 -> 拷贝对象时的一些编译器优化 1 -…

[N-141]基于springboot,vue网上拍卖平台

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 系统分前后台,项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatis-plusredi…

.NET Core 实现 JWT 认证

写在前面 JWT(JSON Web Token)是一种开放标准, 由三部分组成,分别是Header、Payload和Signature,它以 JSON 对象的方式在各方之间安全地传输信息。通俗的说,就是通过数字签名算法生产一个字符串,然后在网络…

RFID手持终端_智能pda手持终端设备定制方案

手持终端是一款多功能、适用范围广泛的安卓产品,具有高性能、大容量存储、高端扫描头和全网通数据连接能力。它能够快速平稳地运行,并提供稳定的连接表现和快速的响应时,适用于医院、物流运输、零售配送、资产盘点等苛刻的环境。通过快速采集…

ROS笔记二:launch

目录 launch node标签 参数 参数服务器 节点分组 launch launch文件是一种可以可实现多节点启动和参数配置的xml文件,launch文件用于启动和配置ROS节点、参数和其他相关组件。launch文件通常使用XML格式编写,其主要目的是方便地启动ROS节点和设置节点之间的连…

基于CEVA DSP BX2的架构分析(六)-加载和存储单元(二)

6.4 指针修改机制 LS0和LS1都包含指针修改机制。当使用间接或索引寻址模式时,指针的修改可以与地址生成并行执行。在间接寻址模式中,指针包含地址,而在变址寻址模式下,指针包含偏移量(有关这些寻址模式的更多详细信息&…

无心剑中译彭斯《深情一吻》

Ae Fond Kiss 深情一吻 Robert Burns 罗伯特彭斯 Ae fond kiss, and then we sever; Ae fareweel, and then forever! Deep in heart-wrung tears I’ll pledge thee, Warring sighs and groans I’ll wage thee. Who shall say that Fortune grieves him, While the star …

Go语言每日一练 ——链表篇(三)

传送门 牛客面试笔试必刷101题 ---------------- 链表中的节点每k个一组翻转 题目以及解析 题目 解题代码及解析 package main import _"fmt" import . "nc_tools" /** type ListNode struct{* Val int* Next *ListNode* }*//*** 代码中的类名、方…

稳压二极管应用电路

稳压二极管比较特殊,基本结构与普通二极管一样,也有一个PN结。由于制造工艺的不同,当这种PN结处于反向击穿状态时,PN结不会损坏(普通二极管的PN结是会损坏),在稳压二极管用来稳定电压时就是利用它的这一击穿特性。 由…

【TCP】高频面试题

前言 在IT行业的求职过程中,传输控制协议(TCP)作为网络通信的核心协议之一,其相关面试题常常出现在各大公司面试中。TCP的稳定性和可靠性是支撑互联网数据传输的基石,因此,对TCP有深入理解不仅能够帮助求职…