获取镜像
docker pull
命令用于从Docker Registry
中获取指定镜像到当前服务器中, 命令格式为:
1 | [root@VM-0-13-centos ~]# docker pull --help |
上面的NAME
就是Docker Image
的资源地址, 就像URL
一样, 那么docker pull
命令可以表示为docker pull dockerRegistry:port/repository:tag
.
- 默认
dockerRegistry
为官方库Docker Hub
, 域名为docker.io
; - 默认
repository
为官方镜像library
; - 默认
tag
为latest
;
所以 docker pull docker.io/library/nginx
== docker pull nginx
;
1 | [root@VM-0-13-centos ~]# docker pull nginx |
从上面的docker log
可以发现, 首先使用了默认tag latest
, 并随后表示从docker.io/library/nginx
库获得对应镜像;
查看镜像
docker image ls
命令, 用于查看当前服务器上存在的镜像;
1 | [root@VM-0-13-centos ~]# docker image ls |
列表中包含项有: 仓库名
, 标签
, 镜像ID
, 创建时间
, 占用空间大小
; 镜像ID 是镜像的唯一标识, 需要注意的是一个镜像可以包含有多个标签;
关于镜像体积:
Docker Hub
上的镜像体积, 通常小于本地所占空间, 这是由于Docker Hub
显示的为压缩体积, 在镜像下载与上传时使用, 本地空间为解压后的体积;docker image ls
显示的镜像体积之和, 并非一定是所有镜像的实际硬盘消耗; 这是由于Docker Image
采用多层存储接口, 允许相同层的复用与继承; 可以通过docker system df
查看镜像, 容器, 存储卷所占用的空间;1
2
3
4
5[root@VM-0-13-centos ~]# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 7 6 566.5 MB 210.4 MB (37%)
Containers 13 2 9.852 MB 9.85 MB (99%)
Local Volumes 0 0 0 B 0 B
关于虚悬镜像:
上面的镜像列表中, 存在两个仓库名与标签均为
<none>
的镜像, 这就是虚悬镜像; 这些镜像,原本是存在仓库名与标签的, 两种情况下会导致为<none>
;docker pull
: 例如官方镜像进行了维护, 发布了新版本, 重新拉取镜像A
后,A
的仓库名与标签迁移到新下载A'
的镜像上, 原镜像A
相关属性置为<none>
;docker build
: 构建一个同名,同标签的镜像A'
会导致原镜像A
, 相关属性置为<none>
;
可以通过
docker image ls -f dangling=true
查看虚悬镜像:1
2
3
4[root@VM-0-13-centos ~]# docker image ls -f dangling=true
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 618d482e06b4 2 months ago 52.6 MB
<none> <none> 4c0257ee9d10 2 months ago 5.53 MB通常来说, 虚悬镜像没有价值, 可以通过
docker image prune
命令删除:1
2
3
4[root@VM-0-13-centos ~]# docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0 B关于中间层镜像:
通过
docker image ls -a
可以看到中间层镜像,docker image ls
默认显示顶层镜像;很多无标签的镜像是中间层镜像, 这些镜像并不是虚悬镜像, 也无法删除;1
2
3
4
5
6
7
8
9
10
11
12[root@VM-0-13-centos ~]# docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v2 33a05755d7f3 About an hour ago 142 MB
docker.io/nginx latest 51086ed63d8c 21 hours ago 142 MB
docker.io/ubuntu 18.04 71cb16d32be4 34 hours ago 63.1 MB
<none> <none> 618d482e06b4 2 months ago 52.6 MB
<none> <none> 1eaace73d9c9 2 months ago 5.53 MB
<none> <none> 4c0257ee9d10 2 months ago 5.53 MB
<none> <none> 0dd3d5655279 2 months ago 5.53 MB
docker.io/ubuntu latest 27941809078c 4 months ago 77.8 MB
<none> <none> e66264b98777 4 months ago 5.53 MB
docker.io/centos latest 5d0da3dc9764 12 months ago 231 MB可以看到的镜像变多了;
查看部分镜像:
仅列举, 细节可看官方文档;
1
2
3
4
5
6
7
8
9
10docker image ls ubuntu
// 获得仓库名为 ubuntu 的镜像
docker image ls ubuntu:18.04
// 获得仓库名为ubuntu 版本为 18.04 的镜像
docker image ls -f since=mongo:3.2
// 查看在 mongo:3.2 镜像之后下载的所有
docker image ls -f before=mongo:3.2
// 查看在 mongo:3.2 镜像之前下载的所有
docker image ls -f label=0.1
// 查看特定标签的镜像格式化镜像输出:
仅列举, 细节可看官方文档;
1
2
3
4
5
6
7
8
9[root@VM-0-13-centos ~]# docker image ls --format "table {{.ID}}\t{{.Repository}}"
IMAGE ID REPOSITORY
33a05755d7f3 nginx
51086ed63d8c docker.io/nginx
71cb16d32be4 docker.io/ubuntu
618d482e06b4 <none>
4c0257ee9d10 <none>
27941809078c docker.io/ubuntu
5d0da3dc9764 docker.io/centos删除镜像
docker image rm
用于删除镜像:
1 | [root@VM-0-13-centos ~]# docker image rm --help |
命令中的IMAGE
可以是 镜像短ID, 镜像长ID, 镜像名, 镜像摘要
, 例如:
1 | [root@VM-0-13-centos ~]# docker image ls |
这里采用ID
方式删除对应Image;其余的方式, 不赘述, 可通过文档或博客方式快速应用;需要注意的是上面的删除Log
中存在两种行为: Untagged
和 Deleted
;
1 | 如果观察上面这几个命令的运行输出信息的话,你会注意到删除行为分为两类,一类是 Untagged,另一类是 Deleted。我们之前介绍过,镜像的唯一标识是其 ID 和摘要,而一个镜像可以有多个标签。 |