docker资源清理释放磁盘空间教程

简介
  • 使用docker一时爽,一直使用一直爽,直到我把所有用到的服务全部容器化后,一天天过去了,发现docker占用了不少机器资源,而且单机上镜像、容器数量过多后,导致docker的性能也出现了问题,时不时会发现一些服务假死、或者docker命令卡死的现象,而且能明显感受到服务器的磁盘空间一点点被消耗殆净,本文将教会大家如何为你的docker服务器瘦身!

本文内容有

  • 查看docker服务详细信息和当前资源使用情况
  • 查看过时或无效的images和container
  • 查看docker服务状态和资源使用情况
  • 查看无效的网络和磁盘挂载记录
  • 手动清理磁盘、网络、镜像、容器服务
  • 一件清理无用资源信息
  • 更多docker资料
参考文章

1、查看docker服务详细信息和当前资源使用情况
1.1 docker system info 命令

用于查看docker环境的自身和所有容器资源的概览情况,主要有:

  • Containers 容器信息

    Containers: 4
      Running: 0
      Paused: 0
      Stopped: 4
    
  • Images 镜像信息

    Images: 16
    
  • Server Version docker服务版本号

    Server Version: 19.03.6
    
  • Storage Driver 磁盘存储器类型

      Storage Driver: overlay2
      Backing Filesystem: xfs
      Supports d_type: true
      Native Overlay Diff: true
    
  • Logging Driver 日志输出驱动类型

    Logging Driver: json-file
    
  • Cgroup Driver linux虚拟环境驱动器类型

    Cgroup Driver: cgroupfs
    
  • Plugins 插件类型

    Plugins:
      Volume: local
      Network: bridge host ipvlan macvlan null overlay
      Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
    
  • Swarm 集群状态

    Swarm: error
      NodeID: 
      Error: error while loading TLS certificate in /var/lib/docker/swarm/certificates/swarm-node.crt: certificate (1 - 9tbves7p6qvxzxhnat0upm3hu) not valid after Thu, 30 Jul 2020 07:45:00 UTC, and it is currently Sun, 09 Aug 2020 10:07:06 BST: x509: certificate has expired or is not yet valid
      Is Manager: false
      Node Address: 192.168.56.23
    
  • Security Options 安全策略

    Security Options:
      seccomp
       Profile: default
    
  • Kernel Version 内核版本

    Kernel Version: 3.10.0-1062.el7.x86_64
    
  • Operating System 操作系统类型和版本信息

    Operating System: CentOS Linux 7 (Core)
    
  • OSType 操作系统类型

    OSType: linux
    
  • Architecture CPU架构类型

    Architecture: x86_64
    
  • CPU和内存信息

     Name: localhost     #服务器hostname
     CPUs: 1
     Total Memory: 1.795GiB
    
  • docker本地环境信息

     ID: MWHK:VVUI:D46J:QTR2:BES6:XQ5V:NKJA:KUG3:BRCU:CU66:OF6W:CLAE
     Docker Root Dir: /var/lib/docker    #docker默认存储路径
     Debug Mode: false
     Labels:
     Experimental: false
     Live Restore Enabled: false
    
  • Registry 远程镜像仓库地址

    Registry: https://index.docker.io/v1/
    
  • Registry Mirrors 代理镜像仓库地址

    Registry Mirrors:
      https://dg40rhyf.mirror.aliyuncs.com/    #我额外配置的阿里云镜像加速地址
    
  • 配置非https环境的镜像仓库地址

    Insecure Registries:
      192.168.56.22:5000     #我的本地docker私服地址,非https
      127.0.0.0/8            #本机本地默认仓库也是非https的,docker自动添加的,无需额外配置
    
  • 其他信息

     Runtimes: runc
     Default Runtime: runc
     Init Binary: docker-init
     containerd version: b34a5c8af56e510852c35414db4c1f4fa6172339
     runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
     init version: fec3683
    
1.2 docker system df 命令

用于查看docker各种资源的磁盘空间和使用情况

  • Images 镜像空间使用情况

  • Containers 容器空间使用情况

  • Local Volumes 磁盘挂载情况

  • Build Cache 构建缓存占用空间情况

    TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
    Images              16                  1                   5.301GB             5.174GB (97%)
    Containers          4                   0                   0B                  0B
    Local Volumes       10                  0                   18.27MB             18.27MB (100%)
    Build Cache         0                   0                   0B                  0B
    
1.3 docker system events 命令

该命令用于监听docker的事件行为信息,并打印到控制台。

常用的事件如:容器创建、启动、重启等等事件

容器

Docker containers 容器的相关操作会产生如下事件:

  • attach
  • commit
  • copy
  • create
  • destroy
  • detach
  • die
  • exec_create
  • exec_detach
  • exec_start
  • export
  • health_status
  • kill
  • oom
  • pause
  • rename
  • resize
  • restart
  • start
  • stop
  • top
  • unpause
  • update
