1 - Docker的镜像命令

Docker的镜像命令

镜像仓库类的Docker命令:

命令 命令描述
images 查看本地镜像(列出本地所有镜像)
inspect 查看镜像详情
search 查找镜像
tag 修改镜像tag
history 显示镜像每层的变更内容
rmi 删除本地镜像
pull 获取镜像
push 推送镜像到仓库
login 登录第三方仓库
logout 退出第三方仓库
save 打包本地镜像, 使用压缩包来完成迁移
load 导入镜像压缩包
commit 将容器保存为镜像
build 使用Dockerfile构建镜像
import 导入本地容器快照文件为镜像

2 - Docker的images命令

Docker的images命令

介绍

https://docs.docker.com/engine/reference/commandline/images/

默认的docker images 命令将显示所有顶级镜像,其存储库和标签,以及它们的大小。

Docker image具有中间层,通过允许缓存每个步骤来提高可重用性,减少磁盘使用并加速docker build。 默认情况下不显示这些中间层。

SIZE是镜像及其所有父镜像占用的累积空间。 这也是Docker save命令制作镜像时创建的Tar文件内容使用的磁盘空间。

如果镜像具有多个存储库名称或标记,则会多次列出该镜像。 此单个镜像(可通过其匹配的IMAGE ID识别)仅使用一次列出的SIZE。

使用

$ docker images
REPOSITORY                                 TAG                                        IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy                      v1.12.2                                    15e9da1ca195        3 months ago        96.5MB
k8s.gcr.io/kube-apiserver                  v1.12.2                                    51a9c329b7c5        3 months ago        194MB
k8s.gcr.io/kube-controller-manager         v1.12.2                                    15548c720a70        3 months ago        164MB
<none>                                     <none>                                     b8988e488a42        6 months ago        733MB
envoyproxy/envoy-build-ubuntu              7f7f5666c72e00ac7c1909b4fc9a2121d772c859   936ba3592a5c        8 months ago        2.31GB

通过name和tag来列出镜像

docker images 命令有可选的 [REPOSITORY[:TAG]] 参数,该参数将列表限制为与参数匹配的镜像。

如果指定 REPOSITORY 但没有 TAG,则 docker images 命令会列出给定存储库中的所有图像。

$ docker images istio/pilot
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
istio/pilot         0.7.1               6223c9364df7        10 months ago       51.9MB

