如何使Docker在持续集成中不使用磁盘空间

我正在和docker玩,并计划在GitLab CI环境中使用它来将当前的项目状态打包到容器,并提供运行的实例来做评论。

我使用了一个非常简单的Dockerfile,如下所示:

FROM php:7.0-apache RUN sed -i 's!/var/www/html!/var/www/html/public!g' /etc/apache2/sites-available/000-default.conf COPY . /var/www/html/ 

现在,只要我一个新的(空)文件( touch foobar )到当前目录并调用

 docker build -t test2 --rm . 

再次,一个完整的新图层被创build,包含所有的代码。

如果我不创build一个新的文件,旧的图像似乎很好地重用。

我有一个使用下面的Dockerfile的中途解决scheme:

 FROM test2:latest RUN sed -i 's!/var/www/html!/var/www/html/public!g' 

/etc/apache2/sites-available/000-default.conf COPY。 在/ var / www / html等/

深入挖掘这个问题 ,并将存储驱动程序切换到overlay ,这似乎是我想要的 – 只有几个字节被添加为一个新的层。

但是现在我想知道,我怎样才能把它集成到我的CI设置中 – 基本上我需要两个不同的Docker文件 – 取决于图像是否已经存在,或者不存在。

有没有更好的解决scheme呢?

使用相同的标签或无标签构build您的图像

 docker build -t myapp:ci-build .... 

要么

 docker build .... 

如果您使用相同的标签,那么旧图像将被标记为“”,并以“”作为名称。 如果你不标记他们,那么他们也会有名字。

现在你可以安排下面的命令

 docker system prune -f 

这将删除所有的晃动图像容器等

一个build议是使用命令docker image prune来清除悬挂的图像。 这可以为您节省很多空间。 您可以在CI中定期运行此命令。