Docker:删除所有镜像和容器
问题:
你使用 Docker,但使用它创建了许多镜像和容器。你想删除所有这些以节省磁盘空间。
解决方案
警告:这将销毁所有你的镜像和容器。无法恢复它们!
在 shell 中运行这些命令:
docker_remove_all_images_containers.sh
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)此解决方案由 GitHub 用户 @crosbymichael 在此问题中提出
如果你想删除甚至仓库中引用的镜像,使用
docker_force_remove_images.sh
docker rmi $(docker images -q) --force背景信息:
你可以使用以下命令查看计算机上的容器
docker_container_ls.sh
docker container ls示例输出:
docker_container_ls.txt
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3477a4dcdce2 docker.elastic.co/elasticsearch/elasticsearch-oss:6.7.1 "/usr/local/bin/dock…" 2 days ago Up 2 days 0.0.0.0:9200->9200/tcp, 9300/tcp elasticsearch1
67997f002f15 appbaseio/dejavu "http-server '-p 135…" 2 days ago Up 2 days 0.0.0.0:1358->1358/tcp dejavu如我们所见,此计算机上当前运行着两个容器。
对于每个容器,IMAGE 列显示容器正在运行哪个镜像。例如,第二个容器正在 appbaseio/dejavu 镜像上运行。
当我们告诉 docker 显示计算机上当前列出的所有镜像时:
docker_image_ls.txt
$ docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 39ac507bd271 11 days ago 962MB
<none> <none> 6a2c829a5d4f 11 days ago 962MB
docker.elastic.co/elasticsearch/elasticsearch-oss 6.7.1 c91b419ac445 3 weeks ago 682MB
pypy 3 75e018538e96 4 weeks ago 962MB
node 10 64c810caf95a 4 weeks ago 899MB
appbaseio/dejavu latest 47b8375dc541 2 months ago 141MB
risingstack/alpine 3.4-v4.4.4-3.6.1 2d384efd00ab 2 years ago 247MB我们可以立即看到镜像比容器多得多
有四个主要原因:
- Docker 保留容器的旧版本,它们不会自动删除。在此示例中,
docker.elastic.co/elasticsearch/elasticsearch-oss有两个版本:版本6.7.1和版本7.0.0,即使我目前只使用版本6.7.1。根据列表,版本7.0.0在我的 SSD 上占用额外 682 兆字节空间,但请注意此数字可能不准确(参见下文分层镜像) - Docker 不会自动删除你不再使用的镜像(例如,如果你只是快速测试使用了一个镜像但不再使用它)
- Docker 使用分层镜像。这意味着像
appbaseio/dejavu这样的镜像不是独立的,而是(通常)基于某些底层镜像如ubuntu或debian。在大多数情况下,由于构建方式,镜像有许多层(通常约 5-10 层)。虽然这导致消耗的磁盘空间更少,因为某些镜像被多个"子"镜像使用,但这仍然导致驱动器上有大量镜像,通常包括未使用的中间镜像。 - 如果你自己构建 docker 镜像,特别是在创建自己的 Dockerfile 时,开发过程中通常会生成大量镜像(代表你正在开发的软件的中间版本)
为了删除你不再需要的镜像,使用 docker image rm <镜像 ID> 命令。从上面显示的 docker image ls 输出的 IMAGE ID 列复制镜像 ID。
例如,为了删除 elasticsearch 的版本 7.0.0 镜像,使用
docker_remove_specific_image.sh
$ docker image rm 0e92b9e5fe1e
Untagged: docker.elastic.co/elasticsearch/elasticsearch-oss:7.0.0
Untagged: docker.elastic.co/elasticsearch/elasticsearch-oss@sha256:e9ab1f4c2ffbc7054dab91e8dc7fd9a56d53cce734098910d876eb14849b1ba3
Deleted: sha256:0e92b9e5fe1e0949f5174ed86d9cbc3c2a041df493453f82b6c044ff78c7d17b
Deleted: sha256:c2a552806b86aba72a6e6ea5efaaa295286e8b0cf42a14d799428e58f20e7090
Deleted: sha256:71e7a706f7c03f0c7add24844f7b311edf83838ef383a877bcb94684b011893d
Deleted: sha256:d43e5d351c26273e43b11f6937cb9a3192d856b4e083acfbc14b8500056221f2
Deleted: sha256:f3a2ae77ca96f2f55300b00beedbf14ade0a27bf29c395dcbf84b5bf02ef80ad
Deleted: sha256:5d7f2d83e59c0684b4a94ab5f6479d798444bdca8fe6c813f7ef6188cdd12ce5
Deleted: sha256:cc16decd0c6f218c3a21749e747d43deced9e8929e8db0b6050dd4102301651a从输出中可以看到,这不仅会删除 ElasticSearch 镜像 0e92b9e5fe1e 本身,还会删除该镜像依赖的所有其他镜像(这些镜像不被任何其他镜像使用)。
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow