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 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 本身,还会删除该镜像依赖的所有其他镜像(这些镜像不被任何其他镜像使用)。


Check out similar posts by category: Container, Docker