💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
一、前言   大家是怎么删除Docker中的镜像和容器的呢,有没有考虑过如何优雅地删除呢?本教程详细指导如何在优雅地删除Docker容器和镜像。如需了解如何在Centos7系统里面安装Docker,可以参考教程【最新Docker在Centos7下安装部署(参考官方教程文档)】 二、优雅删除镜像(推荐做法) 1、查看Docker要删除的镜像,如目标版本为stable-perl的Nginx,镜像ID(IMAGE ID)为 df1998569adb。 ``` docker images ``` ![](https://img.kancloud.cn/5a/97/5a97bdc7d07f0418044f3fef27f75129_499x113.png) 2、使用命令“docker rmi 镜像ID”删除Nginx(stable-perl)的镜像,只取“IMAGE ID”的前3个字符即可。 ``` docker rmi df1 ``` ![](https://img.kancloud.cn/3f/3d/3f3dd9c690a8040ad9aa45f20464328c_925x51.png)   报错内容如下,意思是镜像(df1)存在使用中的容器(f66),不能强制删除镜像。官方的意思是要先停止容器运行,再进行镜像的删除操作吗? ``` Error response from daemon: conflict: unable to delete df1998569adb (cannot be forced) - image is being used by running container f6678f2821c7 ``` 3、查看Docker运行中的容器,如容器 nginx:stable-perl ,容器ID为 f66。 ``` docker ps ``` ![](https://img.kancloud.cn/b4/ea/b4ea750d34d143363c7a8e981a14d1c6_926x202.png) 4、先停止nginx:stable-perl容器(f66)运行,再去删除Nginx(stable-perl)镜像(df1)。 (1)停止容器(f66)运行。 ``` docker stop f66 ``` (2)删除镜像(df1)。 ``` docker rmi df1 ``` ![](https://img.kancloud.cn/b4/ea/b4ea750d34d143363c7a8e981a14d1c6_926x202.png)   What?都已经停止容器(f66)运行了,删除镜像(df1)怎么还报错啊!?其实,只停止容器的正常运行还不行,还有最重要的一步没做:删除容器。 ``` Error response from daemon: conflict: unable to delete df1998569adb (must be forced) - image is being used by stopped container f6678f2821c7 ``` 5、查看Docker所有容器的状态(包含运行中的和已停止的),“STATUS”为“Exited(0)”代表停止运行。执行删除容器命令“docker rm f66”,删除 nginx:stable-perl 容器,再查看 nginx:stable-perl 容器是否还在列表中。 (1)查看Docker所有容器的状态。 ``` docker ps -a ``` (2)删除 nginx:stable-perl 容器。 ``` docker rm f66 ``` (3)再查看Docker所有容器的状态,发现 nginx:stable-perl 容器(f66)已经不存在了。 ``` docker ps -a ``` ![](https://img.kancloud.cn/b7/46/b746e5e174f7290d74a630e9d886411e_926x457.png) 6、删除镜像,再查看所有镜像,发现列表中已经不存在版本为stable-perl的Nginx镜像(df1)。 ``` docker rmi df1 ``` 1![](https://img.kancloud.cn/0b/1b/0b1b2bc7ba0a3e3a78d1e6fe7598365c_730x251.png) 三、优雅删除容器(推荐做法) 1、查看Docker中运行中的容器,例如 Nginx ,容器ID为 39c,并删除容器。 (1)查看Docker中运行中的容器。 ``` docker ps ``` (2)删除Nginx容器(39c)。 ``` docker rm 39c ``` (3)发现会报错,报错内容如下,意思是容器还在运行,不能删除,先停止运行再删除,或直接强制删除。 ![](https://img.kancloud.cn/bc/0d/bc0dcf3cef6d81c872bda194576368a6_923x234.png) ``` Error response from daemon: You cannot remove a running container 39cdb69246fdb6b623cff60af5b59e033149b6940bc5e0432c760ea245da81a9. Stop the container before attempting removal or force remove ``` 2、停止容器(39c),查看所有容器的运行状态。 (1)停止容器。 ``` docker stop 39c ``` (2)查看所有容器的运行状态(包含运行中的和已停止的)。 ``` docker ps -a ``` ![](https://img.kancloud.cn/96/b8/96b8b3256a2b5fd14f12561c1f0ed740_924x250.png) 3、删除容器(39c),查看所有容器的运行状态。 (1)删除容器。 ``` docker rm 39c ``` (2)查看所有容器的运行状态(包含运行中的和已停止的)。 ``` docker ps -a ``` (3)容器(39c)已经不存在了,说明被成功删除了。 ![](https://img.kancloud.cn/72/65/7265b37790d992c9961173bc06366130_924x220.png) 四、暴力删除镜像和容器(不推荐做法) 1、经验证,镜像中的容器状态为已停止或已删除的才能被强制删除,同时对应的容器(d70)也会被删除。若容器还在运行中,删除镜像会报错!命令“docker rmi”后面加参数“-f”。“image_id”代表镜像ID(IMAGE ID)。 ``` docker rmi -f image_id ``` ![](https://img.kancloud.cn/3e/8c/3e8ca1d3401a84e85af62eb6febab43e_931x461.png) ![](https://img.kancloud.cn/c0/10/c01051631dac11fb53d67673f2f887c5_921x248.png) 2、无论容器是否正在运行中或者已停止,都可被强制删除!命令“docker rm”后面加参数“-f”。“container_id”代表容器ID(CONTAINER ID)。 ``` docker rm -f container_id ``` ![](https://img.kancloud.cn/47/4f/474fe0a77defae8c29347426868b06c9_924x394.png) 五、总结   优雅地删除镜像的最佳做法是:先停止容器,再删除容器,最后删除镜像。   优雅地删除容器的最佳做法是:先停止容器,再删除容器。