镜像

Docker images 镜像的相关操作会产生如下事件:

  • delete
  • import
  • load
  • pull
  • push
  • save
  • tag
  • untag
插件

Docker plugins 插件的相关操作会产生如下事件:

  • install
  • enable
  • disable
  • remove
磁盘挂载

Docker volumes 磁盘挂载的相关操作会产生如下事件:

  • create
  • mount
  • unmount
  • destroy
网络

Docker networks 网络管理的相关操作会产生如下事件:

  • create
  • connect
  • disconnect
  • destroy
DAEMONS

Docker daemons 的相关操作会产生如下事件::

  • reload
2、查看过时或未用到的image和container
2.1 查找镜像
  • 查找未使用的镜像

    docker images -f "dangling=true"

  • 使用关键字查找镜像

    docker images | grep nginx

2.2 查找容器
  • 查找所有停止的容器

    docker ps -a|grep Exiteddocker ps -f status=exited

  • 按关键字查找容器(默认为正在运行的)

    docker ps |grep nginx

    或者

    docker ps -f "name=nginx"

  • 按关键字查找容器(所有的)

    docker ps -a |grep nginx

3、查看docker服务运行状态和资源使用情况
  • 实时查看容器日志观察服务运行状态

    #查看最后100行日志,并且一直输出最新的日志
    docker logs nginx --tail 100 -f
    
  • 查看容器端口绑定和端口监听情况

    docker port jenkins
    #########结果如下#########
    50000/tcp -> 0.0.0.0:50000
    8080/tcp -> 0.0.0.0:8082
    
    #查看端口监听
    netstat -nlp |grep 8082
    #########结果如下#########
    tcp6       0      0 :::8082                 :::*                    LISTEN      2295/docker-proxy
    
  • 查看所有或者指定容器运行状态

    #查看所有容器状态
    docker ps -a
    #查看非停止状态的所有容器状态
    docker ps
    #查看最近创建的容器
    docker ps -l
    #查看最近创建的前3个容器状态
    docker ps -n 3
    
  • 查看所有或者指定容器资源使用情况

    #查看所有容器资源使用情况
    docker stats 
    #查看某个容器资源占用情况
    docker stats |grep nginx
    ######################结果如下#######################
    CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
    8cb87b0e93a7        sonarqube           1.97%               1.439GiB / 8.184GiB   17.58%              768B / 0B           393MB / 2.89MB      139
    84591fc109c8        gogs                0.03%               36.95MiB / 8.184GiB   0.44%               225kB / 132kB       83MB / 42kB         13
    58daee0f04c1        rabbitmq            2.63%               90.13MiB / 8.184GiB   1.08%               19.9kB / 0B         97.9MB / 350kB      86
    3562e34b6b2f        mongo-express       0.00%               268KiB / 8.184GiB     0.00%               1.04kB / 746B       0B / 0B             2
    7354756e6adc        mysql-adminer       0.00%               5.254MiB / 8.184GiB   0.06%               19.9kB / 0B         44.8MB / 0B         1
    b32ade9a7956        mysql               0.10%               96.14MiB / 8.184GiB   1.15%               132kB / 190kB       118MB / 4.72MB      31
    6ac0623072c6        elk                 3.84%               2.36GiB / 8.184GiB    28.84%              20.3kB / 454B       565MB / 119kB       109
    889ecfb781eb        portainer           0.02%               11.44MiB / 8.184GiB   0.14%               3.69MB / 321kB      46.2MB / 49.8MB     6
    f529906fbb00        nexus               1.31%               1.197GiB / 8.184GiB   14.62%              838B / 0B           488MB / 48.2MB      92
    cdb3f43a3ca7        jenkins             0.90%               360.8MiB / 8.184GiB   4.30%               4.62MB / 1.25MB     542MB / 5.06MB      42
    
  • 查看容器内服务资源使用情况

    docker top CONTAINER [ps OPTIONS]
    #相当于你在linux上输入top命令一样的效果
    #示例如下
    docker top nginx
    
    #也可以进入容器进行操作
    docker exec -it nginx /bin/bash
    $> top
    
