Docker学习——④

文章目录

  • 1、Docker Image(镜像)
  • 2、镜像命令详解
    • 2.1 docker rmi
    • 2.2 docker save
    • 2.3 docker load
    • 2.4 docker image inspect
    • 2.5 docker history
    • 2.6 docker image prune
  • 3、镜像综合实战
    • 3.1 离线镜像迁移
    • 3.2 镜像存储的压缩与共享

1、Docker Image(镜像)

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 用户公开共享

2、镜像命令详解

镜像命令清单

命令别名功能
docker imagesdocker image ls/docker image list列出本地镜像
docker tagdocker image tag给镜像打标签,可用于推送镜像仓库
docker pulldocker image pull从镜像仓库拉取镜像
docker pushdocker image push推送镜像到仓库
docker rmidocker image rm/ docker image remove删除本地镜像
docker builddocker image build通过 dockerfile制作镜像
docker savedocker image save将指定镜像保存成 tar 归档文件
docker loaddocker image load导入使用docker save 命令导出的镜像
docker image inspect查看镜像详细信息
docker historydocker image history查看镜像历史
docker importdocker image import从归档文件docker export中创建镜像
docker image prune删除不使用的镜像

2.1 docker rmi

docker rmi
删除本地镜像

docker rmi [OPTIONS] IMAGE [IMAGE...]

别名

docker image rm, docker image remove

关键参数
-f :强制删除
- -no-prune :不移除该镜像的过程镜像,默认移除

通过 repository:rag 删除
在这里插入图片描述

也可以通过 image id 删除

在这里插入图片描述

如果镜像有对应的容器,此时仅仅使用rmi是无法删除的

在这里插入图片描述

因此需要用到 -f 参数

在这里插入图片描述

2.2 docker save

docker save
将指定镜像保存成 tar 归档文件

docker save [OPTIONS] IMAGE [IMAGE...]

别名

docker image save

关键参数
-o :输出到的文件

打包一个镜像到文件
在这里插入图片描述

打包多个镜像到文件

在这里插入图片描述

2.3 docker load

docker load
导入使用 docker save 命令导出的镜像

docker load [OPTIONS]

别名

docker image load

关键参数
- -input , -i : 指定导入的文件,代替 STDIN
- -quiet , -q : 精简输出信息

在这里插入图片描述

测试 -q 参数,精简输出信息

在这里插入图片描述

2.4 docker image inspect

docker image inspect
查看镜像详细信息

docker image inspect [OPTIONS] IMAGE [IMAGE...]

注意事项:
docker inspect 会自动检查是镜像还是容器然后显示相应信息

在这里插入图片描述

2.5 docker history

docker history
显示镜像历史

docker history [OPTIONS] IMAGE

别名

docker image history

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

参看nginx:1.23.4的历史信息

在这里插入图片描述

2.6 docker image prune

docker image prune
删除不使用的镜像
不适用的镜像有两种,只要容器不使用,就认为它是不使用的镜像
第二种叫虚悬镜像或者空悬镜像,它的REPOSITORY和TAG都是null

docker image prune [OPTIONS]

关键参数
-a,- -all:删除全部不使用的镜像
- -filter filter:指定过滤条件
-f,- -force:不提示是否删除

docker image prune
在这里插入图片描述

docker image prune -a

在这里插入图片描述

3、镜像综合实战

3.1 离线镜像迁移

从服务器1上拉去一个镜像,我这里的拉的是自己仓库的镜像,是centos7的镜像

在这里插入图片描述

拉取成功后,将这个镜像打包成tar文件

在这里插入图片描述

将这个tar文件从服务器1上拷贝到服务器2上,使用scp命令

scp 【本地文件的路径】【对端服务器用户名】@【对端服务器地址】:【对端服务器上存放文件的路径】

拷贝成功后,在服务器2上对应的目录下查看是否有对应的tar文件

在这里插入图片描述

此时服务器2还需要安装docker(自行安装),不然就无法使用对应的docker 命令,也就无法加载这个tar文件

