4个实用小技巧,来给你的Docker 进行一次“大扫除”吧![转载]

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 如果您倾向于在工作中使用Docker,那么就不得不考虑那些遗留下来的容器和悬挂卷,小编在这里将介绍4个小技巧,来给您的Docker 做一次全面的“大扫除”吧!

写在前面

如果您倾向于在工作中使用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 来享受极致的体验吧!

目录
相关文章
|
3月前
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
281 57
|
4月前
|
存储 运维 安全
Docker化运维:容器部署的实践指南
Docker化运维:容器部署的实践指南
|
3月前
|
存储 监控 Java
如何对迁移到Docker容器中的应用进行性能优化?
如何对迁移到Docker容器中的应用进行性能优化?
259 59
|
3月前
|
NoSQL Redis Docker
使用Docker Compose工具进行容器编排的教程
以上就是使用Docker Compose进行容器编排的基础操作。这能帮你更有效地在本地或者在服务器上部署和管理多容器应用。
340 11
|
3月前
|
缓存 Java Docker
如何对应用代码进行优化以提高在Docker容器中的性能?
如何对应用代码进行优化以提高在Docker容器中的性能?
223 1
|
4月前
|
Docker 容器
Docker网关冲突导致容器启动网络异常解决方案
当执行`docker-compose up`命令时,服务器网络可能因Docker创建新网桥导致IP段冲突而中断。原因是Docker默认的docker0网卡(172.17.0.1/16)与宿主机网络地址段重叠,引发路由异常。解决方法为修改docker0地址段,通过配置`/etc/docker/daemon.json`调整为非冲突段(如192.168.200.1/24),并重启服务。同时,在`docker-compose.yml`中指定网络模式为`bridge`,最后通过检查docker0地址、网络接口列表及测试容器启动验证修复效果。
|
5月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】数据库不适合Docker容器化部署的原因
本文介绍了在Docker中部署MySQL数据库并实现数据持久化的方法,同时分析了数据库不适合容器化的原因。通过具体步骤演示如何拉取镜像、创建持久化目录及启动容器,确保数据安全存储。然而,由于数据安全性、硬件资源争用、网络带宽限制及额外隔离层等问题,数据库服务并不完全适合Docker容器化部署。文中还提到数据库一旦部署通常无需频繁升级,与Docker易于重构和重新部署的特点不符。
317 18
【赵渝强老师】数据库不适合Docker容器化部署的原因
|
2月前
|
安全 持续交付 Docker
Docker:重塑现代软件交付的容器引擎
Docker:重塑现代软件交付的容器引擎
|
2月前
|
存储 持续交付 Docker
Docker:轻量级容器技术重塑应用交付
Docker:轻量级容器技术重塑应用交付