如何清理您的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数据。