使用Docker镜像( 五 )


举个例子 , 将之前创建的envyubuntu:latest镜像给删除 , 相应的命令如下:
[envythink@localhost ~]$ docker image rm envyubuntu:latestUntagged: envyubuntu:latest请注意我们删除上述envyubuntu:latest镜像的时候 , 本地的ubuntu:latest镜像是不受到任何影响的 。当某一个镜像拥有多个标签的时候 , 此时执行docker image rm或者是docker rmi命令的时候 , 只是删除了该镜像多个标签中的指定标签而已 , 并不影响镜像文件 , 也就是仅仅删除了这个镜像的一个标签副本而已 。
此时开发者可以确认一下 , 本地的ubuntu:latest镜像依旧也是存在的:
[envythink@localhost ~]$ docker imagesREPOSITORY                       TAG                 IMAGE ID            CREATED             SIZEubuntu                           latest              9140108b62dc        9 hours ago         72.9MBhaproxy                          latest              4e531c2cb889        5 months ago        92.4MBpxc                              latest              a6a51beefff1        9 months ago        494MBpercona/percona-xtradb-cluster   latest              a6a51beefff1        9 months ago        494MB但是需要注意 , 如果这个镜像只剩下一个标签 , 那么此时执行docker image rm或者是docker rmi命令的时候就会删除这个镜像文件的所有文件层 。
使用镜像ID来删除镜像前面说过当使用docker image rm或者是docker rmi命令的时候 , 其后面也是可以接镜像的ID(也可以是能进行区分的部分ID串前缀) , 此时会先尝试删除所有指向该镜像的标签 , 然后删除该镜像文件本身 。因为多个标签指向的都是同一个镜像ID , 所以最终肯定会删除该镜像本身 。
但是需要注意 , 当有该镜像创建的容器存在时 , 镜像文件默认是无法被删除的 。
举个例子 , 可以使用之前的ubuntu:latest镜像来创建一个简单的容器 , 并输出一句话:
[envythink@localhost ~]$ docker run ubuntu:latest echo "hello,I am envy"hello,I am envy接着使用docker ps -a命令来查看本机上存在的所有容器:
[envythink@localhost ~]$ docker ps -aCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMESfd56a307081b        ubuntu:latest       "echo 'hello,I am en…"   24 seconds ago      Exited (0) 23 seconds ago                       nostalgic_lewin可以看到这个容器就是基于前面的ubuntu:latest镜像而创建出来的 , 不过它的状态是退出而已 。但是开发者是无法删除该ubuntu:latest镜像的 , Docker会提示有容器正在运行 , 无法删除 , 如下所示:


推荐阅读