Docker Image(镜像)

"脚印会旧而梦还在走"


Docker 镜像介绍

(1) 如何理解镜像?

🎯 docker image本质就是一个 read-only(只读)文件,这个文件包含了文件系统、源码、库文件、依赖文件、工具等一些运行 application 所必须的文件。

🎯 我们也可以把docker image理解成一个模板,根据这个模板可以实例化出很多 "容器"。至于容器是什么?这里我们就简单理解成一个 "独立的操作系统+应用程序" 即可。

🎯 在image中是一层层文件系统 Union FS。联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统。每一层文件系统就叫做当前层的 "layer"。例如,我们可以在docker hub随意举例一个镜像文件:

注: 联合文件系统可以对每一层文件系统设置三 种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是 docker镜像中每一层文件系统都是只读的

镜像分层

在构建镜像的时候,都是从一个最基本的操作系统开始的。每个构建的操作都相当于做一层的修改,增加了一层文件系统。于是,一层层往上叠加,上层的修改会覆盖底层该位置的可见性。

这种构建的过程就类似于装地暖。我们人仅仅是能感受到表层木板,但不知道模板下还填了钢筋水泥层、加保温层,采暖管等。

为什么需要镜像?

Docker镜像本质就是一个"可读文件",所以Docker镜像天然就具有 "打包"的功能。

往往我们的生产环境与研发环境是不一样的,为了正确地迁移、部署,我们需要做很多麻烦的工作。Docker镜像就像一个压缩包一样,它自身内部就具有一个完整的操作系统所有文件和对应的目录结构,与本地环境没有任何的关联性,从而屏蔽掉了环境的差异性。

docker 镜像提供了一种打包应用程序和预配置服务器环境的便捷方式可以很方便地将其用于个人用途或与其他 Docker 用户公开共享。

Docker 镜像命令

docker 镜像命令清单:

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

Docker 命令详解:

🧩 docker images

语法:

bash 复制代码
# 列出本地镜像
docker images [OPTIONS] [REPOSITORY[:TAG]]

OPTIONS:
-a :列出本地所有的镜像
--digests :显示镜像的摘要信息
-f :显示满足条件的镜像
--format :指定返回值的模板文件
--no-trunc :显示完整的镜像信息
-q :只显示镜像 ID

🧩 docker tag

语法:

bash 复制代码
# 标记本地镜像,将其归入某一仓库
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

🧩 docker rmi

语法:

bash 复制代码
# 删除镜像
docker rmi [OPTIONS] IMAGE [IMAGE...]

OPTIONS:
○ -f :强制删除
○ --no-prune :不移除该镜像的过程镜像,默认移除

如果是删除标签,仅仅是将这个标签借关联。直到删除镜像,才会真正将这个镜像删除。

🧩 docker save

语法:

bash 复制代码
# 将指定镜像保存成 tar 归档文件
docker save [OPTIONS] IMAGE [IMAGE...]

OPTIONS:
-o :输出到的文件

我们想要将这两个镜像打包归档:

通过命令生成.tar文件

🧩 docker load

语法:

bash 复制代码
# 导入使用 docker save 命令导出的镜像
docker load [OPTIONS]

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

我们将之前的本地镜像删除。

我们再通过指定导入.tar包,加载镜像文件。

🧩 docker image inspect

bash 复制代码
# 查看镜像详细信息
docker image inspect [OPTIONS] IMAGE [IMAGE...]

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

🧩 docker history

语法:

bash 复制代码
# 显示镜像历史
docker history [OPTIONS] IMAGE

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

这些镜像历史通常就是显示出这个镜像文件历史 layer层。

🧩 docker image prune

语法:

bash 复制代码
# 删除不使用的镜像
docker image prune [OPTIONS]

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

这些镜像没有被使用过,所以就会被删除。这个命令需小心谨慎地使用,以防误删。

至于docker build与镜像制作有关 、docker import本质就是生成当前容器的快照版本,则不是本篇要细说的。


镜像操作案例

我们已经习得docker镜像命令的使用。所以本小节就是以使用busybox镜像对这些命令操作进行使用、回顾。

什么是busybox?

BusyBox是一个集成了三百多个最常用Linux命令和工具的软件。

拉取镜像

bash 复制代码
docker pull busybox:1.36.0

成功拉取下来。

查看镜像详情

bash 复制代码
docker image inspect busybox:1.36.0

查看镜像分层

bash 复制代码
docker history busybox:1.36.0

打标签

bash 复制代码
docker tag busybox:1.36.0 registry.cn-chengdu.aliyuncs.com/wgzzs/test_registry:v1.0

推送镜像

bash 复制代码
docker login registry.cn-chengdu.aliyuncs.com

首先需要登录认证。

bash 复制代码
docker push registry.cn-chengdu.aliyuncs.com/wgzzs/test_registry:v1.1

完成推送

运行容器

bash 复制代码
docker run -it --rm busybox:1.36.0

我们可以再容器中的命令行输入 busybox为我们打包的linux命令。

镜像删除

镜像的删除:可以根据 id 和名字删除,对于使用的镜像需要先清理容器再删除镜像

bash 复制代码
docker rmi busybox:1.36.0

本篇到此结束,感谢你的阅读。

祝你好运,向阳而生~

相关推荐
眠修15 分钟前
Kuberrnetes 服务发布
linux·运维·服务器
hunjinYang33 分钟前
Tomcat镜像实战:掌握Dockerfile的编写以及发布项目
docker·tomcat
好奇的菜鸟1 小时前
Docker 配置项详解与示例
运维·docker·容器
即将头秃的程序媛3 小时前
centos 7.9安装tomcat,并实现开机自启
linux·运维·centos
fangeqin3 小时前
ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
linux·python·ubuntu·openssl
爱奥尼欧5 小时前
【Linux 系统】基础IO——Linux中对文件的理解
linux·服务器·microsoft
超喜欢下雨天5 小时前
服务器安装 ros2时遇到底层库依赖冲突的问题
linux·运维·服务器·ros2
tan77º6 小时前
【Linux网络编程】网络基础
linux·服务器·网络
笑衬人心。6 小时前
Ubuntu 22.04 + MySQL 8 无密码登录问题与 root 密码重置指南
linux·mysql·ubuntu
IT成长日记7 小时前
【Docker基础】Docker数据卷管理:docker volume inspect及其参数详解
运维·docker·容器·volume·inspect