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

别裁伪体亲风雅,转益多师是汝师。这篇文章主要讲述Docker容器实战八:镜像管理命令相关的知识,希望能为你提供帮助。
本文将介绍Docekr镜像相关的管理命令。


一.  搜索镜像Docker默认会从Docker Hub的网站下载镜像,在下载之前我们可以使用docker search命令搜索该站点上的镜像仓库,该命令将列出相关的仓库信息。
命令的格式为docker search + [选项] +< image_name> ,如:

$ docker search nginx
NAMEDESCRIPTIONSTARSOFFICIALAUTOMATED
nginxOfficial build of Nginx.16272[OK]
jwilder/nginx-proxyAutomated Nginx reverse proxy for docker con…2115[OK]
richarvey/nginx-php-fpmContainer running Nginx + PHP-FPM capable of…822[OK]
jc21/nginx-proxy-managerDocker 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
NAMEDESCRIPTIONSTARSOFFICIALAUTOMATED
nginxOfficial 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
REPOSITORYTAGIMAGE IDCREATEDSIZE
nginx1.20d6c9558ba4452 weeks ago141MB
nginx1.21c316d5a335a52 weeks ago142MB


注释: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容器实战八(镜像管理命令)

文章图片


    推荐阅读