4、 查看无效的网络和磁盘挂载记录
4.1 查看网络和管理容器的网络连接信息
  • 查看所有网络信息

    docker network ls 
    ######################结果如下#######################
    NETWORK ID          NAME                DRIVER              SCOPE
    559bb5e88ed5        bridge              bridge              local
    3826bf3eb4cf        deploy_default      bridge              local
    8d6614a5e69c        docker_gwbridge     bridge              local
    6f5f70c61512        host                host                local
    86586e8a770c        none                null                local
    

    具体的自定义网络创建和使用可以参考Docker swarm容器集群使用总结

    #查看指定网络状态
    docker network ls |grep custom_network_name
    
  • docker容器连接到网络

    docker network connect [OPTIONS] NETWORK CONTAINER
    #container1连接到跨主机的网络multi-host-network
    docker network connect multi-host-network container1
    #连接时指定ip
    docker network connect --ip 10.10.36.122 multi-host-network container2
    
  • docker容器断开网络连接

    docker network disconnect [OPTIONS] NETWORK CONTAINER
    #容器断开网络连接
    docker network disconnect multi-host-network container1
    
4.2 查看磁盘挂载信息
  • 查看磁盘挂载信息
docker volume ls
######################结果如下#######################
DRIVER              VOLUME NAME
local               0af6c4ab0cb3881825b5dc59610c89fc4e729250fe7d2ca9863cd3f1cce3b954
local               0df967f4101a226205161c778ef0c74b478e43bac3a338ed3d4285faf64017b0
local               2acc4034389df18f77c47c4e4e6797cef05267790443b4df502a87088462f2d9
local               4b809dffe37b7911fad4e2e69b9fed25c49a4c8fc3ae93520e234452091e5f0e
  • 创建或删除磁盘挂载信息
#创建磁盘
docker volume create hello
#挂载磁盘到容器中的/world目录
docker run -d -v hello:/world busybox ls /world
#删除磁盘挂载
docker volume rm hello
  • 查看容器磁盘挂载情况

    docker inspect --format="{{.Mounts}}" mysql
     ######################结果如下#######################
     [{bind  /data/workspace/service/mysql/conf.d /etc/mysql/conf.d  rw true rprivate} {bind  /data/workspace/service/mysql/my.cnf /etc/mysql/my.cnf  rw true rprivate} {bind  /data/workspace/service/mysql/data /var/lib/mysql  rw true rprivate}]
    

    或者

    docker inspect mysql | grep Mounts -A 30 # -A 参数接的数字为需要显示信息的行数
     ######################结果如下#######################
     "Mounts": [
                {
                    "Type": "bind",
                    "Source": "/data/workspace/service/mysql/my.cnf",
                    "Destination": "/etc/mysql/my.cnf",
                    "Mode": "rw",
                    "RW": true,
                    "Propagation": "rprivate"
                },
                {
                    "Type": "bind",
                    "Source": "/data/workspace/service/mysql/data",
                    "Destination": "/var/lib/mysql",
                    "Mode": "rw",
                    "RW": true,
                    "Propagation": "rprivate"
                },
                {
                    "Type": "bind",
                    "Source": "/data/workspace/service/mysql/conf.d",
                    "Destination": "/etc/mysql/conf.d",
                    "Mode": "rw",
                    "RW": true,
                    "Propagation": "rprivate"
                }
            ],
            "Config": {
                "Hostname": "b32ade9a7956",
                "Domainname": "",
                "User": "",
                "AttachStdin": false,
    
5、手动清理磁盘、网络、镜像、容器服务
5.1 查找并删除镜像
  • 删除悬空的镜像

    #查找并删除
    docker rmi -f `docker images -qf "dangling=true"`
    #直接使用系统命令进行删除
    docker image prune
    
  • 删除满足关键字的镜像

    docker rmi -f `docker images | grep nginx | awk '{print $3}'`
    
5.2 查找并删除容器
  • 删除所有停止的容器
docker rm `docker ps -f status=exited`
#或者
docker rm `docker ps -a|grep Exited | awk '{print $1}'`
  • 删除关键字匹配的容器
#先停止容器
docker stop `docker ps -aqf "name=nginx"`
#再删除
docker rm `docker ps -aqf "name=nginx"`

#或者
docker stop `docker ps -a |grep nginx | awk '{print $1}'`
docker rm `docker ps -a |grep nginx | awk '{print $1}'`
5.3 查找并删除磁盘挂载
  • 删除磁盘挂载

    #通过docker inpect container |grep Network 找到挂载的磁盘ID xxxx
    docker volume rm xxxx
    
5.4 查找并删除网络连接信息
  • 查找并删除网络连接

    #容器断开网络连接
     docker network disconnect multi-host-network container1
    
6、一键清理无用资源信息

清理无用的镜像,状态为dangling(悬空的,也就是没有人使用,而且没有TAG,一般在多次构建镜像后,之前的镜像会成为这种状态)的镜像

docker image prune

清理所有未使用的镜像

docker image prune -a

清理无用的容器

docker container prune

清理不用的数据卷
docker volume prune

清理无用的网络链接

docker network prune

一键清理停掉的container、悬挂的image(没有tag)、没有使用的network、数据卷
docker system prune

7、更多docker资料
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值