前言

Docker 类似于虚拟机,它可以轻松安装应用程序和关联包,因此我们可以在任何地方运行它。但当我们使用 Docker 时,也很容易累积过多的无用镜像,容器和卷。他们非常占用空间和资源。

清除所有未使用或未挂载的镜像,容器,卷和网络配置

Docker 提供了一个命令,该命令将清除未挂载(不与容器关联)的所有资源(镜像,容器,卷和网络):

docker system prune

返回内容:

WARNING! This will remove:
  - all stopped containers   # 停止的容器
  - all networks not used by at least one container    # 未使用的网络
  - all dangling images      # 未挂载的镜像
  - all dangling build cache # 镜像缓存

Are you sure you want to continue? [y/N]

风险:删除所有停止的容器和所有未使用的镜像(不仅仅是未挂载的镜像),添加命令参数-a

docker system prune -a  # 这也会删除与正在运行的容器没有关联的任何镜像。这可能有点极端,但Docker会重新下载它需要的任何镜像。

删除 Docker 镜像

删除一个或多个指定镜像

# 查看列表
docker images -a    # 以找到所有的镜像 ID
# 执行删除
docker rmi image_id  # 使用名称来删除指定镜像。

注意:如果一个镜像是另一个镜像的引用镜像,它是无法被删除的。

删除虚悬镜像(dangling image)**

Docker 镜像由多层组成。有些镜像被命名为 <none> ,这些镜像是被新镜像覆盖后,老版本镜像会变成 <none> 。这些镜像被称之为虚悬镜像。这些镜像已经没有任何用处且占用磁盘空间。我们可以通过在命令中添加参数-f 来定位它们。确定要删除它们时,可以使用以下命令:

# 列出dangling镜像
docker images -f "dangling=true"
# 删除dangling镜像
docker image prune

注意: 如果你创建的镜像没有tag,那么这个镜像也会出现在虚悬镜像列表中。要避免这种情况发生,我们可以在创建镜像时,给他们添加上 tag ,之后也可以通过 docker tag 来查找这些镜像

根据模式删除镜像

我们可以通过grep来按需查找到我们需要删除的镜像文件,可以查找某一类属性的镜像文件。然后我们可以通过使用awk将ID传递给docker rmi来删除它们。具体可以看接下来的实例。

# 查看名字包含“pattern”的镜像列表
docker images -a |  grep "pattern"
# 执行删除
docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi

删除所有镜像

我们用docker images -a命令来查看所有镜像。确定要全部删除后,我们添加参数-q

把需要删除的镜像ID传给docker rmi

# 查看列表
docker images -a
# 执行删除
docker rmi $(docker images -a -q)

Docker删除容器

删除一个或多个指定容器

使用docker ps -a命令来查找要删除的容器名或ID:

# 查看列表
docker ps -a
# 执行删除
docker rm ID_or_Name

退出时删除容器

如果我们在创建容器时就知道用完后不用保留这个容器,那么我们可以在运行这个容器时,添加参数rm。docker run --rm,这样在执行完成时,此容器会被自动删除。

docker run --rm image_name    # 以这种方式运行容器

删除所有退出的容器

我们可以通过docker ps -a轻松查找并通过容器当前状态进行筛选:创建、重启、运行、暂停、退出。如果我们要查看已退出的容器列表,我们可以添加参数-f来查看,删除时用-q传递给删除命令docker rm

# 查看所有退出的容器列表
docker ps -a -f status=exited
# 执行删除
docker rm $(docker ps -a -f status=exited -q)

删除筛选出的容器

我们可以通过 Docker ps的参数赋值来进行“或”的查询和删除。只要满足任意条件,删除命令即会把它们删除掉。例如,我们想要删除容器被标记为 Created (使用无效命令运行容器时,可能导致的状态)或者 Exited 的容器,我们则可以使用两个过滤器:

查看列表:

# 查看列表
docker ps -a -f status=exited -f status=created
# 删除容器
docker rm $(docker ps -a -f status=exited -f status=created -q)

根据模式删除容器

我们可以通过grep来按需查找到我们需要删除的容器,可以查找某一类属性的容器。然后我们可以通过使用awk将ID传递给docker rmi来删除它们。

查看列表:

# 查看列表
docker ps -a |  grep "pattern”
# 执行删除
docker ps -a | grep "pattern" | awk '{print $3}' | xargs docker rmi
# 或者执行
sudo docker rm `docker ps -a|grep ‘pattern’|awk '{print $1}'`

停止并删除所有容器

我们可以使用docker ps -a命令来查看所有容器。确定要删除这个列表中的全部容器后,我们在命令结尾添加参数-q 然后传给docker stop 和 docker rm命令即可

# 查看列表
docker ps -a
# 停止命令
docker stop $(docker ps -a -q)
# 删除命令
docker rm $(docker ps -a -q)

Docker删除卷

删除一个或多个指定的卷

使用docker volume ls命令找到要删除的卷名。然后,我们可以用docker volume rm命令删除一个或多个卷:

# 查看列表
docker volume ls
# 删除操作
docker volume rm volume_name

删除虚悬卷(dangling volumes)

由于卷的位置要独立于容器而存在,因此在删除容器时,不会同时自动删除卷。当一个卷存在并且不再连接到任何容器时,称为虚悬卷(dangling volumes) ****。要找到它们并删除可以用docker volume ls命令加上过滤器即可。确定列表中都是想要删除的卷后,我们可以使用docker volume prune命令将它们全部删除:

# 查询列表
docker volume ls -f dangling=true
# 执行删除
docker volume prune

移除容器及对应的卷

我们可以使用docker rm -v删除指定容器并同时删除为此容器分配的卷。在执行删除命令后,当容器已经成功删除时,会显示此容器的 ID。另外要注意的是,此命令只会删除容器和此容器对应的未命名卷。如果卷被命名了,它不会被此命令删除,仍然会保留在系统中。

# 执行删除
docker rm -v container_name
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