我有2个不同的docker文件(生产和测试环境)。我想使用这2个dockerfile构建单个多阶段docker文件。
第一个dockerfile如下:
FROM wildfly:17.0.0
USER jboss
RUN mkdir /opt/wildfly/install && mkdir /opt/wildfly/install/config
COPY --chown=jboss:jboss install /opt/wildfly/install
COPY --chown=jboss:jboss install.sh /opt/wildfly/bin
RUN mkdir -p $JBOSS_HOME/standalone/data/datastorage
CMD ["/opt/wildfly/bin/install.sh"]
如下所示的第二个dockerfile:
FROM wildfly:17.0.0
USER jboss
RUN mkdir /opt/wildfly/install && mkdir /opt/wildfly/install/config
COPY --chown=jboss:jboss ./install /opt/wildfly/install
COPY --chown=jboss:jboss install.sh /opt/wildfly/bin
RUN rm /opt/wildfly/install/wildfly-scripts/Setup.cli
RUN mv /opt/wildfly/install/wildfly-scripts/SetupforTest.cli /opt/wildfly/install/wildfly-scripts/Setup.cli
RUN rm /opt/wildfly/install/wildfly-scripts/Properties.properties
RUN mv /opt/wildfly/install/wildfly-scripts/Properties-test.properties /opt/wildfly/install/wildfly-scripts/Properties.properties
RUN mkdir -p $JBOSS_HOME/standalone/data/datastorage
CMD ["/opt/wildfly/bin/install.sh"]
问题:如何为这2个docker文件创建多阶段docker文件?
谢谢。
答案 0 :(得分:0)
我不确定您要执行的操作是否需要多阶段构建。取而代之的是,您可能想使用一个自定义的基础映像(对于dev),这将是您的第一个代码块,并将该基础映像用于生产。
如果第一张图像被标记为shanmukh/wildfly:dev
:
FROM shanmukh/wildfly:dev
USER jboss
RUN rm /opt/wildfly/install/wildfly-scripts/Setup.cli
RUN mv /opt/wildfly/install/wildfly-scripts/SetupforTest.cli /opt/wildfly/install/wildfly-scripts/Setup.cli
RUN rm /opt/wildfly/install/wildfly-scripts/Properties.properties
RUN mv /opt/wildfly/install/wildfly-scripts/Properties-test.properties /opt/wildfly/install/wildfly-scripts/Properties.properties
可以将其标记为shanmukh/wildfly:prod
。
我认为您不希望进行多阶段构建的原因是因为您提到要尝试处理两种环境(测试和生产)。
即使您确实要说使用多阶段构建进行生产,据我所知,也没有理由这样做。如果您的初始构建阶段包括安装诸如编译器之类的构建依赖项,复制代码并对其进行构建,那么使用多阶段构建会比较有效,因为最终映像将不包括初始依赖项(例如编译器和其他潜在的危险开发工具)或生成的任何不需要的构建工件。
希望这会有所帮助。