使用 load -i 命令进行加载
在这里插入图片描述

加载成功,测试一下这个镜像,结果没啥问题

在这里插入图片描述

3.2 镜像存储的压缩与共享

镜像存储之压缩
拉取 nginx 镜像,如果本地没有,镜像是从仓库拉取,如果有会提示镜像已经存在,并且是最新的

在这里插入图片描述

查看nginx:1.21.4的大小

在这里插入图片描述

查看机器的CUP架构,再去docker hub 上找对应CPU架构的nginx:1.21.4的大小
在这里插入图片描述

在这里插入图片描述

docker hub 仓库里面的nginx镜像为54.08MB,将它拉到自己的服务上,结果成为了141MB,为什么呢?

因为镜像在服务端(docker hub)的时候是经过压缩的,拉到本地时就自动进行了解压

这么做的主要原因是镜像在服务端压缩,存储占用空间少,并且其他人在拉取镜像时,传输的数据包更小,就节省了带宽

将这个nginx镜像打一个标签,再推送到自己的仓库去

在这里插入图片描述

推送完成后,再去自己的仓库看一下, 发现镜像又被压缩了
在这里插入图片描述

镜像存储之共享

拉取nginx:1.21.3

在这里插入图片描述

给nginx:1.21.3多次打标签,再上传到自己的仓库

在这里插入图片描述

在这里插入图片描述

这里出现了Mount from library/nginx,并没有把本地的镜像推送到仓库,因为发现服务端有,所以直接使用了library/nginx里的

推送第二个

在这里插入图片描述

直接就告诉我们对应的层已经存在了

推送第三个,第四个都是如此

在这里插入图片描述

因此:添加一个新的镜像到我们的仓库的时候,如果 docker hub 发现已经有了是 mount的,不是从本地推上去的

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

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

相关文章

你知道在游戏开发中怎么将算法与其作用的对象隔离开来吗?

点击上方亿元程序员关注和★星标 引言 你可能知道的设计模式-访问者模式 大家好,今天我们要来聊一聊在游戏开发中非常实用的设计模式——访问者模式。访问者模式是一种将算法与对象结构分离的软件设计模式,它可以让代码更加灵活、可扩展,同…

那些年遇到过的问题与解决方案

目录 一、当我们想进行数据回显并且只是让用户查看信息不能编辑时,置灰处理 二、多选框初始化加载问题 三、时间处理 获取当前年月日 时间自定义格式化 时间脱敏处理,去掉秒 四、input输入框处理 input输入框设定为只能输入0与正整数 刚进页面…

UE4 Niagara Module Script 初次使用笔记

这里可以创建一个Niagara模块脚本 创建出来长这样 点击号,输出staticmesh,点击它 这样就可以拿到对应的一些模型信息 这里的RandomnTriCoord是模型的坐标信息 根据坐标信息拿到位置信息 最后的Position也是通过Map Set的号,选择Particles的P…

数据库实验:SQL的数据视图

目录 视图概述视图的概念视图的作用 实验目的实验内容实验要求实验过程 视图概述 视图是由数据库中的一个表或多个表导出的虚拟表,其作用是方便用户对数据的操作 视图的概念 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一…

安科瑞出席2023湖南智能建筑电气高峰论坛-安科瑞 蒋静

10月27日,安科瑞电气股份有限公司受邀出席在湖南长沙召开的2023湖南智慧建筑电气高峰论坛。会议主题是“安全、健康、智慧、创新”,现场汇集湖南省设计院、施工单位、高等院校和企业代表等300余人参会。 湖南省建筑设计院集团股份有限公司机电院总工、正…

原文远知行COO张力加盟逐际动力 自动驾驶进入视觉时代?

11月7日,通用足式机器人公司逐际动力LimX Dynamics官宣了两位核心成员的加入。原文远知行COO张力出任逐际动力联合创始人兼COO,香港大学长聘副教授潘佳博士为逐际动力首席科学家。 根据介绍,两位核心成员的加入,证明一家以技术驱…

Flink SQL Regular Join 、Interval Join、Temporal Join、Lookup Join 详解

