gpt4 book ai didi

docker - 使 : dependency on a docker image

转载 作者:行者123 更新时间:2023-12-04 17:40:29 24 4
gpt4 key购买 nike

我正在使用 docker 工作流根据给定的规范文件生成一些文件,其中 Makefile 是(它根据 OpenAPI 规范生成客户端):

SWAGGER ?= ${PWD}/swagger.yaml
GENERATOR ?= openapitools/openapi-generator-cli\:latest

generated: Makefile ${SWAGGER}
docker run --rm --user $$(id -u):$$(id -g) \
-v ${PWD}:/output -v ${SWAGGER}:/input/swagger.yaml \
${GENERATOR} \
generate -g python -i /input/swagger.yaml -o /output/generated \

这工作正常,如果我修改输入的 SPEC 文件,它将重建。

但是当 docker 镜像改变时它不会重建。

假设我 docker build图像相同 name:tag再次,但里面有不同的代码,或者我使用上游图像的不同标记版本,无论如何。这是意料之中的,因为 Makefile 不知道 docker 镜像的内容或修改日期。如何让 Makefile 理解对 docker 镜像的依赖?
  • 我试过 docker inspect获取创建日期的图像,但我不知道如何制作 make将其理解为依赖项(如果创建日期比输出目录新,则重建)
  • 我不能只在 docker 镜像中添加对代码的依赖,因为 docker 镜像甚至可能不是从本地可用文件构建的。
  • make可能不是那种东西的工具,也许我可以使用其他东西来理解 docker 图像依赖性。

    最佳答案

    无论您依赖的工件是 Docker 镜像还是其他地方的某些服务/数据,您都需要以 的形式表示您对它的了解。常规文件 .因为 make只处理文件。 :-)
    我建议您为“调用 docker build 使用 可预测名称 将其成功的证据保存到标记文件中”定义一些宏,以便您可以使用它来替换所有调用至 docker build ,确保一致的文件处理。完整示例,假设 a/Dockerfileb/Dockerfile存在。

    # For consistency, the src dirs are named like the images they produce
    IMAGES = a b

    # Keep "stamps" around, recording that images were built.
    # You could keep them in e.g. a `.docker-buildstamps/*` dir,
    # but this example uses `*/docker-buildstamp`.
    BUILDSTAMP_FILE = docker-buildstamp
    BUILDSTAMPS = $(addsuffix /$(BUILDSTAMP_FILE),$(IMAGES))

    .PHONY: all
    all: $(BUILDSTAMPS)

    # Pattern rule: let e.g. `a/docker-buildstamp` depend on changes to `a/*` (-but avoid circular dep)
    %/$(BUILDSTAMP_FILE): % %/[!$(BUILDSTAMP_FILE)]*
    $(docker_build)

    clean:
    docker image rm -f $(IMAGES)
    rm -f $(BUILDSTAMPS)

    # Turn `a/docker-buildstamp` back into `a`
    define from_buildstamp
    $(@:%/$(BUILDSTAMP_FILE)=%)
    endef

    # Self-explanatory
    define docker_build
    docker build -t $(from_buildstamp) $(from_buildstamp)
    touch $@
    endef

    关于docker - 使 : dependency on a docker image,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54705597/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com