获取镜像到本地
比如我们获取 ubuntu 18.04 的镜像:
$ docker pull ubuntu:18.04
查看本地的所有镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 47b19964fb50 3 days ago 88.1MB
每个镜像用了5个元数据描述:仓库(REPOSITORY)、标签(TAG)、镜像ID(IMAGE ID)、存储占用空间(SIZE)。
一个镜像只有一个ID,不同镜像的ID不会相同。一个镜像可以有多个标签(TAG)。
为镜像增加标签
可以通过镜像ID,或者 仓库名+标签 指定新仓库名和新标签。
$ docker tag 47b19964fb50 ubuntu:18.04-v2
$ docker tag ubuntu:18.04 ubuntu:18.04-v3
$ docker tag ubuntu:18.04 new-ubuntu:18.04
再次查看本地所有镜像:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
new-ubuntu 18.04 47b19964fb50 3 days ago 88.1MB
ubuntu 18.04 47b19964fb50 3 days ago 88.1MB
ubuntu 18.04-v2 47b19964fb50 3 days ago 88.1MB
ubuntu 18.04-v3 47b19964fb50 3 days ago 88.1MB
可以看到,这几个镜像的 ID 是相同的。其实就是同一个镜像,但是 仓库名和标签不同。
用仓库+标签删除镜像
在上面的例子里,我们为 ubuntu 18.04 镜像创建了多个仓库名+标签 ,我们也可以删除 仓库名+标签 的形式删除镜像。如果一个镜像有多个仓库名+标签 ,需要全部删除后,才会真正将镜像删除。下面是一个例子,因为镜像没有被删除,所以命令执行结果是Untagged 。
$ docker image rm new-ubuntu:18.04
Untagged: new-ubuntu:18.04
我们依次删除该镜像的各个标签:
$ docker image rm ubuntu:18.04
Untagged: ubuntu:18.04
$ docker image rm ubuntu:18.04-v2
Untagged: ubuntu:18.04-v2
$ docker image rm ubuntu:18.04-v3
Untagged: ubuntu:18.04-v3
Untagged: ubuntu@sha256:7a47ccc3bbe8a451b500d2b53104868b46d60ee8f5b35a24b41a86077c650210
Deleted: sha256:47b19964fb500f3158ae57f20d16d8784cc4af37c52c49d3b4f5bc5eede49541
Deleted: sha256:d4c69838355b876cd3eb0d92b4ef27b1839f5b094a4eb1ad2a1d747dd5d6088f
Deleted: sha256:1c29a32189d8f2738d0d99378dc0912c9f9d289b52fb698bdd6c1c8cd7a33727
Deleted: sha256:d801a12f6af7beff367268f99607376584d8b2da656dcd8656973b7ad9779ab4
Deleted: sha256:bebe7ce6215aee349bee5d67222abeb5c5a834bbeaa2f2f5d05363d9fd68db41
最后一次删除时,出现了Deleted
的字样,说明镜像被删除了。
用镜像ID删除镜像
使用 docker image rm <image id>
可以删除镜像。例如,ID 为 47b19964fb50 的镜像有两个仓库名+标签:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
new-ubuntu 18.04 47b19964fb50 3 days ago 88.1MB
ubuntu 18.04 47b19964fb50 3 days ago 88.1MB
尝试删除,但是删除失败:
$ docker image rm 47b19964fb50
Error response from daemon: conflict: unable to delete 47b19964fb50 (must be forced) - image is referenced in multiple repositories
因为有多个仓库名+标签
指向同一个镜像,所以要用 -f 参数强制删除:
$ docker image rm -f 47b19964fb50
执行后,docker images
执行结果中便没有47b19964fb50 这个镜像了。
也可以用下面的命令删除:
$ docker rmi -f 47b19964fb50