我正在获得有关Docker的知识,我有以下问题
如果CI服务器应为每个构建创建一个新映像并在测试服务器上运行它,那么您是否保留上一个映像?我的意思是,您是否标记了上一张图片,还是在创建新图片之前删除了上一张图片?
我是一名Java EE开发人员,所以如果重要的话,我会使用Maven,Jenkins等。
答案 0 :(得分:13)
保留Dockerfile的唯一限制是您添加到映像的任何文件都必须位于文件系统中的Dockerfile下面。我通常在顶级项目中看到它们,虽然我有一个回购,它结合了一堆小图像,我有类似的东西
top/
project1/
Dockerfile
project1_files
project2/
Dockerfile
project2_files
Jenkins docker插件可以指向带有Dockerfile的任意目录,因此很容易。对于CI,我见过的最常见的策略是将使用CI构建的每个图像标记为“最新”。如果您不向构建添加标记,则这是默认值。然后发布版本获得自己的标签。因此,如果您只运行没有参数的图像,则会获得CI构建的最后一个图像,但如果您想要特定版本,则很容易这样说。
答案 1 :(得分:1)
我建议像使用makefile一样保留Dockerfile和源码。
构建上下文问题意味着大多数Dockerfiles都保留在项目的顶层或附近。您可以通过使用脚本或构建工具来复制Dockerfiles或源文件夹来解决这个问题,但这会让您感到有点痛苦。
我没有意识到有关标签和CI的最佳做法。使用git哈希或类似标记进行标记可能是一个很好的解决方案。您需要保留至少一代旧图像,以防需要回滚。