Docker删除镜像和容器

当一个host中镜像和容器较多,需要重置时可选择删除其中部分或全部的镜像和容器。那么你就需要下面的操作了。

1、删除容器

1)首先需要停止所有的容器

docker stop $(docker ps -a -q)

2)删除所有的容器(只删除单个时把后面的变量改为image id即可)

docker rm $(docker ps -a -q)

2、删除镜像

1)查看host中的镜像

docker images

2)删除指定id的镜像

docker rmi <image id>

想要删除untagged images,也就是那些id为的image的话可以用

docker rmi $(docker images | grep "^" | awk "{print $3}")

3)删除全部的images

docker rmi $(docker images -q)

3、当要删除的images和其他的镜像有关联而无法删除时
Docker删除镜像和容器
可通过 -f 参数强制删除

docker rmi -f $(docker images -q)

Docker删除容器再删除镜像

1. 查询镜像

docker images

Docker删除镜像和容器

现在想删除第一个,ID为 99f85991949f 的镜像。

docker rmi  ID

Docker删除镜像和容器

从上面看出,需要先停到ID为 67*** 的容器。

2. 查询容器

docker ps -a

3. 先删除容器

docker rm ID

Docker删除镜像和容器
上面可以看出,容器已经删除。

4. 删除镜像

Docker删除镜像和容器

二、卸载

列出你安装过的包

$ yum list installed | grep docker
docker-engine.x86_64
1.7.1-1.el7 @/docker-engine-1.7.1-1.el7.x86_64.rpm

删除安装包

$ sudo yum -y remove docker-engine.x86_64

删除镜像/容器等

$ rm -rf /var/lib/docker

查看docker文件

find / -name docker

Docker常见命令

  1. 容器生命周期管理
    • docker run :创建一个新的容器并运行一个命令
      • 语法: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
      • OPTIONS说明:
        • -d: 后台运行容器,并返回容器ID;
        • -i: 以交互模式运行容器,通常与 -t 同时使用;
        • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
        • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口;
        • --name="nginx-lb": 为容器指定一个名称;
        • -m :设置容器使用内存最大值;
        • --volume , -v: 绑定一个卷
        • --rm: 容器退出后随之将其删除;默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动docker rm。这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用--rm可以避免浪费空间;
      • 实例:
        • docker run -it --rm ubuntu:16.04 bash
    • start/stop/restart 命令
      • docker start 容器名或者容器ID
      • docker stop 容器名或者容器ID
      • docker restart 容器名或者容器ID
    • docker rm: 删除一个或多个容器
      • docker rm 容器名或者容器ID
    • docker exec: 在运行的容器中执行命令
      • 语法: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
      • OPTIONS说明:
        • -d: 分离模式: 在后台运行
        • -i: 即使没有附加也保持STDIN 打开
        • -t: 分配一个伪终端
  2. 容器操作
    • docker ps: 列出容器
      • 语法: docker ps [OPTIONS]
      • OPTIONS说明:
        • -a: 显示所有的容器,包括未运行的;
    • docker logs: 获取容器的日志
      • 语法: docker logs [OPTIONS] CONTAINER
      • OPTIONS说明:
        • -f: 跟踪日志输出
        • --tail: 仅列出最新N条容器日志
  3. 镜像仓库
    • docker pull: 从镜像仓库中拉取或者更新指定镜像
      • 语法: docker pull NAME[:TAG]
      • 实例:
        • docker pull tomcat
        • docker pull tomcat:jre-9
    • docker images: 列出本地镜像
      • 语法: docker images [OPTIONS] [REPOSITORY[:TAG]]
      • 实例:
        • docker images
    • docker rmi || docker image rm : 删除本地一个或多个镜像
      • 语法: docker rmi [OPTIONS] IMAGE [IMAGE...]
      • OPTIONS说明:
        • -f: 强制删除
        • -no-prune: 不移除该镜像的过程镜像,默认移除
    • docker save: 将指定镜像保存成 tar 归档文件
      • 语法: docker save [OPTIONS] IMAGE [IMAGE...]
      • OPTIONS 说明:
        • -o: 输出到的文件
    • docker build: 构建镜像
      • 语法: docker build -t name:tag
    • docker image prune: 删除虚悬镜像

Docker清理

Docker的镜像(image)、容器(container)、数据卷(volume), 都是由daemon托管的。 因此,在需要清理时,也需要使用其自带的手段。

本文介绍一些Docker的清理技巧,以及它们的来源。

清理技巧

清理所有停止运行的容器:

docker container prune
# or
docker rm $(docker ps -aq)

清理所有悬挂(<none>)镜像:

docker image prune
# or
docker rmi $(docker images -qf "dangling=true")