Flink ⽀持⾮常多的数据 Join ⽅式,主要包括以下三种: 动态表(流)与动态表(流)的 Join动态表(流)与外部维表(⽐如 Redis)的 Join动态表字段的列转⾏&#xf…

低代码开发,节约成本更好的选择

目录 低代码开发过程中是如何工作的? 低代码开发具备哪些功能? 具备的功能有: 01、高性能、高拓展 02、功能丰富,满足通用场景 03、私有化部署 04、代码生成器,下载代码进行二次开发 05、适配国产化,支持主…

黄金走势分析:美元反弹,金价已失守1980关口

昨晚美元和美债收益率反弹回升,现货黄金震荡下行,美市尾盘金价失守1980美元关口,最低至1977.22美元/盎司,最终收跌0.72%,报收1977.69美元/盎司。在汉声集团分析师张新才发稿前,今日(周二&#x…

JavaSE 再续篇-面试题:this 与 super 关键字的区别

🔥博客主页: 小扳_-CSDN博客 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 this 与 super 关键字的区别 1.1 在Java中,this 关键字有以下作用 1.2 在Java中,super 关键字有以下作用 2.0 经典习题 1.0 this 与 su…

一种以RGB颜色登录的密码实现

当用户点击了某些密码之后,就可以登录成功,主要用于安全码,辅助安全手段。 颜色密码虽然不方便用键盘输入,只能用鼠标点击,但是容易记忆,也不容易被黑客攻陷。

工程(十四)——ubuntu20.04 PL-VINS

博主创建了一个科研互助群Q:772356582,欢迎大家加入讨论。这是一个科研互助群,主要围绕机器人,无人驾驶,无人机方面的感知定位,决策规划,以及论文发表经验,以方便大家很好很快的科研…

MySQL的备份恢复

数据备份的重要性 1.生产环境中,数据的安全至关重要 任何数据的丢失都会导致非常严重的后果。 2.数据为什么会丢失 :程序操作,运算错误,磁盘故障,不可预期的事件(地震,海啸)&#x…

21.6 Python 构建ARP中间人数据包

ARP中间人攻击(ARP spoofing)是一种利用本地网络的ARP协议漏洞进行欺骗的攻击方式,攻击者会向目标主机发送虚假ARP响应包,使得目标主机的ARP缓存中的IP地址和MAC地址映射关系被篡改,从而使得目标主机将网络流量发送到攻…

优维低代码实践:打包发布

导语 优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。…

【C++】开源:rapidjson数据解析库配置与使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍rapidjson数据解析库配置与使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&…

【亲测推荐】魔方财务和魔方云系统开源全解密

简介 资源入口点击进入 众所周知,魔方财务现在官方售价299,那么接下来就是带来开心版,详细手写实测安装教程已经放在付费资源中 展示 > 本文由博客一文多发平台 [OpenWrite](https://openwrite.cn?fromarticle_bottom) 发布!

MySQL索引事务存储引擎

索引:是一个排序的列表 列表中存储的是索引的值和包含这个值数据所在行的物理地址 索引的作用 利用索引数据库可以快速定位 大大加快查询速度表的数据很大 或查询需要关联多个表 使用索引也可以查询速度加快表与表之间的连接速度使用分组和排序时可以大大减少时间提…

数据结构 - 全貌总结

目录 一. 前言 二. 分类 三. 常见的线性和非线性结构 一. 前言 数据结构是计算机存储、组织数据的方式。一种好的数据结构可以带来更高的运行或者存储效率。数据在内存中是呈线性排列的,但是我们可以使用指针等道具,构造出类似“树形”等复杂结构。 数…

java项目之宠物管理系统(ssm框架)

项目简介 宠物管理系统实现了以下功能: 管理员:首页、个人中心、宠物分类管理、商品分类管理、宠物用品管理、宠物商店管理、宠物领养管理、用户管理、宠物寄存管理、用户领养管理、宠物挂失管理、论坛管理、管理员管理、系统管理、订单管理。前台首页…