如何配置docker特定的工件依赖项,这些依赖项在不同的源代码存储库中进行管理。我的docker镜像依赖于jar文件(比如project-auth)、配置(比如project- which ),这些配置实际上是在与docker镜像不同的存储库中维护的。
在构建镜像之前,复制docker镜像的依赖项(比如project-deploy repo)的最佳方式是什么?也就是说,在上面的例子中,project-deploy需要jar文件和配置,这些文件和配置需要从当前文件夹挂载为卷。
我不希望这被提交,因为依赖关系往往会变得陈旧,我希望docker映像创建成为构建过程本身的一部分。
发布于 2021-03-24 13:58:31
为此,您可以使用Docker多阶段构建。
对于多阶段构建,您可以在Dockerfile文件中使用多个
语句。每个FROM指令可以使用不同的基址,并且它们中的每一个都开始了一个新的构建阶段。您可以有选择地将工件从一个阶段复制到另一个阶段,从而在最终图像中保留您不想要的所有内容。
例如:
假设依赖项的源代码存在于使用多阶段构建的repo - "https://github.com/demo/demo.git“中,您可以创建一个阶段,在其中克隆git代码库,并在运行时创建依赖项Jar (或任何其他需要的内容)。最后,您可以将jar复制到您的最终图像中。
# Use any base image. I took centos here
FROM centos:7 as builder
# Install only those packages which are required.
RUN yum install -y maven git \
&& git clone <YOUR_GIT_REPO_URL>
WORKDIR /myfolder
# Create jar at run time. You can update this step according to your project requirements.
RUN mvn clean package
# From here our normal Dockerfile steps starts.
FROM centos:7
# Add all the necessary steps required to build your image
.
.
.
# This is how you can copy the jar which was created above (Step 4) in your final docker image.
COPY --from=builder SOURCE_PATH DESTINATION_PATH
请参考this以更好地了解docker中的多阶段构建。
https://stackoverflow.com/questions/66764444
复制相似问题