最好的方法来扩展Dockerfile来从公共/共享存储库中获取deps / env vars

我们有共同的共享回购的应用程序库。 我们的应用程序仓库包含Dockerfiles,我们试图做的是每当共同/共享仓库改变,并依赖于其他库或EnvVars,我们也想在这些共同/共享仓库中拥有Dockerfiles。 而应用程序回购库中的Dockerfile将包含它们,以便从公共/共享回购站中引入任何折扣/环境变化。 search“docker include另一个dockerfile”之后,我find了github的问题https://github.com/docker/docker/issues/735 。 这正是我们正在寻找的,但这个问题并没有提供明确的解决scheme。 到目前为止,有没有最好的方法来实现这个目标? 谢谢

简单的答案是创build你自己的基础图像。 在你的基础图像去任何常见的代码。 然后其他Dockerfiles在他们的FROM行中引用这个图像。

基础镜像的Dockerfile:

# pick an image to work off of FROM debian:latest # do your common stuff here 

然后运行docker build -t mybase:latest .

现在在你想创build的其他图像中,他们有以下Dockerfile:

 FROM mybase:latest # do your non-common stuff here 

这是一种方式,但它可能不包括你要找的所有东西。 如果常见的仓库有一个shell脚本来安装依赖关系并设置环境variables,那么你可以在构build镜像时调用shell脚本,方法是将shell脚本复制到镜像中并运行。

举例来说,你的env_script.sh中有一个名为env_script.sh的文件,看起来像

  #!/bin/bash apt install -y libpng-dev libfreetype6-dev pkg-config pip install flask export PYTHONPATH="${PYTHONPATH}:/usr/local/my_" 

那么你的应用程序的Dockerfile将使用它如下:

  COPY ./common_repo/env_script.sh /tmp/ # Copy the shell script RUN /tmp/env_script.sh # Run the shell script RUN rm /tmp/env_script.sh # Remove temporary file after done