当前位置: 首页 > 知识库问答 >
问题:

如何创建可重用的dockerfile模板?

岳英锐
2023-03-14

我发现自己经常重复dockerfile的内容。例如,对于典型的spall-start应用程序,这将如下所示:

FROM $BUILD_IMAGE as build
COPY pom.xml .
RUN mvn dependency:go-offline

COPY src src
RUN mvn package
RUN java -Djarmode=layertools -jar target/application.jar extract

FROM $RUNTIME_IMAGE
COPY --from=build /application/dependencies/ ./
COPY --from=build /application/spring-boot-loader/ ./
COPY --from=build /application/snapshot-dependencies/ ./
COPY --from=build /application/application/ ./

EXPOSE 8081
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]

根据执行dockerfile的项目,这里只有三件事是动态的:pom。xmlsrc公开

问题:是否可以创建某种“模板”,以便我可以用这3个动态文件或文件夹“填充”模板?

我不想把dockerfile复制到我所有的项目中。我更愿意使用dockerfile作为基本定义,并从我所有的spring boot项目中引用它。


共有1个答案

越伯寅
2023-03-14

我们可以通过ARG指令实现这一点:

# syntax=docker/dockerfile:1
ARG TAG

FROM ubuntu:$TAG
ARG FILE_TO_COPY
ARG EXPOSE_PORT
COPY $FILE_TO_COPY file.txt
CMD cat file.txt

EXPOSE $PORT_TO_EXpoSE

然后,我们可以使用构建参数构建容器:

docker build --build-arg FILE_TO_COPY=foo.txt --build-arg TAG=18.04 --build-arg PORT_TO_EXPOSE=8080 -t test .

我们终于可以运行它了:

docker run -it --rm test
bar
 类似资料:
  • 问题内容: 我想优化我的Dockerfile。我希望将缓存文件保留在磁盘中。但是,我发现当我运行它时,总是尝试从网络获取每个文件。 我希望在构建期间共享我的缓存目录(例如/ var / cache / yum / x86_64 / 6)。但是,它仅适用于。 有什么建议吗?(在此示例中,仅安装了1 rpm,在实际情况下,我需要安装数百rpm) 我的Dockerfile草案 在第二次,我想建立一个相似

  • 我正在尝试创建一个基于D3的组件。我需要能够将多个实例添加到单个页面并将每个实例分开。 我尝试将使用生成的ID分配给在模板中包装我的组件的div: 该ID是在创建组件时创建的。 当对从父< code>App.vue作为< code>props传入的数据进行更新时,会重新呈现该图表。选择“正确的”<代码> 继续添加所有轴、数据等。 如果我将两个这样的组件添加到我的模板: 我看到它们被添加到DOM中,

  • 了解如何从现有文档创建 Dreamweaver 模板、使用“资源”面板来创建一个新模板或创建 Contribute 站点的模板。 可以基于现有文档(如 HTML)创建模板,也可以从新文档创建模板。 创建模板后,可以插入模板区域,并为代码颜色和模板区域高亮颜色设置模板的首选参数。 注意:您可以在模板的“设计备注”文件中存储关于模板的附加信息(如创作者、上一次更改的时间或做出某些布局决定的原因)。基于

  • 我正在尝试使用Intelij模板编写一个自定义setter,但用于Google的Guava Optionals。例如,如果我有一个如下的类: 在Android Studio中使用默认的Setter生成输出: 我想实现的是: 到目前为止,我尝试的是复制Intelij的模板并使用StringUtil。split()以剥离可选的 错误 对我该怎么做有什么建议吗? 默认设置生成Setter的默认模板 我的

  • 问题内容: 我已经通读了Apple的Swift文档,却对如何创建模块或如何将类或结构成员定义为私有或公共一无所知。 语法中有对import语句的引用,但找不到有关它做什么或如何使用的信息。 有谁知道我在哪里可以找到这个? 问题答案: 更新资料 您可以使用框架对快速项目进行模块化。 我们通过为每个模块创建单独的框架项目并通过Xcode工作区将它们链接来实现模块化。当我们将组件分为不同的项目时,它看起

  • 问题内容: 这个问题已经在这里有了答案 : 自动创建requirements.txt (8个答案) 2年前关闭。 我想知道如何为我的Python 3应用程序创建合适的requirements.txt? 问题答案: 在命令提示符下键入以下行