docker-gc, 容器和图像的Docker 垃圾收集

分享于 

8分钟阅读

GitHub

  繁體 雙語
Docker garbage collection of containers and images
  • 源代码名称:docker-gc
  • 源代码网址:http://www.github.com/spotify/docker-gc
  • docker-gc源代码文档
  • docker-gc源代码下载
  • Git URL:
    git://www.github.com/spotify/docker-gc.git
    Git Clone代码到本地:
    git clone http://www.github.com/spotify/docker-gc
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/spotify/docker-gc
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    docker

    简单的Docker 容器和图像垃圾收集脚本。

    • 超过一个小时前退出的容器被删除。
    • 删除后不属于任何剩余容器的图像。

    虽然 Docker 通常防止删除容器使用的图像,但我们特别注意不要移除容器使用的任何图像标记。 天真 docker rmi $(docker images -q) 将图像删除所有标签,强制 Docker 重新启动新容器时,即使图像仍在磁盘上。

    这个脚本是作为一个 Docker 作业运行的,但是你也可以作为容器( 请参见下面的 。) 运行它。

    构建Debian软件包

    $ apt-get install git devscripts debhelper build-essential dh-make
    $ git clone https://github.com/spotify/docker-gc.git
    $ cd docker-gc
    $ debuild -us -uc -b

    如果在 debuild 中出现lintian错误,请尝试 debuild --no-lintian -us -uc -b

    安装Debian软件包

    $ dpkg -i.. /docker-gc_0.1.0_all.deb

    这将 docker-gc 脚本安装到 /usr/sbin。 如果希望它作为一个cron作业运行,现在可以通过创建具有以下内容的根拥有可执行文件 /etc/cron.hourly/docker-gc 来配置它:

    
    #!/bin/bash
    
    
    /usr/sbin/docker-gc
    
    
    
    

    要测试作业是否实际运行,可以使用以下命令

    
    run-parts --test/etc/cron.hourly
    
    
    
    

    手动使用

    要手动使用该脚本,请运行 docker-gcdocker-gc 运行的系统用户需要对 $STATE_DIR 环境变量有读写访问权限,默认为 /var/lib/docker-gc

    从垃圾收集中排除图像

    有些图像可以作为许多应用容器的常见基础,因这里有意义地引导到机器。 这可以节省大量图像的时间。 可能还有其他原因从垃圾收集中排除图像。 为这里,创建 /etc/docker-gc-exclude,或者如果希望从它的他地方读取文件,将 EXCLUDE_FROM_GC 环境变量设置为它的位置。 这个文件可以包含像 NAME 模式( 每行一行,比如 spotify/cassandra:latest,或者它可以包含图像 id ( 被截断为 docker images 中显示的长度),即1.

    示例图像排除文件可能包含:

    
    spotify/cassandra:latest
    
    
    redis:.*
    
    
    9681260c3ad5
    
    
    
    

    从垃圾回收中排除容器

    还可以有容器(。例如数据容器),你希望从垃圾回收中排除它。 为这里,创建 /etc/docker-gc-exclude-containers,或者如果希望从它的他地方读取文件,将 EXCLUDE_CONTAINERS_FROM_GC 环境变量设置为它的位置。 这里文件应容器 NAME 模式( 在 grep的意义),每行一个,如 mariadb-data

    一个示例容器排除文件可能包含:

    
    mariadb-data
    
    
    drunk_goodall
    
    
    
    

    强制删除具有多个标记的图像

    默认情况下,如果 Docker 在多个存储库中被标记,它将不会删除图像。 如果有一个服务器运行 Docker,例如在构建dockers的环境中,可以启用强制标志。

    
    FORCE_IMAGE_REMOVAL=1 docker-gc
    
    
    
    

    为每个存储库保留最小数量的图像

    你可能希望始终为任何存储库保留一组最新的图像。 例如如果在开发期间不断重建图像,你将希望清除除最近版本的图像之外的所有内容。 为此,请设置 MINIMUM_IMAGES_TO_SAVE=1 环境变量。 你可以保留最近的图像的任何计数,比如 将最近的10保存为 MINIMUM_IMAGES_TO_SAVE=10

    强制删除容器

    如果在清理容器时遇到错误,Docker 将报告错误并将它的保留在磁盘上。 这有时会导致容器积累。 如果进入这里问题,可以通过设置下面的环境变量强制删除容器:

    
    FORCE_CONTAINER_REMOVAL=1 docker-gc
    
    
    
    

    从垃圾收集中排除最近退出的容器和图像

    在默认情况下,如果docker在秒之前退出,那么它将不会移除容器。 在某些情况下,可能需要更改这里设置( 比如。 你需要退出容器,以便在几天内进行调试:。 将 GRACE_PERIOD_SECONDS 变量设置为重写这里默认值。

    
    GRACE_PERIOD_SECONDS=86400 docker-gc
    
    
    
    

    这里设置还防止删除小于 GRACE_PERIOD_SECONDS 秒以前创建的图像。

    运行

    默认情况下,docker-gc将继续删除容器和图像。 若要测试命令行选项,请将 DRY_RUN 变量设置为重写这里默认值。

    
    DRY_RUN=1 docker-gc
    
    
    
    

    作为 Docker 映像运行

    Dockerfile作为本地安装的替代项提供。 默认情况下,容器将启动,运行单个垃圾收集,并关闭。

    图像以 spotify/docker-gc 格式发布。

    构建 Docker 映像

    当前使用 Docker 构建映像,但是在更新的Docker 版本( 要确保命令行接口 MATCHES 与 Docker 守护进程的API版本) 中,只需在构建步骤之前的Dockerfile 中编辑 ENV DOCKER_VERSION 行,就可以了。

    创建 Docker 映像 make -f Makefile.docker image 或者:

    docker build -t spotify/docker-gc .
    作为 Docker 容器运行

    为了运行,docker-gc容器需要访问 Docker 插座,因此在运行时需要映射它,e.g.:

    $ docker run --rm -v/var/run/docker.sock:/var/run/docker.sock -v/etc:/etc:ro spotify/docker-gc

    还映射 /etc 目录,以便它可以读取你已经创建的任何排除文件。

    在配置 Docker 守护进程时,你需要使用用户命名空间禁用该容器,这将需要运行该容器:

    $ docker run --rm --userns host -v/var/run/docker.sock:/var/run/docker.sock -v/etc:/etc spotify/docker-gc

    图像  COL  DOC  Collect  collection  images  
    相关文章