如何使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中定期运行此命令。