Docker入门之使用镜像(二)

前言

Docker 中大部分的操作都是围绕三个核心概念:镜像容器仓库。如果这三个概念达到融会贯通后,我们也就入门了Docker这门技术,首先让我们学习一下Docker的镜像。

什么是Docker镜像

Docker镜像相当于一个虚拟机快照,如果你玩过使命召唤系列游戏,每次通关后都可以保存游戏进度(存档快照),Docker镜像我们也可以理解是保存了各种软件的存档快照,Docker官方维护了数以万计的Docker镜像仓库,仓库地址:https://hub.docker.com/。我们可以通过镜像仓库下载各种相应软件的镜像,无需再像以前一样下载软件然后手动进行各种配置,通过下载镜像我们可以启动应用,简化了开发工作,极大的提高了工作效率。

如何获取镜像

Docker Hub网站上提供了很多常用软件的应用镜像,例如:mysqlredisnginxkafka …,基本上你开发过程中需要使用的软件都有与之对应的镜像。通过docker 提供的pull命令,可以在镜像仓库下载镜像,命令格式为:

docker pull 应用镜像名:版本号

例如获取nginx,我们可以在Docker Hub网站上进行搜索:
在这里插入图片描述
也可以通过docker search命令进行搜索如下所示:
在这里插入图片描述
默认搜索出来的镜像源还是比较多可以通过 -f 进行过滤,例如过滤STARS在1000以上的镜像源。

[root@VM-0-10-centos ~]# docker search nginx -f=STARS=1000
NAME                  DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                 Official build of Nginx.                        15928     [OK]       
jwilder/nginx-proxy   Automated Nginx reverse proxy for docker con…   2101                 [OK]

上面 -f 指定过滤的属性是STARS = 1000 表示查询STARS数量大于等于1000),下面使用docker pull命令以下载这个镜像:
在这里插入图片描述
需要指出的是如果下载镜像没有指定相应的版本,则docker默认会下载标签为latest的最新镜像版本。

查看镜像信息

  • docker images

使用docker images 命令可以列出所有的下载镜像信息,其命令使用语法如下:

[root@VM-0-10-centos ~]# docker images --help

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Options:
  -a, --all             Show all images (default hides intermediate images)
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show image IDs

例如查询当前所有的应用镜像:

[root@VM-0-10-centos ~]# docker images -a
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    f652ca386ed1   12 days ago   141MB
属性 说明
REPOSITORY 标识镜像来自那个仓库
TAG 镜像标签,通常指镜像的版本号
IMAGE ID 标识镜像的唯一性,如果有相同的镜像ID说明两个镜像指向的是同一个镜像只是标签会不同
CREATED 标识镜像构建时间
SIZE 标识镜像的尺寸大小
  • tag

可以使用此命令为应用镜像新增标签,例如新增标签my-nginx的镜像:

## 使用语法为 docker tag IMAGE ID 标签名
[root@VM-0-10-centos ~]# docker tag f652ca386ed1 my-nginx
## 查看所有的镜像信息
[root@VM-0-10-centos ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
my-nginx     latest    f652ca386ed1   12 days ago   141MB
nginx        latest    f652ca386ed1   12 days ago   141MB

可以看到新增镜像标签成功,需要注意的是这两个标签对应的镜像ID都是相同的。

  • inspect

使用此命令可以查看构建镜像的详细信息,使用语法为 docker inspect 镜像ID
在这里插入图片描述
返回的数据较多,如果只想查看某一个属性可以使用**-f进行过滤,例如获取RootFS**

[root@VM-0-10-centos ~]# docker inspect -f {
    
    {".RootFS"}} f652ca386ed1
{
    
    layers [sha256:9321ff862abbe8e1532076e5fdc932371eff562334ac86984a836d77dfb717f5 sha256:0664b7821b6050b321b14cdede97c2079ae45aff22beb4a42f7595294f5be62d sha256:c9fcd9c6ced8b793a0ad4f93820c1d51d94c3b1fca93000d93e9e8eefa6fdb38 sha256:d3e1dca44e8225cdd06b6bf7cdfc847e3ab9f09ab6aeefb006e2e8f02f0dd26c sha256:82caad489ad7bc7e1ae6f17bb1e9ade2bca44a41a07cc8c5587af8a2de2f536a sha256:2bed47a66c07ecddfea2bc9c128d81b31272d99b69aff1fb4edc079c4dbf56e7] }

