Docker容器实战八:镜像管理命令

Posted 运维老兵Alex

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker容器实战八:镜像管理命令相关的知识,希望对你有一定的参考价值。

本文将介绍Docekr镜像相关的管理命令。


一. 搜索镜像

Docker默认会从Docker Hub的网站下载镜像,在下载之前我们可以使用docker search命令搜索该站点上的镜像仓库,该命令将列出相关的仓库信息。

命令的格式为docker search + [选项] +<image_name>,如:

$ 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代表为自动构建;

docker search 支持以下命令选项:

-f, --filter filter :根据条件过滤输出内容;

--format string :格式化输出内容;

--limit int :限制显示结果数量,默认为25个;

--no-trunc:显示完整信息;

例如:只搜索官方的Nginx镜像,可以使用如下命令选项

$ docker search --filter=is-official=true nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 16272 [OK]

二. 下载镜像

在创建容器前,我们需要先下载相关的镜像。使用docker [image] pull 命令可直接从Docker Hub网站上下载镜像到本地,格式为:docker  [image] pull <image_name>:<tag>。

此处以Nginx镜像作为示例,如下:

$ 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 命令,查看本地已有镜像信息。

如:

$ 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为镜像大小;

docker images命令主要的几个选项:

-a, --all : 显示包括临时镜像在内的所有镜像,默认为不显示;

-f, --filter filter: 根据条件过滤镜像;

 --no-trunc :是否对输出结果较长部分进行截断,true为是,false为否;

假如需要查看单个镜像的详细信息,可使用docker [image] inspect 命令,可看到镜像的启动命令、变量等更多配置信息。命令格式为:docker  [image] inspect  <image_name>:<tag>。

如下:

$ docker inspect nginx:1.20
[

"Id": "sha256:c316d5a335a5cf324b0dc83b3da82d7608724769f6454f6d9a621f3ec2534a5a",
"RepoTags": [
"nginx:1.21"
],
"RepoDigests": [
"nginx@sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767"
],
"Parent": "",
"Comment": "",
"Created": "2022-01-26T08:58:35.041664322Z",
"Container": "f7debc76f8a9f5c1eb8bad0366aaa442b92d4dd0569989d99b0900b2192879ea",
......


四. 删除镜像

在使用较长时间后,系统中往往会因为各种原因而下载了各式各样的镜像文件。对此,可以定期进行镜像清理,避免占用过多存储空间。

删除镜像可以使用docker rmi 或docker image rm命令,命令格式为docker rmi <image_name>:<tag> 或 docker rmi <image_id>。

如:

$ docker rmi nginx:1.21
Untagged: nginx:1.21
Untagged: nginx@sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767
Deleted: sha256:c316d5a335a5cf324b0dc83b3da82d7608724769f6454f6d9a621f3ec2534a5a
Deleted: sha256:67e568696593c33b4a15c9d81dc6f67499b8d973b88eb49b53d47bf4dbf4d187
Deleted: sha256:0f8d4e3d979c540644f248b4206cf540978166b095223bdc950628dca2e8f3f1
Deleted: sha256:5d75bfe8a7422476a495b27c8a1598d1206137631d350b8bdee13bc88f365282
Deleted: sha256:8284a9e28c625b2826efdd6160ea1ff7f710881a4a2afe1ef58a5eb51d3f919e
Deleted: sha256:89a1db9e1079b7574c1a707bc8c1fe04ff723bc71d4bca8bc48653e9a32186d2
Deleted: sha256:7d0ebbe3f5d26c1b5ec4d5dbb6fe3205d7061f9735080b0162d550530328abd6


需要注意的是,如果有容器正在使用该镜像的话,那么镜像将无法删除,并且系统将会出现报错提示。

如:

$ 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 image prune -aWARNING! This will remove all images without at least one container associated to them.Are you sure you want to continue? [y/N] yDeleted Images:untagged: nginx:1.20untagged: nginx@sha256:02923d65cde08a49380ab3f3dd2f8f90aa51fa2bd358bd85f89345848f6e6623deleted: sha256:d6c9558ba4456741fc4ee304e1a75a561e1c8d92f5107a715b6224bb7844f507......
Total reclaimed space: 61.08MB


五. 导出与存入镜像

在某些情况下,我们可能需要将机器中的镜像导出,作为备份保存起来,或者将其存入到另一台机器中使用。此时,我们可以使用Docker的镜像导出和存入命令。

1. 导出镜像

导出镜像的命令为docker [image] save,命令使用参数 -o指定导出镜像到文件中。

如:

$ docker save -o /tmp/nginx_1.21.tar nginx:1.21


2. 存入镜像

在镜像导出后,可以通过网络或拷贝等方式文件同步到其他机器上。此时,使用docker [image] load命令即可将文件导入到该机器的镜像库中。

如:

$ docker load -i /tmp/nginx_1.21.tar



专注于Devops、SRE、运维开发等技术分享,扫码关注公众号,获取更多精彩内容!

Docker容器实战八:镜像管理命令_云计算

以上是关于Docker容器实战八:镜像管理命令的主要内容,如果未能解决你的问题,请参考以下文章

Docker教程系列八:Docker备份与迁移(完)

Linux之shell脚本实战批量上传docker镜像到华为云容器镜像仓库

docker学习总结八

docker之docker-compose——容器管理

Docker容器dockerfile镜像实战案例

Docker基础