2017-08-27 20 views
1

我正在玩docker并计划在GitLab CI环境中使用它来将当前项目状态打包到容器并提供正在运行的实例以进行评论。我如何让Docker在持续集成中不使用磁盘空间

我用一个很简单的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 . 

,会创建一个全新的图层,其中包含所有的代码。

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

我有使用以下Dockerfile中途的解决方案:

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/

挖掘到that issue并将存储驱动程序切换为overlay后,这似乎是我想要的 - 只有几个字节被添加为新层。

但现在我想知道,我如何能够将它集成到我的CI设置 - 基本上我需要两个不同的Dockerfiles - 取决于图像是否已经存在或它不。

有没有更好的解决方案呢?

回答

1

具有相同的标签或不带标签

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

docker build .... 

如果使用相同的标记,然后旧的图像将未标记,将有“”作为名称创建您的图像。如果你不标记他们,那么他们也会有名字。现在

你可以安排如下命令

docker system prune -f 

这将删除所有图像悬挂容器等

1

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