如何清理您的Docker数据

Docker不需要对系统进行配置更改…但它却使用大量的磁盘空间。 短暂的使用后,通过下面命令您可能会震惊地看到一些可怕使用统计信息:

docker system df

不过不用担心,Docker允许您从未使用的images,containers和volumes中回收磁盘空间。

定期清理

为了安全地删除停止的containers,未使用的networks和悬挂images(没有响应的实例containers),通常经常运行以下命令是一个好主意:

docker system prune

稍微危险的选择是:

docker system prune -a

这将删除于运行的containers无关的images。


下面分别介绍各部分的磁盘清理。

image清理

image是一个磁盘的快照,类似于一个web服务、编程语言的运行时或者是数据库管理系统。输入下面命令,你可以查询所有的image包括激活的和悬挂的:

docker image ls -a

下面命令可以删除image:

docker image rm <name_or_id>

可以一次性删除多个image,用空格分开。

container清理

container是一个image运行的实例,一个image可以运行多个实例。使用下面命令,可以查询所有运行的和停止的container:

docker container ls -a

下面命令用于停止container:

docker container stop <name_or_id>

下面命令用于删除container:

docker container rm <name_or_id>

上面停止和删除都可以一次性操作多个container,用空格分开。

留住停止的container很有必要。--rm很特殊可以添加到docker run这样在container停止时会自动删除container。

network清理

container可以添加到network中,这样可以使的container之间通行。network这些配置文件并不占用太多的磁盘空间。使用下面命令查看所有network:

docker network ls

下面命令用于删除network:

docker network rm <name_or_id>

volume清理

volume是虚拟的磁盘镜像。volume必须连接到正在运行的container,以便在container重新启动之间保存文件或其他状态信息。volume的大小依赖于container应用的使用。

使用下面命令查看volume:

docker volume ls

请谨慎删除volume,可以先执行备份后再删除,下面命令是利用docker exec执行mysqldump来备份mysql:

docker exec mysql /usr/bin/mysqldump -u root -pmysecret mydb > backup.sql

你同样可以使用docker cp来拷贝文件进行备份,下面是个示例:

docker cp mycontainer:/some/file ./host/directory

假如你已经没有重要数据,你可以执行下面删除命令来删除不使用的volume:

docker volume rm <name>

执行下面命令将删除所有未连接到正在运行的container上的volume:

docker volume prune

另外,如果你已经做好备份,可以使用下面命令删除所有volume:

docker volume prune -a

完全清理

可以通过一个简单的命令来指定删除所有未使用的image、container、network或volume:

docker system prune -a --volumes

添加-f可以强制清除所有。你将清除掉所有docker数据。