#云原生征文#Docker容器实战:镜像管理命令 原创

西岸Alex
发布于 2022-6-9 14:32
浏览
0收藏

本文将介绍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的镜像导出和存入命令。

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

 

 

【本文正在参加云原生有奖征文活动】,活动链接:https://ost.51cto.com/posts/12598”

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
已于2022-6-9 14:33:28修改
2
收藏
回复
举报
回复
    相关推荐