目录1. Docker 镜像是什么2. 镜像命令详解2.1 docker images2.2 docker tag2.3 docker pull2.4 docker push2.5 docker rmi2.6 docker save2.7 docker load2.8 docker image inspect2.9 docker history2.10 docker image prune2.11 docker build2.12 docker import3. 镜像实操演示3.1 查找、拉取镜像3.2 镜像详情查看和打标推送3.3 运行容器和删除镜像4. 综合练习离线迁移镜像值得熟练掌握5. 综合练习镜像存储的压缩与共享正文开始1. 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用户公开共享。2. 镜像命令详解2.1 docker images功能列出本地镜像。语法docker images [OPTIONS] [REPOSITORY[:TAG]]别名docker image ls, docker image list关键参数1.-a :列出本地所有的镜像含中间映像层默认情况下过滤掉中间映像层2.--digests :显示镜像的摘要信息3.-f :显示满足条件的镜像4.--format :指定返回值的模板文件5.--no-trunc :显示完整的镜像信息6.-q :只显示镜像ID。样例#列出本地全部镜像 docker images #列出本地镜像中 REPOSITORY 为 ubuntu 的镜像列表。 docker images ubuntu2.2 docker tag功能标记本地镜像将其归入某一仓库。语法docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]别名docker image tag样例docker tag ubuntu:22.04 myregistry.com/myubuntu:22.042.3docker pull可参考镜像仓库实操一文中的使用演示。2.4 docker push可参考镜像仓库实操一文中的使用演示。2.5docker rmi功能删除镜像。语法docker rmi [OPTIONS] IMAGE [IMAGE...]别名docker image rm, docker image remove关键参数1.-f :强制删除2. --no-prune :不移除该镜像的过程镜像默认移除样例再查看发现本地以及删除了还可通过REPOSITORY和TAG进行删除2.6docker save功能将指定镜像保存成tar归档文件。语法docker save [OPTIONS] IMAGE [IMAGE...]别名docker image save关键参数1.-o :输出到的文件。样例2.7docker load功能导入使用docker save命令导出的镜像。语法docker load [OPTIONS]别名docker image load关键参数1.--input , -i :指定导入的文件代替STDIN。2. --quiet , -q :精简输出信息。样例2.8docker image inspect功能查看镜像详细信息语法docker image inspect [OPTIONS] IMAGE [IMAGE...]注意事项docker inspect会自动检查是镜像还是容器然后显示相关信息样例#查看镜像详细信息 docker images inspect nginx:1.23.32.9docker history功能显示镜像历史。语法docker history [OPTIONS] IMAGE别名docker image history关键参数1.-H , --human :大小和日期采用人容易读的格式展现2.--no-trunc :显示全部信息不要隔断3.-q, --quiet:只显示镜像id信息样例2.10docker image prune功能删除不使用的镜像。语法docker image prune [OPTIONS]关键参数1.-a , --all :删除全部不使用的镜像2.--filter filter:指定过滤条件3.-f, --force :不提示是否删除2.11docker build功能docker build命令用于使用Dockerfile创建镜像。语法docker build [OPTIONS] PATH | URL | -关键参数--build-arg[] :设置镜像创建时的变量-f :指定要使用的Dockerfile路径--label[] :设置镜像使用的元数据--no-cache :创建镜像的过程不使用缓存--pull :尝试去更新镜像的新版本--quiet, -q :安静模式成功后只输出镜像ID--tag, -t:镜像的名字及标签通常name:tag或者name 格式可以在一次构建中为一个镜像设置多个标签。--network:默认default。在构建期间设置RUN指令的网络模式2.12 docker import功能从归档文件中创建镜像语法docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]] 别名 docker image import关键参数-c :应用docker指令创建镜像-m :提交时的说明文字样例3. 镜像实操演示3.1 查找、拉取镜像3.2 镜像详情查看和打标推送进入/data/var/lib/docker/image/目录注意存储位置是修改后的查看镜像的详细信息docker image inspect busybox:1.36.0roothcss-ecs-c91e:/data/var/lib/docker/image# docker image inspect busybox:1.36.0 [ { Id: sha256:9e2bbca079387d7965c3a9cee6d0c53f4f4e63ff7637877a83c4c05f2a666112, RepoTags: [ busybox:1.36.0, lih2026/maxhou:v1.0 ], RepoDigests: [ busyboxsha256:9e2bbca079387d7965c3a9cee6d0c53f4f4e63ff7637877a83c4c05f2a666112, lih2026/maxhousha256:9e2bbca079387d7965c3a9cee6d0c53f4f4e63ff7637877a83c4c05f2a666112 ], Created: 2023-05-11T22:48:43.533857581Z, Config: { Env: [ PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ], Cmd: [ sh ] }, Architecture: amd64, Os: linux, Size: 7581664, RootFS: { Type: layers, Layers: [ sha256:1f1d08b81bbe3cb8d730d2e163d6737b4352192712b1f1548720dc224f6cac06 ] }, Metadata: { LastTagTime: 2026-10-30T08:22:23.728272293Z }, Descriptor: { mediaType: application/vnd.docker.distribution.manifest.list.v2json, digest: sha256:9e2bbca079387d7965c3a9cee6d0c53f4f4e63ff7637877a83c4c05f2a666112, size: 2295 }, Identity: { Pull: [ { Repository: docker.io/library/busybox } ] } } ]查看分层3.3 运行容器和删除镜像从另一个xshell窗口可发现容器已经跑起来了exit后可发现容器已经没有在运行了通过该命令可以找到这个exit的容器:镜像的删除可以根据id和名字删除对于使用的镜像需要先清理容器再删除镜像该命令下只是去除标签并没有删除我们实践的空间4. 综合练习离线迁移镜像值得熟练掌握在Ubuntu的环境下保存一个镜像把它拷贝到CentOS的服务器上加载运行它。值得注意的是像之前文章中介绍的不管是容器命令还是镜像命令这些命令都属于Docker所以在不同操作系统环境下执行这些命令都是一样的。1. 在Ubuntu环境下把一个镜像打包成tar包。拉取一个镜像2.在另外的环境下CentOS先检查该环境有没有安装docker:docker version注意下图是在Ubuntu环境下的操作此时即可在CentOS环境下看到我们需要的tar包如下图镜像迁移成功交互式启动该镜像成为容器5.综合练习镜像存储的压缩与共享拉取nginx 镜像如果本地没有镜像是从仓库拉取如果有会提示镜像已经存在并且是最新的。Docker images查看本地镜像可以看到该镜像为142Mb从上面看到nginx为1.21.4的大小是140多MB,但是我们从docker hub上查看可以看到镜像是 50多MB说明发生了压缩因为仓库到本地需要走网络所以文件越小越好把一个镜像打多个tag然后同时推送仓库可以看到是说层已经存在不会重复存储root139-159-150-152:/data/maxhou# docker tag nginx:1.22.1 maxhou/mybitnginx:1.22.1 root139-159-150-152:/data/maxhou# docker tag nginx:1.22.1 maxhou/mybitnginx:1.22.2 root139-159-150-152:/data/maxhou# docker tag nginx:1.22.1 maxhou/mybitnginx:1.22.3 root139-159-150-152:/data/maxhou# docker tag nginx:1.22.1 maxhou/mybitnginx:1.22.4 root139-159-150-152:/data/maxhou# docker push maxhou/mybitnginx -a The push refers to repository [docker.io/maxhou/mybitnginx] 9543dec06aa8: Layer already exists ccf4f419ba49: Layer already exists 21f8452ebfb1: Layer already exists 25bbf4633bb3: Layer already exists a4f34e6fb432: Layer already exists 3af14c9a24c9: Layer already exists 1.22.1: digest: sha256:9081064712674ffcff7b7bdf874c75bcb8e5fb933b65527026090dacda3 6ea8b size: 1570 9543dec06aa8: Layer already exists ccf4f419ba49: Layer already exists 21f8452ebfb1: Layer already exists 25bbf4633bb3: Layer already exists a4f34e6fb432: Layer already exists 3af14c9a24c9: Layer already exists 1.22.2: digest: sha256:9081064712674ffcff7b7bdf874c75bcb8e5fb933b65527026090dacda3 6ea8b size: 1570 9543dec06aa8: Layer already exists ccf4f419ba49: Layer already exists 21f8452ebfb1: Layer already exists 25bbf4633bb3: Layer already exists a4f34e6fb432: Layer already exists 3af14c9a24c9: Layer already exists添加一个新的镜像到我们的仓库的时候如果docker hub发现已经有了是mount 的不是从本地推上去的root139-159-150-152:/data/maxhou# docker tag nginx:1.16.1 maxhou/mybitnginx:1.16.1 root139-159-150-152:/data/maxhou# docker push maxhou/mybitnginx:1.16.1 The push refers to repository [docker.io/maxhou/mybitnginx] c23548ea0b99: Mounted from library/nginx 82068c842707: Mounted from library/nginx c2adabaecedb: Mounted from library/nginx 1.16.1: digest: sha256:2963fc49cc50883ba9af25f977a9997ff9af06b45c12d968b7985dc1e92 54e4b size: 948
企业数字化 ERP 产品动态
相关推荐
LinkedList知识 一、LinkedList 介绍LinkedList 是 List 接口的实现类,同时实现了Deque(双端队列)接口 ✅ List 共性:有序、可重复、带索引 底层:双向链表,每个 Node 节点:prev前驱指针 item数据 next后继指针… · 2026/11/3 19:25:22
英特尔量子生意 英特尔在量子计算已经埋头干了十几年,从硅自旋量子比特芯片,到控制电子设备,再到软件,各个部件都碰过。如今英特尔又要收购Classiq公司,准备认认真真把这么多年的量子研究变成一门正经生意,哪怕短期内没有高… · 2026/11/3 19:25:22
ViiTor Memo:让每一次对话,都成为 AI 可以调用的记忆 我们做 ViiTor Memo,并不是因为市面上缺少一款“能录音、能转写、能总结”的产品。恰恰相反,这类产品已经很多了。真正让我们反复思考的是:为什么工具越来越多,我们仍然会忘记那些重要的对话?为什么开完会、聊完需求、… · 2026/11/3 19:25:22
前端图片上传0KB问题解析与解决方案 1. 前端图片上传0KB问题深度解析最近在VueElementUI项目中处理图片上传时,遇到了一个典型问题:部分用户上传的图片在服务器端显示为0KB的破损文件。这个问题看似简单,实则涉及前端文件处理机制、浏览器API使用规范、前后端交互协议等多个技术… · 2026/11/3 20:02:38
用ping二分法快速定位MTU故障:原理、参数与上线自检清单 1. MTU配错到底会怎样:从三个真实症状说起MTU 这个词听起来很基础,但真正在现网里遇到它的时候,往往已经是半夜被告警叫醒的状态了。我先说三个我自己碰到过的场景,你对号入座一下,看看是不是眼熟。第一个场景… · 2026/11/3 20:02:38
Ansible Playbook进阶实战:生产级自动化技巧 1. Ansible Playbook进阶实战:从基础到生产级自动化(开头部分)
第一次接触Ansible Playbook时,我被它简洁的YAML语法和声明式编程模式深深吸引。但真正在生产环境大规模使用时,才发现那些基础教程里没讲的细节才是决定… · 2026/11/3 20:02:38
SURPAC地质建模规范:数据表、ID编号与文件命名避坑指南 简介:这份文档面向地质勘探、矿产资源评价及环境监测领域的建模初学者与技术人员,系统梳理了 SURPAC 软件建模的核心知识点,帮助读者建立从数据组织到解译建模的完整认知框架。压缩包内为 1 个 docx 文件,约 17KB,内容… · 2026/11/3 20:02:38
RTDE 实时数据交换:125Hz 上限、两阶段设计与避坑指南 简介:面向UR(优遨)机器人开发者与自动化集成工程师的RTDE接口技术手册,聚焦如何通过标准TCP/IP连接将外部程序与UR控制器同步,同时不破坏控制器实时属性,适用于现场总线驱动交互、机器人I/O操作与轨迹状态绘… · 2026/11/3 20:02:38
Firefox中文语言包安装与失效排查:版本匹配与多平台配置 帮别人装浏览器这种事我干过不少回,最常被追问的一句话就是——为什么装完之后界面还是英文的?Firefox 中文语言包的安装方法看着简单,真动手的时候却总在几个地方卡住:语言包版本差一位装不上、xpi 文件拖进去没反应、装完重启还… · 2026/11/3 20:01:37
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46