zoukankan      html  css  js  c++  java
  • Docker 删除&清理镜像

    执行删除前,先把该镜像运行的容器关掉,再删除容器,最后删除镜像,方可顺利进行

    #关掉容器
    docker stop 容器ID
    

      

    # 移除容器
    docker rm 容器ID
    # 删除镜像
    docker rmi 镜像ID(或)镜像标签

    一、通过标签删除镜像

    通过如下两个都可以删除镜像:

    docker rmi [image]
    

    或者:

    docker image rm [image]
    

    支持的子命令如下:

    • -f, -force: 强制删除镜像,即便有容器引用该镜像;
    • -no-prune: 不要删除未带标签的父镜像;
     
    Docker 查看镜像信息

    例如,我们想删除上章节创建的 allen_mysql:5.7 镜像,命令如下:

    docker rmi allen_mysql:5.7
    
     
    Docker 删除镜像

    从上面章节中,我们知道 allen_mysql:5.7docker.io/mysql:5.7 实际上指向的是同一个镜像,那么,您可以能会有疑问,我删除了 allen_mysql:5.7, 会不会将 docker.io/mysql:5.7 镜像也给删除了?

    实际上,当同一个镜像拥有多个标签时,执行 docker rmi 命令,只是会删除了该镜像众多标签中,您指定的标签而已,并不会影响原始的那个镜像文件。

    不信的话,我们可以执行 docker images 命令,来看下 docker.io/mysql:5.7 镜像还在不在:

     
    Docker 查看镜像信息

    可以看到,docker.io/mysql:5.7 镜像依然存在!

    那么,如果某个镜像不存在多个标签,当且仅当只有一个标签时,执行删除命令时,您就要小心了,这会彻底删除镜像。

    例如,这个时候,我们再执行 docker rmi docker.io/mysql:5.7 命令:

     
    Docker 删除镜像

    从上图可以看到,我们已经删除了 docker.io/mysql:5.7 镜像的所有文件层。该镜像在本地已不复存在了!

    二、通过 ID 删除镜像

    除了通过标签名称来删除镜像,我们还可以通过制定镜像 ID, 来删除镜像,如:

    docker rmi ee7cbd482336
    

    一旦制定了通过 ID 来删除镜像,它会先尝试删除所有指向该镜像的标签,然后在删除镜像本身。

    三、删除镜像的限制

    删除镜像很简单,但也不是我们何时何地都能删除的,它存在一些限制条件。

    当通过该镜像创建的容器未被销毁时,镜像是无法被删除的。为了验证这一点,我们来做个试验。首先,我们通过 docker pull alpine 命令,拉取一个最新的 alpine 镜像, 然后启动镜像,让其输出 hello, docker!:

     
    Docker run alpine

    接下来,我们来删除这个镜像试试:

     
    Docker 删除镜像

    可以看到提示信息,无法删除该镜像,因为有容器正在引用他!同时,这段信息还告诉我们,除非通过添加 -f 子命令,也就是强制删除,才能移除掉该镜像!

    docker rmi -f docker.io/alpine
    

    但是,我们一般不推荐这样暴力的做法,正确的做法应该是:

    1. 先删除引用这个镜像的容器;
    2. 再删除这个镜像;

    也就是,根据上图中提示的,引用该镜像的容器 ID (9d59e2278553), 执行删除命令:

    docker rm 9d59e2278553
    

    然后,再执行删除镜像的命令:

    docker rmi 5cb3aa00f899
    
     
    Docker 删除镜像

    这个时候,就能正常删除了!

    四、清理镜像

    我们在使用 Docker 一段时间后,系统一般都会残存一些临时的、没有被使用的镜像文件,可以通过以下命令进行清理:

    docker image prune
    

    它支持的子命令有:

    • -a, --all: 删除所有没有用的镜像,而不仅仅是临时文件;
    • -f, --force:强制删除镜像文件,无需弹出提示确认;

    另外,执行完 docker image prune 命令后,还是告诉我们释放了多少存储空间!

    五、总结

    本文中,我们知道了 Docker 中如何删除以及清理镜像,通过标签和通过 ID 来删除镜像的相关细节,删除镜像又存在哪些限制等。



    作者:犬小哈
    链接:https://www.jianshu.com/p/05d0c77d26d3
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    cookie,session,token
    自己动手写一个简易对象关系映射,ORM(单例版和数据库池版)
    Python,针对指定文件类型,过滤空行和注释,统计行数
    MySQL 数据类型
    MySQL 基础小技巧
    Python测量时间,用time.time还是time.clock
    [计算机网络]想出网关?你需要懂得这些
    [数据结构与算法]05 Stack 经典面试题之判断字符串是否合法( Java 版)
    [自考总结]想要去的远方,终有一天会到达
    [数据结构与算法]04 Link List (链表)及单链表反转实现
  • 原文地址:https://www.cnblogs.com/zmdComeOn/p/12933895.html
Copyright © 2011-2022 走看看