【问题标题】:Create multistage docker file创建多级 docker 文件
【发布时间】:2019-09-20 12:26:12
【问题描述】:

我有 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"]

问题如何为这两个 docker 文件创建一个多级 docker 文件?

提前致谢。

【问题讨论】:

  • 您希望docker build 的输出是什么?第二个似乎是第一个的超集,通常一个多级 Dockerfile 最终只创建一个图像。 (考虑使用docker run -v 在运行时注入备用配置文件,而不是为每个环境构建不同的映像。)
  • @DavidMaze .... 当然 docker build 的输出是想要成功构建的图像,这与我的 docker run 无关。只是我想制作一个多阶段文件。

标签: docker docker-compose dockerfile devops docker-machine


【解决方案1】:

我不确定您要执行的操作需要多阶段构建。相反,您可能想要做的是使用自定义基础镜像(用于开发),这将是您的第一个代码块,并将该基础镜像用于生产。

如果第一张图片被标记为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


我认为您不需要多阶段构建的原因是因为您提到您正在尝试处理两种环境(测试和生产)。

即使您确实想说使用多阶段构建进行生产,据我所知,也没有理由这样做。如果您的初始构建阶段包括安装构建依赖项(例如编译器)、复制代码和构建它,那么使用多阶段构建将是有效的,因为最终映像将不包含初始依赖项(例如编译器和其他潜在危险的开发工具)或任何不需要的构建工件。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    相关资源
    最近更新 更多