需要注意的是通过两对大括号并且需要在过滤的属性名称加一个.

  • history

上面我们下载nginx镜像时候出现了如下的界面:
在这里插入图片描述
下载的过程中出现好几个Pull complete 的字样好像是分层进行下载的。需要指出的是docker下载镜像就是分层进行下载的,这样做的好处就是:当不同镜像包含相同的镜像层,那么只需要进行第一次下载,后面的相同的镜像层直接拿来复用即可,我们可以通过history命令查看各个镜像层信息。
在这里插入图片描述

删除单个镜像

可以使用docker rmi 命令删除镜像,其使用语法如下:

## 查看Docker镜像删除命令
[root@VM-32-10-centos ~]# docker rmi --help
Usage:  docker rmi [OPTIONS] IMAGE [IMAGE...]
Remove one or more images
Options:
  -f, --force      Force removal of the image
      --no-prune   Do not delete untagged parents

例如删除标签为my-nginx的镜像如下所示:

[root@VM-0-10-centos ~]# docker rmi  my-nginx:latest
Untagged: my-nginx:latest
[root@VM-0-10-centos ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    f652ca386ed1   12 days ago   141MB

需要指出的是这种docker rmi REPOSITORY:TAG命令只是删除了该镜像指定标签而巳, 并不影响镜像ID相同其他标签文件。 因此上述操作相当于只是删除了镜像 f652ca386ed1 的一个标签副本。但是如果使用的是docker rmi IMAGE ID 这种命令,将会删除所有相同镜像ID的镜像。

## 在此新增标签为my-nginx的文件
[root@VM-0-10-centos ~]# docker tag f652ca386ed1 my-nginx 
## 查看所有的镜像文件
[root@VM-0-10-centos ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
my-nginx     latest    f652ca386ed1   12 days ago   141MB
nginx        latest    f652ca386ed1   12 days ago   141MB

我们根据镜像ID进行删除:

[root@VM-0-10-centos ~]# docker rmi  f652ca386ed1
Error response from daemon: conflict: unable to delete f652ca386ed1 (must be forced) - image is referenced in multiple repositories

使用 -f进行强制删除:

[root@VM-0-10-centos ~]# docker rmi -f f652ca386ed1
Untagged: my-nginx:latest
Untagged: nginx:latest
Untagged: nginx@sha256:9522864dd661dcadfd9958f9e0de192a1fdda2c162a35668ab6ac42b465f0603
Deleted: sha256:f652ca386ed135a4cbe356333e08ef0816f81b2ac8d0619af01e2b256837ed3e
Deleted: sha256:a7edf84b6db27e8ef5d7368c95159120f00a74cee57368e2bc107ee713172699
Deleted: sha256:46893639b5fbc6315531cb197fb4071750508880425c0620d88aae4e483d72c1
Deleted: sha256:afa1ff13852cf0fa5d5ff8cd21c8a21a99c139fc069926cd1316d1ad3d0c7189
Deleted: sha256:831e8983bb6a65130bec4e73bed4bc641bfd6d7c6917be32a483882f70e809b0
Deleted: sha256:d213f9a0e4eef08107f70d94b36f5a41c1437fc68af82ee82eb74de80282130a
Deleted: sha256:9321ff862abbe8e1532076e5fdc932371eff562334ac86984a836d77dfb717f5
[root@VM-0-10-centos ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

这次我们发现当前没有一个nginx镜像存在了。

批量删除镜像

首先我们先下载nginx、tomcat与redis如下所示:
在这里插入图片描述
目前我的机器上存有三个镜像查询如下:

[root@VM-0-10-centos ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
tomcat       latest    24207ccc9cce   5 days ago    680MB
redis        latest    aea9b698d7d1   11 days ago   113MB
nginx        latest    f652ca386ed1   12 days ago   141MB

批量删除镜像文件有两种方式:

  1. 使用$() 表达式进行删除
[root@VM-0-10-centos ~]# docker rmi -f $(docker images -qa)
Untagged: tomcat:latest
Untagged: tomcat@sha256:429d5c140820d5eba38042823501d5f4e0f03b282133513e29c22d6358daa7c7
Deleted: sha256:24207ccc9cce2cb6473cec77e1ec441a7b4e6d0579f4e361899fecfc1019189f
Deleted: sha256:ac4e16d5dfd2ff69bd1794be416c8e419ccd485afa28349ea54358af2412d2f8
Deleted: sha256:6074fd0b4c77dccc686e244fb22f46253f103324dd7f241821c535d669abff30
Deleted: sha256:e193493c6b62c99a0b1d71d35570abdc9659c06a603ef21b3c70eebd2d571080
Deleted: sha256:5ba402d00d241ed90ec1aeddc5f51d2c5fca13680aca609acbdae8394d274fda
Deleted: sha256:d949ff5ab84a822d9dc421efa1cf6182c39242f3fe9c014a84bd8314add2d405
Deleted: sha256:979a578d29c884e195c5d22fc1f056ea123ef6e26330ff546afef6680d1670e0
Deleted: sha256:d8846156f697b208f03e0c543e6a4fc7ad67f1fa1f201cdb98c9ff2183a0acd9
Deleted: sha256:696ddf161baa5116ea358eb43639634d9d74c1377532f6ee28a1b13612299cbd
Deleted: sha256:4248cb0e89f00c8fe152aa329eb0ea85490942d192ff6786af7783dcf3d354a9
Deleted: sha256:e2e8c39e0f77177381177ba8c4025421ec2d7e7d3c389a9b3d364f8de560024f
Untagged: redis:latest
Untagged: redis@sha256:2f502d27c3e9b54295f1c591b3970340d02f8a5824402c8179dcd20d4076b796
Deleted: sha256:aea9b698d7d1d2fb22fe74868e27e767334b2cc629a8c6f9db8cc1747ba299fd
Deleted: sha256:beb6c508926e807f60b6a3816068ee3e2cece7654abaff731e4a26bcfebe04d8
Deleted: sha256:a5b5ed3d7c997ffd7c58cd52569d8095a7a3729412746569cdbda0dfdd228d1f
Deleted: sha256:ee76d3703ec1ab8abc11858117233a3ac8c7c5e37682f21a0c298ad0dc09a9fe
Deleted: sha256:60abc26bc7704070b2977b748ac0fd4ca94b818ed4ba1ef59ca8803e95920161
Deleted: sha256:6a2f1dcfa7455f60a810bb7c4786d62029348f64c4fcff81c48f8625cf0d995a
Untagged: nginx:latest
Untagged: nginx@sha256:9522864dd661dcadfd9958f9e0de192a1fdda2c162a35668ab6ac42b465f0603
Deleted: sha256:f652ca386ed135a4cbe356333e08ef0816f81b2ac8d0619af01e2b256837ed3e
Deleted: sha256:a7edf84b6db27e8ef5d7368c95159120f00a74cee57368e2bc107ee713172699
Deleted: sha256:46893639b5fbc6315531cb197fb4071750508880425c0620d88aae4e483d72c1
Deleted: sha256:afa1ff13852cf0fa5d5ff8cd21c8a21a99c139fc069926cd1316d1ad3d0c7189
Deleted: sha256:831e8983bb6a65130bec4e73bed4bc641bfd6d7c6917be32a483882f70e809b0
Deleted: sha256:d213f9a0e4eef08107f70d94b36f5a41c1437fc68af82ee82eb74de80282130a
Deleted: sha256:9321ff862abbe8e1532076e5fdc932371eff562334ac86984a836d77dfb717f5
[root@VM-0-10-centos ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

docker images -qa 参数解释:-q 表示只查询镜像的ID,-a表示查询所有的镜像列表。

  1. 使用xargs

上面的删除镜像的命令等价于如下命令:

docker images -q | xargs docker rmi -f

清理镜像

使用Docker一段时间后, 系统中可能会遗留一些临时的镜像文件,我们可以通过docker image prune进行清理。

[root@VM-0-10-centos ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@VM-0-10-centos ~]# docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B

总结

本文简单介绍了Docker镜像的括查询、查看 搜索、删除、清理等命令,后面会在后续的文章中输出更多的镜像操作内容,例如 上传镜像、生成自己的镜像等。

猜你喜欢

转载自blog.csdn.net/javaee_gao/article/details/121924635