我目前正在将巨大的DockerFile拆分为单独的DockerFiles,但是巨大的DockerFile中定义的一些变量需要在单独的DockerFiles中使用。 Docker是否有在一组DockerFiles或其他一些继承机制中导入公共变量的概念?
我希望避免在多个dockerfiles中维护重复变量。
举个例子:
ARG basic_user="user"
USER ${basic_user}
答案 0 :(得分:1)
Dockerfiles中的ENV
值是持久的,它们由后代Dockerfiles继承。 Dockerfile ENV
另一方面,ARG
值不会保留,因此不是固有的后代Dockerfiles。 Dockerfile ARG
答案 1 :(得分:0)
我相信您正在寻找的是 ONBUILD 命令。 Docker ONBUILD command。此命令将允许子容器继承在父Dockerfile中声明的命令,并由任何使用父级作为基本映像的子Dockerfiles使用。
以下是一个例子:
父Dockerfile
FROM ubuntu:latest
ONBUILD ARG ARG_1=arg1
ONBUILD ENV CHILD_VAR=${ARG_1}
ONBUILD ENTRYPOINT ["printenv"]
为了这个例子,我将这个Dockerfile构建为docker build -t parent .
子Dockerfile
FROM parent:latest
将此Dockerfile构建为docker build -t child .
此子容器现在将具有一个环境变量,该变量具有ARG_1从父级指定的值。使用以下内容对此进行测试,您将得到结果arg1
:
docker run --name=child child CHILD_VAR
重要的是要注意,在此示例中,通过使用ONBUILD,父级将不具有名为CHILD_VAR的环境变量,也不具有指定的入口点。只有使用父作为基本图像的Dockerfiles才会。