【Docker 04】image - 镜像
🌈 一、镜像介绍
⭐ 1. 什么是镜像
- image 本质上就是一个 read only 文件,是一个特殊的文件系统。
- image 除了会为容器提供运行时所需要的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数(如:匿名卷、环境变量、用户等)。
- image 不包含任何动态数据,它的内容是静态的,在构建之后不会被改变。
- 可以将 image 理解成一个模板,镜像(image)和容器(Container)的关系就像是面向对象程序设计中的类和实例一样,可以通过 image 这个模板实例化出很多 Container。
⭐ 2. 为什么需要镜像
- 可重复的环境:镜像是一个包含应用程序及其依赖、库、运行时环境和系统配置的只读文件系统。通过使用相同的镜像,Docker 能确保无论在什么地方运行,容器内部的环境都一致。
- 容器的创建:容器是基于镜像创建的。镜像包含应用程序运行所需的所有文件和设置。当启动一个容器时,Docker 实际上会从镜像中提取内容并在一个隔离的环境中运行它。
- 版本控制和可移植性:镜像可以有不同的版本,通过 Docker 的镜像版本管理,可以方便地选择不同版本的应用环境进行部署。
- 轻量级和高效:Docker 镜像使用层(Layer)的概念,多个容器可以共享同一个镜像中的相同层,这样可以节省存储空间。每次修改时,只会创建新的层,而不是复制整个镜像,增强了效率。
🌈 二、镜像命令
命令 | 别名 | 功能 |
---|---|---|
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 | doocker 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 prune | 删除不使用的镜像 |
⭐ 1. docker images
- 该命令用于列出本地镜像。
1. 基础语法
docker images [options] [repository[:tag]]
options 的可选项 | 功能 |
---|---|
-a | 列出本地的所有镜像 |
--digests | 显示镜像的摘要信息 |
-f | 显示满足条件的镜像 |
--format | 指定返回值的模板文件 |
--no-trunc | 显示完整的镜像信息 |
-q | 只显示镜像的 ID |
2. 使用示例
docker images
:列出本地所有的镜像
docker images nginx
:列出本地镜像中 repository(镜像名)为 nginx 的所有镜像。
⭐ 2. docker tag
- 类似于重命名,但是这个重命名使用
/
标记本地镜像,将其归入某一仓库。
1. 基础语法
# 将原来的镜像名和 tag 改成目标镜像名和 tag
docker tag source_image[:tag] target_image[:tag]
2. 使用示例
docker tag ubuntu:22.04 myregistry.com/myubuntu:22.04
⭐ 3. docker rmi
- 该命令用于删除一个或多个镜像。
1. 基础语法
docker image rmi [options] image [image...]
options 的可选项 | 功能 |
---|---|
-f | 强制删除 |
--no-prune | 不移除该镜像的过程镜像(默认是移除的) |
2. 使用示例
docker rmi -f hello-world:latest
:强制删除最新版的 hello-world 镜像。
⭐ 4. docker save
- 该命令用于将指定的镜像打包成一个 tar 归档文件。
1. 基础语法
docker save [options] image [image...]
options 的可选项 | 功能 |
---|---|
-o | 为生成的 tar 文件进行命名 |
2. 使用示例
docker save -o test_DockerSave.tar nginx:latest
:将 nginx:latest 镜像打包成 test_DockerSave.tar 文件。
⭐ 5. docker load
- 该命令用于将使用 docker save 命令导出的 tar 包导回成镜像。
1. 基础语法
docker load [options]
optinos 的可选项 | 功能 |
---|---|
--input 或 -i | 指明要导入的是哪个 tar 文件 |
--quiet 或 -q | 精简输出信息(不显示进度条) |
2. 使用示例
docker load -i test_DockerSave.tar
:导入 test_DockerSav e.tar 文件。
⭐ 6. docker image inspect
- 该命令用于查看镜像的详细信息(会自动检查是镜像还是容器,然后显示详细信息)。
1. 基础语法
docker image inspect [options] image [image...]
options 的可选项 | 功能 |
---|---|
-f | 将信息格式化输出 |
2. 使用示例
docker image inspect nginx:latest
:查看 nginx:latest 镜像的详细信息。
[{"Id": "sha256:1e5f3c5b981a9f91ca91cf13ce87c2eedfc7a083f4f279552084dd08fc477512","RepoTags": ["nginx:latest"],"RepoDigests": ["nginx@sha256:6784fb0834aa7dbbe12e3d7471e69c290df3e6ba810dc38b34ae33d3c1c05f7d"],"Parent": "","Comment": "buildkit.dockerfile.v0","Created": "2025-04-16T14:50:31Z","DockerVersion": "","Author": "","Config": {"ExposedPorts": {"80/tcp": {}},"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","NGINX_VERSION=1.27.5","NJS_VERSION=0.8.10","NJS_RELEASE=1~bookworm","PKG_RELEASE=1~bookworm","DYNPKG_RELEASE=1~bookworm"],"Entrypoint": ["/docker-entrypoint.sh"],"Cmd": ["nginx","-g","daemon off;"],"Labels": {"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"},"StopSignal": "SIGQUIT"},"Architecture": "amd64","Os": "linux","Size": 192461947,"GraphDriver": {"Data": {"LowerDir": "/var/lib/docker/overlay2/fbf8da921e64c26e9af8ac96a061a67f2008436aae7f16f2cbaa413f0ac6eaf5/diff:/var/lib/docker/overlay2/0ded67b49bbca50b4119eedbbc913a08a98c7058fcc3b77ef0e8c41b8c5dad2c/diff:/var/lib/docker/overlay2/43eec9c778eed702306259a12ce557a707386054746cdc1ab4030641360413d2/diff:/var/lib/docker/overlay2/adf3fc5633f9681af6ce3ad7d513081733d9a443b325515c923a2a48d7b84e8f/diff:/var/lib/docker/overlay2/2dcd6335df9df411937ccfd0d166c63870e46710e4c076bb80ec1f6de29f63f0/diff:/var/lib/docker/overlay2/26d4e419c252e80ce69b3da1aa23b9b9d9901461fbce89c8dbab9522e5454e5d/diff","MergedDir": "/var/lib/docker/overlay2/399fedbaa394074e189ee1bc35f81fe8c2c53b08364e783c219dcef1d40a67f7/merged","UpperDir": "/var/lib/docker/overlay2/399fedbaa394074e189ee1bc35f81fe8c2c53b08364e783c219dcef1d40a67f7/diff","WorkDir": "/var/lib/docker/overlay2/399fedbaa394074e189ee1bc35f81fe8c2c53b08364e783c219dcef1d40a67f7/work"},"Name": "overlay2"},"RootFS": {"Type": "layers","Layers": ["sha256:7fb72a7d1a8e984ccd01277432de660162a547a00de77151518dc9033cfb8cb4","sha256:626ab8a5d57bb70a67c14c62eed096ee3a141f78f41aa575ccb2b4566eecc5b7","sha256:892e805f6f4ff1367b1e6ff4fb3ec2fa8652c29fb76b45baa9b4f3c3a13051a3","sha256:3e96162769d59202a3b8b4b94bf06d59fde57f3e31e72e5e0a9981f9ec7ce608","sha256:4197a611afec9c60ddf5a6fe3d39b7d58f23740d4b2a93cb289a2b7f2660a0b6","sha256:463308bed0c94dc79f329afbc2da7c56669519966098922bb7345c0aa2440a1d","sha256:7e893c1b6ee86e47361d92509b5c05861b72070699f7ccea0b2d65b8fe8ed8d6"]},"Metadata": {"LastTagTime": "0001-01-01T00:00:00Z"}}
]
⭐ 7. docker history
- 该命令用于显示镜像历史(查看镜像的每一层是怎么构建的)。
1. 基础语法
docker history [options] image
options 的可选项 | 功能 |
---|---|
-H 或 --human | 大小和日期以人类便于阅读的格式展现 |
--no-trunc | 显示全部的信息,不要隔断(会让信息变的很长) |
-q 或 --quiet | 只显示镜像 ID 信息 |
2. 使用示例
docker history -H nginx:latest
⭐ 8. docker prune
- 该命令用于删除不使用的镜像。对于什么样的镜像算是不使用的镜像,有以下两种:
- 容器不使用的镜像:没有根据该镜像实例化出容器的镜像被认为是不被使用的镜像(该种方法比较危险)。
- 空悬镜像:镜像中某层不被任何镜像所使用(相当于在空中悬着),但依然占用了一点空间。
1. 基础语法
docker image prune [options]
options 的可选项 | 功能 |
---|---|
-a 或 --all | 删除全部不使用的镜像(容器不使用的镜像) |
--filter filter | 指定过滤条件 |
-f 或 --force | 不提示是否删除,直接强制删除 |
2. 使用示例
# 删除所有的空悬镜像
docker image prune