gpt4 book ai didi

docker - Docker 中的条件 block

转载 作者:行者123 更新时间:2023-12-04 20:32:38 24 4
gpt4 key购买 nike

一段时间以来,我一直在使用 docker。我遇到过一种情况,我需要根据某些条件执行 Dockerfile 中存在的指令。例如这里是 Dockerfile 的片段

FROM centos:centos7
MAINTAINER Akshay <akshay@dm.com>

# Update and install required binaries
RUN yum update -y \
&& yum install -y which wget openssh-server sudo java-1.8.0-openjdk \
&& yum clean all

#install Maven
RUN curl -Lf http://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz -o /tmp/apache-maven-3.3.9.tar.gz
RUN tar -xzf /tmp/apache-maven-3.3.9.tar.gz -C /opt \
&& rm /tmp/apache-maven-3.3.9.tar.gz

ENV M2_HOME "/opt/apache-maven-3.3.9"
ENV PATH ${PATH}:${M2_HOME}/bin:

# Install Ant
ENV ANT_VERSION 1.9.4
RUN cd && \
wget -q http://archive.apache.org/dist/ant/binaries/apache-ant-${ANT_VERSION}-bin.tar.gz && \
tar -xzf apache-ant-${ANT_VERSION}-bin.tar.gz && \
mv apache-ant-${ANT_VERSION} /opt/ant && \
rm apache-ant-${ANT_VERSION}-bin.tar.gz
ENV ANT_HOME /opt/ant
ENV PATH ${PATH}:/opt/ant/bin
......

所以正如你在我的 docker 文件中看到的,我有 maven 和 ant 的安装说明。但是现在我必须根据条件安装其中任何一个。我知道我可以使用 ARG Dockerfile 中的指令在构建期间获取参数,但问题是我找不到任何关于如何将它们包含在 if/else 中的文档。堵塞。

我也读过一些关于此的其他stackoverflow帖子,但在那些帖子中我看到他们要求在指令中使用条件语句,例如 RUN if $BUILDVAR -eq "SO"; then export SOMEVAR=hello; else export SOMEVAR=world; fi Link ,或编写一个单独的脚本文件,如 this
但正如你所看到的,我的情况不同。我不能让我们知道这一点,因为我也会有一堆其他指令,这取决于那个论点。我必须做这样的事情
ARG BUILD_TOOL  
if [ "${BUILD_TOOL}" = "MAVEN" ]; then
--install maven
elif [ "${BUILD_TOOL}" = "ANT" ]; then
--install ant
fi
.... other instructions ....
if [ "${BUILD_TOOL}" = "MAVEN" ]; then
--some other dependent commands
elif [ "${BUILD_TOOL}" = "ANT" ]; then
--some other dependent commands
fi

最佳答案

如果您不想使用所有这些 RUN if语句,您可以改为使用设置过程创建一个 bash 脚本并从 Dockerfile 调用它。例如:

FROM centos:centos7
MAINTAINER Someone <someone@email.com>

ARG BUILD_TOOL

COPY setup.sh /setup.sh

RUN ./setup.sh

RUN rm /setup.sh

setup.sh文件(不要忘记使其可执行):

if [ "${BUILD_TOOL}" = "MAVEN" ]; then
echo "Step 1 of MAVEN setup";
echo "(...)";
echo "Done MAVEN setup";
elif [ "${BUILD_TOOL}" = "ANT" ]; then
echo "Step 1 of ANT setup";
echo "(...)";
echo "Done ANT setup";
fi

然后您可以使用 docker build --build-arg BUILD_TOOL=MAVEN . 构建它(或 ANT)。

请注意,我在这里使用了 shell 脚本,但如果您有其他可用的解释器(例如:python 或 ruby​​),您也可以使用它们来编写安装脚本。

关于docker - Docker 中的条件 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42719134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com