清理所有无用数据卷:

docker volume prune

清理停止的容器

docker rm -lv CONTAINER

-l是清理linkv是清理volume。 这里的CONTAINER是容器的nameID,可以是一个或多个。

参数列表:

Name, shorthand Default Description
–force, -f false Force the removal of a running container (uses SIGKILL)
–link, -l false Remove the specified link
–volumes, -v false Remove the volumes associated with the container

清理所有停止的容器

通过docker ps可以查询当前运行的容器信息。 而通过docker ps -a,可以查询所有的容器信息,包括已停止的。

在需要清理所有已停止的容器时,通常利用shell的特性,组合一下就好。

docker rm $(docker ps -aq)

其中,ps-q,是只输出容器ID,方便作为参数让rm使用。 假如给rm指定-f,则可以清理所有容器,包括正在运行的。

这条组合命令,等价于另一条命令:

docker container prune

container子命令,下面包含了所有和容器相关的子命令。 包括docker ps,等价于docker container psdocker container ls。 其余还有startstopkillcp等,一级子命令相当于二级子命令在外面的alias。 而prune则是特别提供的清理命令,这在其它的管理命令里还可以看到,比如imagevolume

按需批量清理容器

清除所有已停止的容器,是比较常用的清理。 但有时会需要做一些特殊过滤。

这时就需要使用docker ps --filter

比如,显示所有返回值为0,即正常退出的容器:

docker ps -a --filter 'exited=0'

同理,可以得到其它非正常退出的容器。

目前支持的过滤器有:

  • id (container’s id)
  • label (label=<key> or label=<key>=<value>)
  • name (container’s name)
  • exited (int - the code of exited containers. Only useful with –all)
  • status (created|restarting|running|removing|paused|exited|dead)
  • ancestor (<image-name>[:<tag>], <image id> or <image@digest>) - filters containers that were created from the given image or a descendant.
  • before (container’s id or name) - filters containers created before given id or name
  • since (container’s id or name) - filters containers created since given id or name
  • isolation (default|process|hyperv) (Windows daemon only)
  • volume (volume name or mount point) - filters containers that mount volumes.
  • network (network id or name) - filters containers connected to the provided network
  • health (starting|healthy|unhealthy|none) - filters containers based on healthcheck status

清理失败

如果在清理容器时发生失败,通过重启DockerDaemon,应该都能解决问题。

# systemd
sudo systemctl restart docker.service
# initd
sudo service docker restart

清理镜像

与清理容器的psrm类似,清理镜像也有imagesrmi两个子命令。 images用来查看,rmi用来删除。

清理镜像前,应该确保该镜像的容器,已经被清除。

docker rmi IMAGE

其中,IMAGE可以是nameID。 如果是name,不加TAG可以删除所有TAG

另外,这两个命令也都属于alias。 docker images等价于docker image ls,而docker rmi等价于docker image rm

按需批量清理镜像

ps类似,images也支持--filter参数。

与清理相关,最常用的,当属<none>了。

docker images --filter "dangling=true"

这条命令,可以列出所有悬挂(dangling)的镜像,也就是显示为<none>的那些。

docker rmi $(docker images -qf "dangling=true")

这条组合命令,如果不写入Bash的alias,几乎无法使用。 不过还有一条等价命令,非常容易使用。

docker image prune

pruneimages类似,也同样支持--filter参数。 其它的filter有:

  • dangling (boolean - true or false)
  • label (label=<key> or label=<key>=<value>)
  • before (<image-name>[:<tag>], <image id> or <image@digest>) - filter images created before given id or references
  • since (<image-name>[:<tag>], <image id> or <image@digest>) - filter images created since given id or references
  • reference (pattern of an image reference) - filter images whose reference matches the specified pattern

清理所有无用镜像

这招要慎用,否则需要重新下载。

docker image prune -a

清理数据卷

数据卷不如容器或镜像那样显眼,但占的硬盘却可大可小。

数据卷的相关命令,都在docker volume中了。

一般用docker volume ls来查看,用docker volume rm VOLUME来删除一个或多个。

不过,绝大多数情况下,不需要执行这两个命令的组合。 直接执行docker volume prune就好,即可删除所有无用卷。

从文件系统删除

除配置文件以为,Docker的内容相关文件,基本都放在/var/lib/docker/目录下。

该目录下有下列子目录,基本可以猜测出用途:

  • aufs
  • containers
  • image
  • network
  • plugins
  • swarm
  • tmp
  • trust
  • volumes

一般不推荐直接操作这些目录,除非一些极特殊情况。 操作不当,后果难料,需要慎重。

上一篇:java生成二维码


下一篇:nginx搭建图片服务器