我正在使用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 .
再次创建一个包含所有代码的全新图层。
如果我不创建新文件,旧图像似乎可以很好地重复使用。
使用以下Dockerfile
我有一个中途解决方案:
FROM test2:latest
RUN sed -i 's!/var/www/html!/var/www/html/public!g'
/etc/apache2/sites-available/000-default.conf 复制。的/ var / www / html等/
在深入that issue并将存储驱动程序切换到overlay
后,这似乎就是我想要的 - 只添加几个字节作为新图层。
但现在我想知道,我如何将它整合到我的CI设置中 - 基本上我需要两个不同的Dockerfiles - 取决于图像是否已存在或不存在。
对此有更好的解决方案吗?
答案 0 :(得分:1)
使用相同标签或无标签构建图像
docker build -t myapp:ci-build ....
或
docker build ....
如果你使用相同的标签,那么旧图像将是未标记的,并且将具有""作为名字。如果你没有标记它们,那么他们也会有#34;"在名字中。
现在您可以在下面安排命令
docker system prune -f
这将删除所有悬空图像容器等
答案 1 :(得分:1)
一个建议是使用命令docker image prune
来清理悬空图像。这可以为您节省大量空间。您可以在CI中定期运行此命令。