《Docker技术入门与实战》——3.4 删除镜像

3.4 删除镜像

使用镜像的标签删除镜像
使用docker rmi命令可以删除镜像,命令格式为docker rmi IMAGE [IMAGE...],其中IMAGE可以为标签或ID。
例如,要删除掉dl.dockerpool.com:5000/ubuntu:latest镜像,可以使用如下命令:

$ sudo docker rmi dl.dockerpool.com:5000/ubuntu
Untagged: dl.dockerpool.com:5000/ubuntu:latest

读者可能会担心,本地的ubuntu:latest镜像是否会受到此命令的影响。无需担心,当同一个镜像拥有多个标签的时候,docker rmi命令只是删除了该镜像多个标签中的指定标签而已,并不影响镜像文件。因此上述操作相当于只是删除了镜像5506de2b643b的一个标签而已。
为保险起见,再次查看本地的镜像,发现ubuntu:latest镜像(准确地说,是5506de2b643b镜像)仍然存在:

$ sudo docker images
REPOSITORY         TAG          IMAGE ID          CREATED          VIRTUAL SIZE
ubuntu             14.04        5506de2b643b      1 weeks ago      197.8 MB
ubuntu             latest       5506de2b643b      1 weeks ago      192.8 MB

但当镜像只剩下一个标签的时候就要小心了,此时再使用docker rmi命令会彻底删除该镜像。
假设本地存在一个标签为mysql:latest的镜像,且没有额外的标签指向它,执行docker rmi命令,可以看出它会删除这个镜像文件的所有AUFS层:

$ sudo docker rmi mysql:latest
Untagged: mysql:latest
Deleted: 9a09222edf600a03ea48bd23cfa363841e45a8715237e3a58cb0167f0e8bad54
Deleted: 4daeda4ad839a152a3b649672bd5135977d7f81866d3bc0e16d0af3f65cc8af6
Deleted: cf07a411bf0883bd632940e8108dac49c64456a47f7390507de5685bbd6daf85
Deleted: 4f513746df18b222a07bb8d76d4b6d29752ce5dcb69bfad0ce92e6c1449a3821
Deleted: 228ecd435c8a29d25b77999036701a27f2d67874c915bb8eb9fb175b1f98aa60
Deleted: 37e4b3932afa186924a09eab332bc8ebec3aac8bac074314ed9a2d1e94547f50
Deleted: 898883ccfcee705e440547e30e240cb025c12410d7c9e4d2bcb11973ba075975
Deleted: 0a09ddcf99b7fd8fcb3525c41b54696038ecf13677f4459f1c98c742ffa60ab2
Deleted: 35bc8591e39be5089265a093e234d13a4b155a01d2ab9e8904eafa81664fb597
Deleted: 857e856e4481d59ee88a4cdedd9aaf855666bd494fa38506e6788361c0af4cda

使用镜像ID删除镜像
当使用docker rmi命令后面跟上镜像的ID(也可以是ID能进行区分的部分前缀串)时,会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。
注意,当有该镜像创建的容器存在时,镜像文件默认是无法被删除的,例如:
先利用ubuntu镜像创建一个简单的容器,输出一句话“hello! I am here!”:

$ sudo docker run ubuntu echo 'hello! I am here!'
hello! I am here!

使用docker ps -a命令可以看到本机上存在的所有容器:

$ sudo docker ps -a
CONTAINER ID     IMAGE     COMMAND     CREATED     STATUS      PORTS      NAMES
e812617b41f6     ubuntu:latest     "echo 'hello! I am h     13 seconds ago      Exited (0) 12 seconds ago     silly_leakey

可以看到,后台存在一个退出状态的容器,是刚基于ubuntu:latest镜像创建的。
试图删除该镜像,Docker会提示有容器正在运行,无法删除:

$ sudo docker rmi ubuntu
Error response from daemon: Conflict, cannot delete 5506de2b643b because the container e812617b41f6 is using it, use -f to force
2014/10/16 18:10:31 Error: failed to remove one or more images

如果要想强行删除镜像,可以使用-f参数:

$ sudo docker rmi -f ubuntu

笔者不推荐使用-f参数来强制删除一个存在容器依赖的镜像,因为这样往往会造成一些遗留问题。
再次使用docker images查看本地的镜像列表,读者会发现一个标签为的临时镜像,原来被强制删除的镜像换了新的ID继续存在系统中。

$ sudo docker images
REPOSITORY       TAG          IMAGE ID          CREATED           VIRTUAL SIZE
<none>           <none>       2318d26665ef      3 months ago      198.7 MB

因此,正确的做法是,先删除依赖该镜像的所有容器,再来删除镜像。首先删除容器e812617b41f6:

$ sudo docker rm e81
e81

此时再使用临时的ID来删除镜像,此时会正常打印出删除的各层信息:

core@localhost ~ $   docker rmi -f 2318d26665ef
Deleted: 2318d26665eff33e9f91c4c99036751afb40eb58f944a585372bec1407828ad3
Deleted: ebc34468f71dca9cb9937bf4c33062540bcacae148df8a70053bfd1acbecaa20
Deleted: 25f11f5fb0cb9e41531d1da8dc56351286427e070c536f7015fe76e4dae0a4bc
Deleted: 9bad880da3d219b10423804147d6982da1a7bb1e285777a4d746afca6215bebb
Deleted: 511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158

