🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343 🔥 系列专栏:Docker_秦jh_的博客-CSDN博客
目录
Docker Image(镜像)
Docker 镜像是什么
镜像生活案例
镜像分层生活案例
为什么需要镜像
镜像命令详解
镜像命令清单
docker images
docker tag
docker pull
docker push
docker rmi
docker save
docker load
docker image inspect
docker history
docker import
docker image prune
docker build
镜像综合实战
实战一、离线迁移镜像
实战二、镜像存储的压缩与共享
前言
💬 hello! 各位铁子们大家好哇。
今日更新了Docker相关内容 🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝
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 用户公开共享。
镜像命令详解
镜像命令清单

docker images
功能 列出本地镜像。
语法
docker images [OPTIONS] [REPOSITORY[:TAG]]
关键参数
- -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
- –digests :显示镜像的摘要信息;
- -f :显示满足条件的镜像;
- –format :指定返回值的模板文件;
- –no-trunc :显示完整的镜像信息;
- -q :只显示镜像 ID
样例
#列出本地全部镜像
docker images
#列出本地镜像中 REPOSITORY 为 ubuntu 的镜像列表。
docker images ubuntu
docker tag
功能 标记本地镜像,将其归入某一仓库。
语法
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
样例
docker tag ubuntu:22.04 myregistry.com/myubuntu:22.04
docker pull
参考镜像仓库命令
docker push
参考镜像仓库命令
docker rmi
功能 删除镜像。
语法
docker rmi [OPTIONS] IMAGE [IMAGE…]
关键参数
- -f :强制删除;
- –no-prune :不移除该镜像的过程镜像,默认移除;
样例
docker rmi maxhou/mybusybox:v0.1
docker save
功能 将指定镜像保存成 tar 归档文件。
语法
docker save [OPTIONS] IMAGE [IMAGE…]
关键参数
-o :输出到的文件。
样例

docker load
功能 导入使用 docker save 命令导出的镜像。
语法
docker load [OPTIONS]
关键参数
- –input , -i : 指定导入的文件,代替 STDIN。
- –quiet , -q : 精简输出信息。
样例
docker load -i mynginx_1.22.1.tar
docker image inspect
功能 查看镜像详细信息
语法
docker image inspect [OPTIONS] IMAGE [IMAGE…]
注意事项: ○ docker inspect 会自动检查是镜像还是容器然后显示相应信息
样例
#查看镜像详细信息
docker images inspect nginx:1.23.3
docker history
功能 显示镜像历史。
语法
docker history [OPTIONS] IMAGE
关键参数
- -H , –human :大小和日期采用人容易读的格式展现
- –no-trunc :显示全部信息,不要隔断;
- -q, –quiet: 只显示镜像 id 信息;
docker import
功能 从归档文件中创建镜像。
语法
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
关键参数
- -c :应用 docker 指令创建镜像;
- -m :提交时的说明文字
样例
docker import my_ubuntu_v3.tar maxhou/ubuntu:v4
docker image prune
功能 删除不使用的镜像。
语法
docker image prune [OPTIONS]
关键参数
- -a , –all : 删除全部不使用的镜像;
- –filter filter:指定过滤条件;
- -f, –force :不提示是否删除;
样例
docker image prune
docker 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 指令的网络模式
样例
docker build -t mynginx:v1 .
镜像综合实战
实战一、离线迁移镜像
1.服务器 1 上镜像保存为 tar 文件


2.scp 或者只用使用可视化工具拷贝镜像到第二台服务器上

3.从 tar 中恢复镜像

实战二、镜像存储的压缩与共享
1.拉取 nginx 镜像,如果本地没有,镜像是从仓库拉取,如果有会提示镜像已经存 在,并且是最新的。

2. Docker images 查看本地镜像,可以看到该镜像为 142Mb

3. 从上面看到 nginx 为 1.21.1 的大小是 140 多 MB,但是我们从 docker hub 上查看可 以看到镜像是 50 多 MB,说明发生了压缩,因为仓库到本地需要走网络,所以文件越 小越好

4. 把一个镜像打多个 tag,然后同时推送仓库,可以看到是说层已经存在,不会重复 存储


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







