写在前面
如果您倾向于在工作中使用Docker,那么就不得不考虑那些遗留下来的容器和悬挂卷,小编在这里将介绍4个小技巧,来给您的Docker 做一次全面的“大扫除”吧!
每隔一段时间您都需要清理一下自己的Docker,可能是通过简单删除闲置容器或卷的方式,亦或是其它方式。但无论使用哪种方式,您都应该了解清理Docker 所需的命令。而当您在虚拟机上运行Docker时,定时清理将变得更加重要。
Docker的清理任务并不是那么复杂,它们只是容易被人遗忘。但是,当您那些无用、闲置的容器正在占用大量空间时,您就需要清理它们(以及所有的残留物)来为真正有用的容器腾出更多的使用空间。
接下来,跟着小编来了解下该如何进行清理。
第一步:删除容器
首先,您需要了解并不是您创建的每个容器都会被永久使用,而且您也很容易忘记您所创造的那些闲置容器。有两个命令可以用来停止和删除所有的容器。但是,您可能有正在使用的容器,因此您并不希望进行大规模的删除操作。
所以,当您要删除容器时,您首先需要查看系统上有哪些容器。为此,请执行以下命令:
docker ps –a
上面的命令将为您列出系统上处于运行和非运行状态下的所有容器(图A)。
(图A)快速浏览在Docker server上的容器
任何显示状态为“Exited”的容器都是已经停止运行了,并且可以安全删除的容器(如果您并不打算重新启动它)。要删除“Exited”状态下的容器,请输入如下命令:
docker rm CONTAINTER_ID
CONTAINER_ID的位置就是输入容器真实ID的前几位数字。
但是,当您想删除那些处于运行状态下的容器时,您首先需要使用以下命令来停止容器:
docker stop CONTAINER_ID
CONTAINER_ID就是您想要删除的容器所独有的ID。现在,您可以按照上述相同的方式来删除容器了。
另外可以使用以下命令,来删除所有处于停止(Exited)状态下的容器:
docker rm -v $(docker ps -a -q -f status=exited)
第二步:删除Docker 卷
Docker数据卷是一个特殊的目录,位于一个或多个容器内,能够绕过Docker的存储驱动程序,并且可以直接与主机文件系统进行交互。数据卷作为容器之间持久、共享的数据,并在容器创建时预置进容器中。那么问题来了,当您删除容器时,卷可能会被保留。
要删除(所谓的)悬挂卷,您应该输入如下命令:
docker volume rm $(docker volume ls -qf dangling=true)
您将看到类似于图B所示的内容。
(图B)用一个命令来删除悬挂卷
最后,输入以下命令以确保完成清理任务:
docker volume ls -qf dangling=true | xargs -r docker volume rm
第三步:使用精简的基础镜像
现在,大多数官方的Docker镜像使用的是以最新的Debian系统作为基础进行制作,代替了原先那些占用更大空间的镜像(如Ubuntu),您可以通过使用小巧的官方debian镜像(如debian:jessie)来节省空间。如果您觉得Debian镜像仍然不够小巧,可以通过BusyBox镜像将它们进一步压缩。您可以通过下载BusyBox镜像,随后运行一个容器,并使用以下命令来获取BusyBox的Shell访问权限:
docker run -it --rm busybox
进入BusyBox容器,开始构建。
第四步:使用cron进行自动化清理
假设您经常使用Docker,但似乎从来没有时间来清理Docker,那么您可能需要用到cron了。让我们创建一个cron作业(job)来进行自动化的日常清理工作。
首先要做的是为作业创建一个脚本。我们将脚本命名为docker_clean.sh,然后将其保存在 ~/中。
该文件的内容将是:
#!/bin/bash
docker rmi $ (docker images -q -f dangling=true)
docker volume rm $(docker volume ls -qf dangling=true)
保存并关闭文件。为了使它正常的运行,必须赋予它适当的权限。输入如下命令:
chmod 755 ~/docker_clean.sh
要想运行成功,就需要输入如下命令,将用户添加进Docker group 中。
sudo usermod -aG docker USER
其中USER是真实的用户名。
该用户需要注销后重新登录。现在,我们通过输入以下命令来创建cron作业:
crontab –e
在crontab文件的底部,添加以下内容:
0 0 1 ~/docker_clean.sh > /dev/null 2>&1
保存并关闭crontab文件。之后在每个午夜12点,Docker将自动进行清理任务,届时您就可以体验一个干净、整洁的Docker了。
保持清理
Docker将为您提供良好的服务。如果您经常清理服务器,那么极少会出现“空间已满”的状态——当Docker作为虚拟机运行时,这个问题尤为重要。经常清理Docker 来享受极致的体验吧!