此时查看本地镜像,读者会发现临时镜像已经被删除:

$ sudo docker images
REPOSITORY       TAG       IMAGE ID       CREATED       VIRTUAL SIZE
时间: 2024-09-08 05:28:37

《Docker技术入门与实战》——3.4 删除镜像的相关文章

Docker技术入门与实战(第2版).

容器技术系列 Docker技术入门与实战 第2版 杨保华 戴王剑 曹亚仑 编著 图书在版编目(CIP)数据 Docker技术入门与实战 / 杨保华,戴王剑,曹亚仑编著. -2版. -北京:机械工业出版社,2017.1 (容器技术系列) ISBN 978-7-111-55582-7 I. D- II. ①杨- ②戴- ③曹- III. Linux操作系统-程序设计 IV. TP316.85 中国版本图书馆CIP数据核字(2016)第308604号 本书从Docker基本原理开始,深入浅出地讲解Do

赞一个 kindle电子书有最新的计算机图书可买了【Docker技术入门与实战】

最近对docker这个比较感兴趣,找一个比较完整的书籍看看,在z.cn上找到了电子书,jd dangdang看来要加油啊 Docker技术入门与实战 [Kindle电子书] ~ 杨保华 戴王剑 曹亚仑 (作者) http://www.amazon.cn/Docker技术入门与实战-杨保华-戴王剑-曹亚仑/dp/B00SMJ0VFA/ref=sr_1_2?s=digital-text&ie=UTF8&qid=1435217727&sr=1-2&keywords=docker

Docker技术入门与实战(第2版)3.4 删除镜像

3.4 删除镜像 1.?使用标签删除镜像 使用docker rmi命令可以删除镜像,命令格式为docker rmi IMAGE [IMAGE...],其中IMAGE可以为标签或ID. 例如,要删除掉myubuntu:latest镜像,可以使用如下命令: $ docker rmi myubuntu:latest Untagged: myubuntu:latest 读者可能会担心,本地的ubuntu:latest镜像是否会受此命令的影响.无需担心,当同一个镜像拥有多个标签的时候,docker rmi

Docker技术入门与实战(第2版)导读

前言 在一台服务器上同时运行一百个虚拟机,肯定会被认为是痴人说梦.而在一台服务器上同时运行一千个Docker容器,这已经成为现实.在计算机技术高速发展的今天,昔日的天方夜谭正在一个个变成现实. 多年的研发和运维(DevOps)经历中,笔者时常会碰到这样一个困境:用户的需求越来越多样,系统的规模越来越庞大,运行的软件越来越复杂,环境配置问题所造成的麻烦层出不穷--为了解决这些问题,开源社区推出过不少优秀的工具.这些方案虽然在某些程度上确能解决部分"燃眉之急",但是始终没有一种方案能带来&

Docker技术入门与实战(第2版)1.2 为什么要使用Docker

1.2 为什么要使用Docker 1.?Docker容器虚拟化的好处 Docker项目的发起人和Docker公司CTO Solomon Hykes曾认为,Docker在正确的地点.正确的时间顺应了正确的趋势--如何正确地构建应用. 在云时代,开发者创建的应用必须要能很方便地在网络上传播,也就是说应用必须脱离底层物理硬件的限制:同时必须是"任何时间.任何地点"可获取的.因此,开发者需要一种新型的创建分布式应用程序的方式,快速分发和部署,这正是Docker所能够提供的最大优势. 举个简单的

Docker技术入门与实战(第2版)2.1 核心概念

核心概念与安装配置 本章首先介绍Docker的三大核心概念. 镜像(Image) 容器(Container) 仓库(Repository) 只有理解了这三个核心概念,才能顺利地理解Docker容器的整个生命周期. 随后,笔者将介绍如何在常见的操作系统平台上安装Docker,包括Ubuntu.CentOS.MacOS和Windows等主流操作系统平台. 2.1 核心概念 Docker的大部分操作都围绕着它的三大核心概念--镜像.容器和仓库而展开.因此,准确把握这三大核心概念对于掌握Docker技术

Docker技术入门与实战(第2版)3.1 获取镜像

使用Docker镜像 镜像(image)是Docker三大核心概念中最为重要的,自Docker诞生之日起"镜像"就是相关社区最为热门的关键词. Docker运行容器前需要本地存在对应的镜像,如果镜像没保存在本地,Docker会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库. 本章将介绍围绕镜像这一核心概念的具体操作,包括如何使用pull命令从Docker Hub仓库中下载镜像到本地,如何查看本地已有的镜像信息和管

《Docker技术入门与实战》——2.1 核心概念

2.1 核心概念 Docker镜像 Docker镜像(Image)类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统. 例如:一个镜像可以只包含一个完整的Ubuntu操作系统环境,可以把它称为一个Ubuntu镜像.镜像也可以安装了Apache应用程序(或用户需要的其他软件),可以把它称为一个Apache镜像. 镜像是创建Docker容器的基础.通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做

《Docker技术入门与实战》——第3章 镜像

第3章 镜像 镜像是Docker的三大核心概念之一. Docker运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库. 本章将介绍围绕镜像这一核心概念的具体操作,包括如何使用pull命令从Docker Hub仓库中下载镜像到本地:如何查看本地已有的镜像信息:如何在远端仓库使用search命令进行搜索和过滤:如何删除镜像标签和镜像文件:如何创建用户定制的镜像并且