Docker命令-本地镜像管理
浅小兮Docker images 命令
docker images
命令用于列出本地的 Docker 镜像。
通过 docker images
命令,用户可以查看所有已下载或构建的 Docker 镜像的详细信息,如仓库名称、标签、镜像 ID、创建时间和大小。
语法
docker images [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS 说明:
-
-a, --all
: 显示所有镜像(包括中间层镜像)。 -
--digests
: 显示镜像的摘要信息。 -
-f, --filter
: 过滤输出,基于提供的条件。 -
--format
: 使用 Go 模板格式化输出。 -
--no-trunc
: 显示完整的镜像 ID。 -
-q, --quiet
: 只显示镜像 ID。
列出所有本地镜像:
docker images
列出带有摘要信息的镜像:
docker images --digests
列出所有镜像(包括中间层镜像):
docker images --all
使用过滤条件列出镜像:
docker images --filter "dangling=true"
只显示镜像 ID:
docker images --quiet
使用自定义格式输出:
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.Size}}"
实例
查看本地镜像列表:
1 | runoob@runoob:~$ docker images |
列出本地镜像中 REPOSITORY 为 ubuntu的 镜像列表:
1 | root@runoob:~# docker images ubuntu |
带有摘要信息的输出:
docker images --digests
输出:
1 | REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE |
使用过滤条件输出:
docker images --filter "dangling=true"
示例输出:
1 | REPOSITORY TAG IMAGE ID CREATED SIZE |
自定义格式输出:
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.Size}}"
输出:
1 | REPOSITORY TAG IMAGE ID SIZE |
常用场景
-
管理镜像: 列出本地镜像,了解当前可用的镜像。
-
过滤镜像: 使用过滤选项查找特定条件的镜像,如悬空镜像(未打标签的镜像)。
-
镜像 ID 管理: 只获取镜像 ID 以便于后续操作,如删除镜像。
docker images
命令是 Docker 镜像管理中非常基础且重要的命令。通过该命令,用户可以查看本地所有镜像的详细信息,进行镜像的管理和维护。使用各种选项和格式,可以灵活地过滤和格式化输出,以满足不同的管理需求。
Docker rmi 命令
docker rmi
命令用于删除一个或多个 Docker 镜像。
docker rmi
命令对于管理本地存储的镜像非常有用,帮助用户清理不再需要的镜像,释放存储空间。
语法
docker rmi [OPTIONS] IMAGE [IMAGE...]
参数说明:
-
IMAGE
: 要删除的镜像的名称或 ID。可以是镜像名、镜像 ID 或镜像摘要。 -
OPTIONS
: 可选参数,用来控制命令的行为。
常用选项:
-
-a
,--all-tags
: 指定仓库名称时,删除该仓库下的所有镜像。 -
-f
,--force
: 强制删除镜像,即使该镜像被容器使用。 -
--help
: 打印帮助信息并退出。 -
--no-prune
: 不删除悬空的父镜像。 -
-q
,--quiet
: 安静模式,不显示删除镜像的详细信息。
删除单个镜像
docker rmi ubuntu:latest
删除名为 ubuntu 的 latest 标签的镜像。
删除多个镜像
docker rmi ubuntu:latest nginx:latest
删除 ubuntu 和 nginx 的 latest 标签的镜像。
删除镜像的多个标签
docker rmi ubuntu:latest ubuntu:18.04
删除 ubuntu 镜像的 latest 和 18.04 标签。
删除所有标签的镜像
docker rmi -a ubuntu
删除 ubuntu 仓库下的所有镜像。
强制删除镜像
docker rmi -f ubuntu:latest
强制删除 ubuntu 的 latest 标签的镜像,即使它正在被使用。
删除悬空的镜像
docker rmi -d
删除所有没有标签的悬空镜像。
安静模式删除所有镜像
docker rmi -q $(docker images -q)
使用安静模式删除所有镜像,不显示删除的镜像信息。
删除指定仓库的所有镜像
docker rmi -a myrepo
删除 myrepo 仓库下的所有镜像。
删除镜像并保留其子镜像
docker rmi --no-prune ubuntu:latest
删除 ubuntu:latest 镜像,但保留其子镜像。
实例
查看现有镜像:
docker images
输出:
1 | REPOSITORY TAG IMAGE ID CREATED SIZE |
删除一个镜像:
docker rmi my_image
输出:
1 | Untagged: my_image:latest |
删除多个镜像:
docker rmi my_image1 my_image2
输出:
1 | Untagged: my_image1:latest |
常用场景
-
清理无用镜像: 删除不再需要的镜像,以释放存储空间。
-
镜像管理: 管理和维护本地镜像库,确保只保留需要的镜像。
-
强制删除: 在镜像被容器使用时,强制删除它们(谨慎使用)。
注意事项
-
强制删除镜像(使用
-f
选项)时,可能会导致依赖于该镜像的容器无法运行,因此应谨慎使用。 -
默认情况下,
docker rmi
会删除未使用的父镜像,如果不希望这样做,可以使用--no-prune
选项。
docker rmi
命令是 Docker 镜像管理中非常重要的工具。通过该命令,用户可以删除不再需要的镜像,释放存储空间,并保持本地镜像库的整洁。使用适当的选项,可以灵活地管理镜像的删除过程。
Docker tag 命令
docker tag
命令用于创建本地镜像的别名(tag),通过为镜像打标签,可以使用更容易记忆的名字或版本号来标识和管理镜像。
语法
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
-
SOURCE_IMAGE[:TAG]
: 源镜像名称和标签,标签默认为latest
。 -
TARGET_IMAGE[:TAG]
: 目标镜像名称和标签,标签默认为latest
。
1、为镜像打标签
docker tag myimage:1.0 myrepo/myimage:latest
这会将本地 myimage:1.0 镜像标记为 myrepo/myimage:latest。
2、为镜像打多个标签
1 | docker tag myimage:1.0 myrepo/myimage:stable |
这会将 myimage:1.0 分别标记为 myrepo/myimage:stable 和 myrepo/myimage:v1.0。
3、为镜像打标签以推送到 Docker Hub
1 | docker tag myimage:1.0 myusername/myimage:1.0 |
这会将 myimage:1.0 镜像标记为 myusername/myimage:1.0 并推送到 Docker Hub。
实例
为镜像打标签
1、列出本地镜像
docker images
1 | REPOSITORY TAG IMAGE ID CREATED SIZE |
2、为镜像打标签
docker tag myimage:1.0 myrepo/myimage:latest
3、验证标签
docker images
输出示例:
1 | REPOSITORY TAG IMAGE ID CREATED SIZE |
注意事项
-
标签只是镜像的别名,不会创建新的镜像层,因此不会占用额外的存储空间。
-
标签应该简洁且具有描述性,以便于识别和管理镜像版本。
-
在使用标签时,确保命名符合注册表的命名规范。
docker tag
命令是管理 Docker 镜像的重要工具,通过为镜像打标签,可以方便地标识、管理和发布不同版本的镜像。这个命令适用于各种场景,包括版本管理、镜像发布和镜像复制。在使用时,确保标签命名规范和描述性,以提高镜像管理的效率和可维护性。
Docker build 命令
docker build
命令用于从 Dockerfile 构建 Docker 镜像。
docker build
命令通过读取 Dockerfile 中定义的指令,逐步构建镜像,并将最终结果保存到本地镜像库中。
语法
docker build [OPTIONS] PATH | URL | -
-
PATH
: 包含 Dockerfile 的目录路径或.
(当前目录)。 -
URL
: 指向包含 Dockerfile 的远程存储库地址(如 Git 仓库)。 -
-
: 从标准输入读取 Dockerfile。
常用选项:
-
-t, --tag
: 为构建的镜像指定名称和标签。 -
-f, --file
: 指定 Dockerfile 的路径(默认是PATH
下的Dockerfile
)。 -
--build-arg
: 设置构建参数。 -
--no-cache
: 不使用缓存层构建镜像。 -
--rm
: 构建成功后删除中间容器(默认开启)。 -
--force-rm
: 无论构建成功与否,一律删除中间容器。 -
--pull
: 始终尝试从注册表拉取最新的基础镜像。
更多选项说明:
-
--build-arg=[]
: 设置构建镜像时的变量。 -
--cpu-shares
: 设置 CPU 使用权重。 -
--cpu-period
: 限制 CPU CFS 周期。 -
--cpu-quota
: 限制 CPU CFS 配额。 -
--cpuset-cpus
: 指定可使用的 CPU ID。 -
--cpuset-mems
: 指定可使用的内存节点 ID。 -
--disable-content-trust
: 忽略内容信任验证(默认启用)。 -
-f
: 指定 Dockerfile 的路径。 -
--force-rm
: 强制在构建过程中删除中间容器。 -
--isolation
: 使用指定的容器隔离技术。 -
--label=[]
: 设置镜像的元数据。 -
-m
: 设置内存的最大值。 -
--memory-swap
: 设置交换空间的最大值(内存 + 交换空间),-1
表示不限制交换空间。 -
--no-cache
: 构建镜像时不使用缓存。 -
--pull
: 尝试拉取基础镜像的最新版本。 -
--quiet, -q
: 安静模式,构建成功后只输出镜像 ID。 -
--rm
: 构建成功后删除中间容器(默认启用)。 -
--shm-size
: 设置/dev/shm
的大小,默认值为 64M。 -
--ulimit
: 设置 Ulimit 配置。 -
--squash
: 将 Dockerfile 中所有步骤压缩为一层。 -
--tag, -t
: 为镜像指定名称和标签,格式为name:tag
或name
;可以在一次构建中为一个镜像设置多个标签。 -
--network
: 在构建期间设置RUN
指令的网络模式,默认值为default
。
1、构建镜像
docker build -t myimage:latest .
这会从当前目录读取 Dockerfile 并构建一个名为 myimage:latest 的镜像。
2、指定 Dockerfile 路径
docker build -f /path/to/Dockerfile -t myimage:latest .
这会从 /path/to/ 目录读取 Dockerfile 并构建一个名为 myimage:latest 的镜像。
3、设置构建参数
docker build --build-arg HTTP_PROXY=[http://proxy.example.com](http://proxy.example.com) -t myimage:latest .
这会在构建过程中使用 HTTP_PROXY 环境变量。
4、不使用缓存层构建镜像
docker build --no-cache -t myimage:latest .
这会在构建镜像时忽略所有缓存层,确保每一步都重新执行。
实例 - 使用 Dockerfile 构建镜像
1、创建 Dockerfile,内容如下:
1 | # Dockerfile 示例 |
2、构建镜像
docker build -t mynginx:latest .
输出示例:
1 | Sending build context to Docker daemon 3.072kB |
3、验证镜像
docker images
输出示例:
注意事项
1 | REPOSITORY TAG IMAGE ID CREATED SIZE |
-
确保 Dockerfile 语法正确,并按照顺序执行每一步。
-
使用
.dockerignore
文件排除不需要的文件和目录,以减少构建上下文的大小。 -
在生产环境中,尽量使用精简的基础镜像以减小镜像体积和提高安全性。
-
避免在 Dockerfile 中暴露敏感信息(如密码、密钥)。
docker build
命令是构建 Docker 镜像的核心工具,通过定义清晰的 Dockerfile,可以自动化地构建应用程序的运行环境和依赖。在使用时,确保合理设置选项和优化 Dockerfile,以提高构建效率和镜像质量。
Docker history 命令
docker history
命令用于查看指定镜像的历史层信息,它显示了镜像创建过程中的每一层,包括创建时间、创建者、大小和注释等信息。
语法
docker history [OPTIONS] IMAGE
-
IMAGE
: 要查看历史记录的镜像名称或 ID。
OPTIONS 说明:
-
-H, --human
: 以人类可读的格式显示镜像大小(默认启用)。 -
--no-trunc
: 显示完整的输出,不截断信息。 -
-q, --quiet
: 仅显示镜像 ID。
实例
1、查看镜像历史
docker history myimage:latest
输出示例:
1 | IMAGE CREATED CREATED BY SIZE COMMENT |
2、显示完整输出
docker history --no-trunc myimage:latest
3、仅显示镜像 ID
docker history -q myimage:latest
输出示例:
1 | sha256:123abc456def |
操作实例
构建一个简单的镜像
1、创建一个 Dockerfile:
1 | # 使用 Ubuntu 作为基础镜像 |
2、构建镜像:
docker build -t mynginx:latest .
3、查看镜像历史
docker history mynginx:latest
输出示例:
1 | IMAGE CREATED CREATED BY SIZE COMMENT |
注意事项
-
镜像历史信息包括每一层的创建指令和大小,有助于了解镜像的构建过程和内容。
-
使用
--no-trunc
选项可以查看完整的创建指令,避免信息截断。 -
在构建复杂镜像时,通过查看历史记录,可以帮助识别和优化 Dockerfile 中的冗余步骤。
docker history
命令是一个强大的工具,可以帮助开发者和运维人员了解镜像的构建历史和每一层的详细信息。通过查看镜像历史,可以更好地调试、优化和审计 Docker 镜像,确保镜像的高效和安全。
Docker save 命令
docker save
命令用于将一个或多个 Docker 镜像保存到一个 tar 归档文件中,以便在其他环境中分发或备份。
语法
docker save [OPTIONS] IMAGE [IMAGE...]
-
IMAGE
: 要保存的一个或多个镜像名称或 ID。
OPTIONS 说明:
-
-o, --output
: 指定输出文件的路径。
1、保存单个镜像到文件
docker save -o myimage.tar myimage:latest
这将 myimage:latest 镜像保存为 myimage.tar 文件。
2、保存多个镜像到同一个文件
docker save -o multiple_images.tar myimage:latest anotherimage:latest
这将 myimage:latest 和 anotherimage:latest 镜像保存到 multiple_images.tar 文件中。
实例
构建一个示例镜像
1、创建一个 Dockerfile:
1 | # 使用 Ubuntu 作为基础镜像 |
构建镜像:
docker build -t mynginx:latest .
2、保存镜像到文件
docker save -o mynginx.tar mynginx:latest
这将 mynginx:latest 镜像保存为 mynginx.tar 文件。
3、验证保存的文件
ls -lh mynginx.tar
输出示例:
-rw-r--r-- 1 user user 200M Jul 24 14:00 mynginx.tar
4、加载保存的镜像
要将保存的镜像加载到另一个 Docker 环境中,可以使用 docker load 命令:
docker load -i mynginx.tar
注意事项
-
保存镜像时,会包含镜像的所有层,因此生成的 tar 文件可能会很大。
-
如果保存多个镜像到同一个文件中,使用
docker load
命令时会加载所有包含的镜像。 -
为了减少文件大小,可以在保存前使用
docker image prune
命令清理未使用的镜像和层。
docker save
命令是一个方便的工具,用于将 Docker 镜像保存为 tar 文件,以便于备份、分发和迁移。通过结合 docker load
命令,可以轻松地在不同环境中恢复和使用保存的镜像。
Docker load 命令
docker load
命令用于从由 docker save
命令生成的 tar 文件中加载 Docker 镜像。它可以将存档中的镜像和所有层加载到 Docker 中,使其可以在新环境中使用。
语法
docker load [OPTIONS]
OPTIONS 说明:
-
-i, --input
: 指定输入文件的路径。 -
-q, --quiet
: 安静模式,减少输出信息。
1、从文件加载镜像
docker load -i myimage.tar
这将从 myimage.tar 文件中加载镜像。
2、从标准输入加载镜像
cat myimage.tar | docker load
这将通过管道从标准输入加载镜像。
实例
1、构建和保存镜像
首先,构建一个示例镜像并保存,创建 Dockerfile:
1 | # 使用 Ubuntu 作为基础镜像 |
构建镜像:
docker build -t mynginx:latest .
保存镜像到文件:
docker save -o mynginx.tar mynginx:latest
2、加载镜像
从文件加载镜像:
docker load -i mynginx.tar
3、验证加载的镜像
docker images
输出示例:
1 | REPOSITORY TAG IMAGE ID CREATED SIZE |
注意事项
-
加载的镜像包括其所有层和元数据,与保存时的状态完全一致。
-
使用
docker load
时,所有包含在 tar 文件中的镜像都会被加载。 -
加载过程中可能需要较长时间,具体取决于镜像的大小和系统性能。
docker load
命令是从保存的 tar 文件中恢复 Docker 镜像的便捷方法。通过结合 docker save
和 docker load
,用户可以轻松地在不同环境中备份、分发和迁移 Docker 镜像。
Docker import 命令
docker import
命令用于从一个 tar 文件或 URL 导入容器快照,从而创建一个新的 Docker 镜像。
与 docker load
不同,docker import
可以从容器快照中创建新的镜像,而不需要保留镜像的历史和元数据。
语法
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
-
file|URL|-
: 输入文件的路径、本地文件或 URL,或者使用-
从标准输入读取。 -
[REPOSITORY[:TAG]]
: (可选)为导入的镜像指定仓库和标签。
OPTIONS 说明:
-
-c, --change
: 在导入过程中应用 Dockerfile 指令,如CMD
、ENTRYPOINT
、ENV
等。 -
-m, --message
: 为导入的镜像添加注释。
1、从本地 tar 文件导入镜像
docker import mycontainer.tar mynewimage:latest
这将从 mycontainer.tar 文件导入镜像,并命名为 mynewimage:latest。
2、从 URL 导入镜像
docker import [http://example.com/mycontainer.tar](http://example.com/mycontainer.tar) mynewimage:latest
这将从指定的 URL 导入镜像,并命名为 mynewimage:latest。
3、从标准输入导入镜像
cat mycontainer.tar | docker import - mynewimage:latest
这将通过管道从标准输入读取 tar 文件并导入镜像。
4、在导入过程中应用变更
docker import -c "ENV LANG=en_US.UTF-8" -c "CMD /bin/bash" mycontainer.tar mynewimage:latest
这将从 mycontainer.tar 导入镜像,并在过程中设置环境变量 LANG 和命令 CMD。
实例
1、导出容器快照
首先,创建并运行一个容器:
docker run -d --name mycontainer ubuntu:20.04 sleep 3600
导出容器快照:
docker export mycontainer -o mycontainer.tar
2、导入容器快照
从 tar 文件导入镜像:
docker import mycontainer.tar mynewimage:latest
3、验证导入的镜像
docker images
输出示例:
1 | REPOSITORY TAG IMAGE ID CREATED SIZE |
4、运行导入的镜像
docker run -it mynewimage:latest /bin/bash
注意事项
-
docker import
创建的镜像不会保留原始镜像的历史和元数据。 -
使用
-c
选项可以在导入过程中应用 Dockerfile 指令,从而自定义新镜像的配置。 -
导入的 tar 文件必须是使用
docker export
创建的容器快照,或者是兼容的其他格式。
docker import
命令是一种从容器快照创建新镜像的灵活方法,适用于迁移、恢复和自定义 Docker 镜像的场景。通过使用 docker import
,用户可以轻松地从容器快照生成新的镜像,并在导入过程中应用额外的配置。