Docker不会对您的系统进行任何配置更改, 但是它会占用大量的磁盘空间。短时间使用它,您可能会惊讶地看到输入下面命令时返回了一些可怕的使用情况统计信息:
docker system df
幸运的是,Docker允许您从未使用的镜像,容器和卷中回收磁盘空间。
定期修剪
为了安全地删除已停止的容器,未使用的网络和虚悬镜像,最好每隔一段时间运行以下命令:
docker system prune
更具风险的选择是:
docker system prune -a
这将擦除任何与正在运行的容器无关的镜像。这可能有点夸张,但Docker将重新下载其所需的任何镜像。第一次尝试会稍慢一些,但随后会将镜像缓存起来以备将来使用。
以下各节介绍了删除特定项目的其他方法。
镜像回收
Docker镜像是应用程序(例如Web服务器,语言运行时或数据库管理系统)的磁盘快照。您可以通过输入以下内容来查看所有活动镜像和虚悬镜像(与容器无关的镜像):
docker image ls -a
可以通过输入以下内容删除Docker镜像:
docker image rm <name_or_id>
可以将任意数量的镜像添加到此命令,用空格字符分隔它们。
容器清理
Docker容器是镜像的运行实例,并且可以从同一容器中启动任意数量的容器。容器通常很小,因为它们是无状态的,并且引用镜像的文件系统。通过输入以下命令查看所有正在运行和已停止的容器:
docker container ls -a
您只能在容器停止后删除它。通过输入以下内容停止容器:
docker container stop <name_or_id>
然后可以通过输入以下内容来删除容器:
docker container rm <name_or_id>
同样,可以在此命令中添加任意数量的以空格分隔的容器名称/ID。
很少需要保留停止的容器。--rm选项可以被添加到任何docker run命令一旦终止自动删除的容器。
网络整理
容器可以连接到Docker管理的网络,因此它们可以相互通信。这些是不占用太多磁盘空间的配置文件。通过输入以下内容查看所有Docker网络:
docker network ls
可以输入以下内容来删除一个或多个未使用的网络:
docker network rm <name_or_id>
同样,可以在此命令中添加任意数量的以空格分隔的网络名称/ID。
数据卷处理
Docker数据卷是虚拟磁盘镜像。必须将其附加到正在运行的容器,以便它可以在两次重新启动之间保存文件或其他状态信息。卷的大小取决于使用它的应用程序,但是典型的数据库将需要数百兆的空间,即使它几乎是空的。
通过输入以下命令查看所有Docker管理的磁盘卷:
docker volume ls
删除Docker卷将永久擦除其数据!没有回头路了。
如果要开发数据库驱动的应用程序,通常可以保留一个或多个数据转储,这些数据转储可用于重新创建一组特定的记录。大多数数据库客户端工具都提供转储或导出功能,例如Adminer
大多数数据库系统将提供备份工具,例如MySQL中的mysqldump实用程序。可以使用docker exec命令在正在运行的容器上执行这些操作。
以下Linux / macOS命令可以备份mysql数据库
docker exec mysql /usr/bin/mysqldump -u root -pmysecret mydb \
> backup.sql
Windows PowerShell的等效命令:
docker exec mysql /usr/bin/mysqldump -u root -pmysecret -r mydb | \
Set-Content backup.sql
您还可以使用docker cp命令将数据文件复制到正在运行的容器中或从中复制数据文件。这是通过源路径和目标路径传递的,其中容器的名称/ ID后跟冒号及其路径来引用容器,例如
docker cp mycontainer:/some/file ./host/directory
假设您的数据是安全的,则可以通过输入以下内容来删除任何未使用的卷:
docker volume rm <name>
可以使用以下方法删除所有未使用的Docker卷-当前未连接到正在运行的容器的那些_卷:
docker volume prune
或者,docker volume prune -a将其全部删除。
全面清理
可以使用单个命令擦除每个未使用的容器,镜像,卷和网络:
docker system prune -a --volumes
如果要在没有确认提示的情况下强制擦除,请添加-f。您的系统将恢复到没有任何Docker数据的原始状态。