$ docker images istio/*
REPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE
istio/istio-ca                           0.7.1               5c82fea42c78        10 months ago       42.7MB
istio/mixer                              0.7.1               251b0d3d2b93        10 months ago       54MB
6223c9364df7        10 months ago       51.9MB
istio/examples-bookinfo-reviews-v3       1.5.0               7301fee7c9cb        12 months ago       431MB
istio/examples-bookinfo-reviews-v2       1.5.0               

$ docker images istio/*:0.7.1
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
istio/istio-ca           0.7.1               5c82fea42c78        10 months ago       42.7MB
istio/mixer              0.7.1               251b0d3d2b93        10 months ago       54MB
istio/sidecar_injector   0.7.1               1db980725edb        10 months ago       33.4MB

过滤

过滤标志(-f--filter)格式为"key=value"。 如果有多个过滤器,则传递多个标志(例如,--filter "foo=bar" --filter "bif=baz"

目前支持的过滤器是:

  • dangling悬空 (boolean - true or false)
  • label (label=<key> or label=<key>=<value>)
  • before (<image-name>[:<tag>], <image id> or <image@digest>) - filter images created before given id or references
  • since (<image-name>[:<tag>], <image id> or <image@digest>) - filter images created since given id or references
  • reference (pattern of an image reference) - filter images whose reference matches the specified pattern

具体看官方文档。

dangling镜像的处理

dangling镜像就是images命令中出现的,REPOSITORY 和 TAG 都显示为 <none> 的镜像,如:

$ docker images
REPOSITORY                                 TAG                                        IMAGE ID            CREATED             SIZE
......
<none>                                     <none>                                     b8988e488a42        6 months ago        733MB

可以通过过滤器将dangling镜像都找出来:

$ docker images --filter "dangling=true"
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              b8988e488a42        6 months ago        733MB

这将显示未标记的镜像,这些镜像是镜像树的叶子(不是中间层)。 当镜像的新构建从这个镜像ID取走 repo:tag ,而留下 <none>:<none> 或 untagged 时,会出现这些的镜像。如果在容器当前正在使用镜像时尝试移除镜像,则会发出警告。通过使用此标志,允许批量清理。

可以联合docker rmi 命令一起使用来批量删除dangling镜像:

docker rmi $(docker images -f "dangling=true" -q)
Deleted: sha256:b8988e488a42c652492c6b488f44469245d2088f793c1e6448777afcedb34ca1

3 - Docker的search命令

Docker的search命令

介绍

https://docs.docker.com/engine/reference/commandline/search/

在Docker Hub中搜索镜像。

搜索查询默认最多返回25个结果。

使用

通过镜像名字搜索:

$ docker search busybox
NAME                        DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
busybox                     Busybox base image.                             1494                [OK]                
progrium/busybox                                                            68                                      [OK]
hypriot/rpi-busybox-httpd   Raspberry Pi compatible Docker Image with a …   45                                      
radial/busyboxplus          Full-chain, Internet enabled, busybox made f…   21                                      [OK]
......

过滤

当前支持的过滤器有:

  • stars (int - number of stars the image has)
  • is-automated (boolean - true or false) - is the image automated or not
  • is-official (boolean - true or false) - is the image official or not

4 - Docker的tag命令

Docker的tag命令

介绍

https://docs.docker.com/engine/reference/commandline/tag/

创建一个引用到 SOURCE_IMAGE 的 tag TARGET_IMAGE

镜像名称由斜杠分隔的名称组件组成,可选地以仓库主机名为前缀。主机名必须符合标准DNS规则,但可能不包含下划线。如果存在主机名,则可以选择后跟端口号如以下格式的 :8080。如果不存在,该命令默认使用位于 registry-1.docker.io 的Docker公共注册表。名称组件可能包含小写字母,数字和分隔符。分隔符定义为句点,一个或两个下划线,或一个或多个破折号。 名称组件不能以分隔符开头或结尾。

Tag名称必须是有效的ASCII,并且可以包含小写和大写字母,数字,下划线,句点和短划线。 Tag名称不能以句点或短划线开头,最多可包含128个字符。

使用

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

5 - Docker的history命令

Docker的history命令

介绍

https://docs.docker.com/engine/reference/commandline/history/

显示镜像的历史,显示镜像每层的变更内容

使用

docker history [OPTIONS] IMAGE

如:

$ docker history istio/mixer:0.7.1 --no-trunc
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
251b0d3d2b93        10 months ago       /bin/sh -c #(nop)  CMD ["--configStoreURL=fs…   0B                  
<missing>           10 months ago       /bin/sh -c #(nop)  ENTRYPOINT ["/usr/local/b…   0B                  
<missing>           10 months ago       /bin/sh -c #(nop) ADD file:04fbcb926d6c80af5…   53.7MB              
<missing>           10 months ago       /bin/sh -c #(nop) ADD file:f74cafb0f2a94a0b9…   252kB  

6 - Docker的rmi命令

Docker的rmi命令

介绍

https://docs.docker.com/engine/reference/commandline/rmi/

删除本地镜像

使用

docker rmi [OPTIONS] IMAGE [IMAGE...]

可以使用镜像的短ID或长ID,Tag或digest删除镜像。

如果镜像有一个或多个引用它的Tag,则必须在删除镜像之前删除所有Tag。通过Tag删除镜像时,将自动删除Digest引用。

或者使用 “-f” 标记来强制删除(包括所有tag的镜像)。

清理镜像

通过 docker system df 命令可以看到当前本地镜像的磁盘使用情况:

$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              38                  1                   7.314GB             7.314GB (99%)
Containers          4                   0                   0B                  0B
Local Volumes       0                   0                   0B                  0B
Build Cache         0                   0                   0B                  0B

可以通过 docker images 命令查看当前本地镜像情况,然后手工删除不需要的镜像。

docker system prune 命令可以帮助删除不需要使用的各种资源。

可以配合 docker images 命令来进行批量删除,如:

$ docker rmi $(docker images istio/* -q)
Untagged: istio/istio-ca:0.7.1
Untagged: istio/istio-ca@sha256:744e7a4426474d10f7984c601590ee6dab304f5cf6677a80b37c3025993dbd4e
Deleted: sha256:5c82fea42c7850f7f42e3b6326bc35b2a8941e77532210d925770eb501c6de1b
Deleted: sha256:8ccea48ceaaffc2fab84cc0d579948a221249d384156f6cfbdbcc9341ec59be7
Deleted: sha256:6ecf4e847360cffdcfe3a5d1b5de4e27b227aa5688c0ed63170cff2ecf7e43f6
Untagged: istio/mixer:0.7.1
......

如果要清空本地镜像,可以执行命令 docker rmi -f $(docker images -q)