Docker镜像常用管理命令
关注公众号:“DevOps实战派”,获取更多DevOps和运维的精彩内容。
在容器的世界中,镜像是一切的基础。为了有效地管理和利用这些镜像,Docker提供了一系列强大的镜像管理命令。
本文将深入探讨这些命令,帮助你更好地使用容器镜像。
一. 搜索镜像
Docker默认会从Docker Hub的网站下载镜像,在下载之前我们可以使用docker search 命令搜索该站点上的镜像仓库,该命令会列出相关的仓库信息。
例如,要搜索所有与Nginx相关的镜像,可以运行以下命令:
$ docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 16272 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 2115 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 822 [OK]
jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 324
......
注:NAME字段为镜像仓库名称,搜索结果会列出网站上包括Docker官方以及第三方的镜像仓库,其中第一个带nginx关键字的为官方仓库,其他第三方镜像仓库会在前面带上名称空间信息;DESCRIPTION为仓库的描述;STARS可以理解为镜像的受欢迎程度,一般优先选择START多的镜像;OFFICIAL表示该镜像是否为官方镜像;AUTOMATED代表为自动构建;
命令支持以下选项:
-
-f, --filter filter :根据条件过滤输出内容;
-
--format string :格式化输出内容;
-
--limit int :限制显示结果数量,默认为25个;
-
--no-trunc:显示完整信息;
例如:只搜索官方的Nginx镜像,可以使用--filter 进行过滤。
$ docker search --filter=is-official=true nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 16272 [OK]
二. 下载镜像
docker pull 命令用于从Docker 镜像仓库中拉取镜像到本地计算机。
命令的格式为:
docker pull <image_name:tag>
示例:
$ docker pull nginx:1.20
1.20: Pulling from library/nginx
5eb5b503b376: Pull complete
cdfeb356c029: Pull complete
d86da7454448: Pull complete
7976249980ef: Pull complete
8f66aa6726b2: Pull complete
c004cabebe76: Pull complete
Digest: sha256:02923d65cde08a49380ab3f3dd2f8f90aa51fa2bd358bd85f89345848f6e6623
Status: Downloaded newer image for nginx:1.20
docker.io/library/nginx:1.20
注:如果在命令中不指定tag,则默认会下载标签为latest 的最新稳定版本镜像。
docker pull 命令支持的选项主要包括:
-
-a, --all-tags :拉取所有 tagged 镜像
-
--disable-content-trust :跳过镜像校验阶段,默认为开启
-
-q, --quiet:静默输出
三. 查看镜像信息
在下载镜像后,我们可以通过 docker images 或 docker image ls 命令查看本地已有镜像信息。这个命令可以帮助你查看已有镜像的大小、标签、ID等信息。
如:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.20 d6c9558ba445 2 weeks ago 141MB
nginx 1.21 c316d5a335a5 2 weeks ago 142MB
注:REPOSITORY显示镜像来源于哪个仓库;TAG为镜像的标签信息,通常会使用TAG来区分镜像版本;IMAGE ID 为镜像的唯一标识ID;CREATED表示镜像创建时间;SIZE为镜像大小;
命令主要有以下几个选项:
-
-a, --all : 显示包括临时镜像在内的所有镜像,默认为不显示;
-
-f, --filter filter: 根据条件过滤镜像;
-
--no-trunc :是否对输出结果较长部分进行截断,true为是,false为否;
假如需要查看单个镜像的详细信息,使用docker image inspect 命令,可看到镜像的启动命令、变量等更多配置信息。
示例:
$ docker image inspect nginx:1.20
[
{
"Id": "sha256:c316d5a335a5cf324b0dc83b3da82d7608724769f6454f6d9a621f3ec2534a5a",
"RepoTags": [
"nginx:1.21"
],
......
四. 删除镜像
在使用较长时间后,系统中往往会因为各种原因而下载了各式各样的镜像文件。对此,可以定期进行镜像清理,避免占用过多存储空间。删除镜像可以使用docker rmi 或docker image rm 命令。
如:
$ docker rmi nginx:1.21
需要注意的是,如果有容器正在使用该镜像的话,那么镜像将无法删除,并且系统将会出现报错提示。
如下:
$ docker rmi nginx:1.21
Error response from daemon: conflict: unable to remove repository reference "nginx:1.21" (must force) - container dbd5d4bdbd6d is using its referenced image c316d5a335a5
在这种情况下 ,虽然可以使用加 -f 参数的方式强制删除,但不建议这样操作。正确的做法是找到该容器,在确认不再使用后停止并删除,然后再进行镜像的清理。
docker image prune 命令也可用于清理镜像,使用该命令的好处在于不需要用户指定镜像,命令会自动清理所有未被使用的镜像。
命令支持以下参数:
-
-a, --all 删除所有未使用镜像(默认只删除临时镜像)
-
--filter filter 根据条件筛选镜像
-
-f, --force 强制删除镜像
如下:
$ docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: nginx:1.20
untagged: nginx@sha256:02923d65cde08a49380ab3f3dd2f8f90aa51fa2bd358bd85f89345848f6e6623
deleted: sha256:d6c9558ba4456741fc4ee304e1a75a561e1c8d92f5107a715b6224bb7844f507
......
Total reclaimed space: 61.08MB
当清理完成后,显示结果会在最后提示释放的空间。
五. 归档与导入镜像
在某些情况下,我们可能需要将机器中的镜像导出,作为备份保存起来,或者将其导入到另一台机器中使用。此时,我们可以使用Docker 的镜像归档和导入命令。
docker save 命令用于将镜像保存为一个tar归档文件,格式如下:
docker save -o <file_name.tar> <image_name:tag>
示例:
$ docker save -o /tmp/nginx_1.21.tar nginx:1.21
在镜像导出后,可以通过网络或拷贝等方式文件同步到其他机器上。此时,使用docker load 命令即可将文件导入到该机器的镜像库中。
示例:
$ docker load -i /tmp/nginx_1.21.tar
六. 结语
通过使用Docker镜像管理命令,你可以轻松地查找、下载、查看、删除和分享镜像,从而更好地管理Docker环境。
希望本文能够帮助你更好地理解和利用Docker镜像管理命令,使你的容器化应用程序开发和部署更加高效和可靠。
公众号好文推荐: