【Docker】Docker Image(镜像)

news/2024/7/4 7:46:59 标签: docker, 容器, 云原生

文章目录

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

一、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_35">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_63">docker save

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

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

docker save -o mybusybox1.tar busybox:1.36.0

在这里插入图片描述


docker_load_87">docker load

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

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


docker_history_112">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_139">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.niftyadmin.cn/n/5369624.html

相关文章

BeginCTF2024 RE 部分复现

8. arc 上面一托混淆,左边似乎是三个东西相乘 单独取出最左边一托打印,可以得到大数组 接下来要解密,原代码非常混乱,我们先整理一下,简单去混淆 print (all([[data][a][d] e for a, b in enumerate([[int(a) for a …

Unity2D 学习笔记 0.Unity需要记住的常用知识

Unity2D 学习笔记 0.Unity需要记住的常用知识 前言调整Project SettingTilemap相关(创建地图块)C#脚本相关程序运行函数private void Awake()void Start()void Update() Collider2D碰撞检测private void OnTriggerStay2D(Collider2D player)private void…

【春节特辑】金融IT运维新视角:回望2023年变革浪潮,前瞻2024年创新风潮

随着金融行业的数字化转型加速,银行、证券、基金等机构的信息化建设日益成为业务发展的核心驱动力。运维管理软件,特别是其IT基础监控功能,对于确保金融系统稳定、安全、高效运行至关重要。 本文将回顾2023年金融行业信息化建设中IT基础监控…

Django模板(二)

标签if 标签在渲染过程中提供使用逻辑的方法,比如:if和for 标签被 {% 和 %} 包围,如下所示: 由于在模板中,没有办法通过代码缩进判断代码块,所以控制标签都需要有结束的标签 if判断标签{% if %} {% endif %} : # athlete_list 不为空 {% if athlete_list %}# 输出 ath…

手机常亮屏不自动灭屏

一. 基础知识介绍 1. WakeLock(休眠锁) WakeLock用于保持设备的唤醒状态,有些情况下,即时用户不操作App,我们也需要保持屏幕处于唤醒状态,以保证用户体验,比如视频类APP和计步类APP,…

政安晨:示例演绎TensorFlow的官方指南(一){基础知识}

为什么要示例演绎? 既然有了官方指南,咱们在官方指南上看看就可以了,为什么还要写示例演绎的文章呢? 其实对于初步了解TensorFlow的小伙伴们而言,示例演绎才是最重要的。 官方文档已经假定了您已经具备了相当合适的…

关于推荐考生跨级报考GESP资格的通知

根据CCF GESP组委会的决议,自即日起,持有PTA及NOI相关证书的教师具备推荐考生跨级报考GESP的资格。现将具体事项通知如下: 一、推荐等级资格规定 此规定仅适用于CCF认证证书在有效期内的教师,每位教师每次拥有10个推荐名额&…

【蓝桥杯冲冲冲】Invasion of the Milkweed G

【蓝桥杯冲冲冲】Invasion of the Milkweed G 蓝桥杯备赛 | 洛谷做题打卡day30 文章目录 蓝桥杯备赛 | 洛谷做题打卡day30[USACO09OCT] Invasion of the Milkweed G题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 题解代码我的一些话 [USACO09OCT] Invasion of the Mi…