Is it possible to build a docker image without pushing it?

时间:2016-12-09 13:04:07

标签: concourse

I want to build a docker image in my pipeline and then run a job inside it, without pushing or pulling the image.

Is this possible?

2 个答案:

答案 0 :(得分:3)

根据设计,您无法在管道中的作业之间传递工件,而无需使用某种外部资源来存储它。但是,您可以在单个作业中传递任务。此外,您还可以在每个任务级别而不是按作业级别指定图像。因此,执行所需操作的最简单方法可能是创建一个具有生成docker-image的第一个任务的单个作业,以及将其作为容器图像使用的第二个任务。

在您的情况下,您将在构建任务中构建docker镜像并使用docker export将图像的文件系统导出到rootfs,您可以将其放入输出(my-task-image) 。请记住它需要匹配的rootfs输出的特定模式。您将需要rootfs / ...(提取的' docker export')和metadata.json,它们只能包含一个空的json对象。您可以查看docker-image-resource中的脚本,以获取有关如何使其与架构匹配的更多信息:https://github.com/concourse/docker-image-resource/blob/master/assets/in。然后在后续任务中,您可以在管道yml中添加image参数:

- task: use-task-image
  image: my-task-image
  file: my-project/ci/tasks/my-task.yml

以便在任务中使用构建的图像。

答案 1 :(得分:1)

UDPATE:PR被拒绝

该答案当前无效,因为“ dry_run” PR被拒绝了。参见https://github.com/concourse/docker-image-resource/pull/185

如果找到可行的方法,我将在这里进行更新。


2017年10月添加到docker资源的“ dry_run”参数现在允许使用此(github pr

您需要添加一个虚拟docker资源,例如:

resources:
  - name: dummy-docker-image
    type: docker-image
    icon: docker
    source:
      repository: example.com
      tag: latest
  - name: my-source
    type: git
    source:
      uri: git@github.com:me/my-source.git

然后添加一个构建步骤,该步骤将推入该docker资源,但设置为“ dry_run”,这样实际上不会压入任何东西:

jobs:
  - name: My Job
    plan:
      - get: my-source
        trigger: true
      - put: dummy-docker-image
        params:
          dry_run: true
          build: path/to/build/scope
          dockerfile: path/to/build/scope/path/to/Dockerfile