私はしばらくしてドッカーを使用しています。私はいくつかの条件に基づいてDockerファイルに存在する命令を実行する必要がある状況に遭遇しました。あなたは、私がMavenとアリの両方のインストール手順を持っている私のドッキングウィンドウのファイルで見ることができるように、例えばここにDockerfileドッカーの条件ブロック
FROM centos:centos7
MAINTAINER Akshay <[email protected]>
# 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
......
の抜粋です。しかし、今は条件に基づいてどちらか一方をインストールする必要があります。私はDockerfileにARG
命令を使用してビルド時に引数を取り出すことができることを知っていますが、if/else
ブロックで囲む方法に関するドキュメントが見つかりませんでした。
私もこれに関するいくつかの他のStackOverflowの記事を読んでいるが、これらの中で、私は、彼らが命令などRUN if $BUILDVAR -eq "SO"; then export SOMEVAR=hello; else export SOMEVAR=world; fi
Link、またはthis のような別のスクリプトファイルを書くの内部条件文を使用することを求めていることを確認しかし、あなたが見ることができるように、私の場合は異なっています。私はこの議論に依存することになる他の指示もたくさん持っているので、私たちはこれを作ることができません。私はあなたがあなたの代わりにセットアップ手順でbashスクリプトを作成し、Dockerfileからそれを呼び出すことができるすべてのものをRUN if
文を使用しない場合は、この
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
ご意見ありがとうございます。はい、私はこの解決策についても考えました。しかし問題は、その条件をチェックすると異なるドッカーの命令が実行されるはずだから、複数のスクリプトを用意する必要があるということです。つまり、 'setup.sh'を実行した後、再びその条件に基づいて' configure.sh'を実行し、 'execute.sh'などを実行するようになります。だから私はこのようにとても退屈なことになるでしょう。したがって、これを達成する他の方法があるかどうかが考えられます。私が間違っていれば私を修正してください。 – DMA
"その条件をチェックすると異なるドッカーの命令が実行されるはずです"という具合に具体的な例を挙げることはできますか? – Salem
私は、 'BUILD_TOOL'という引数を使って' setup.sh'以外の他の命令を実行する必要があるということを意味しています。たとえばMAVEN/ANTのいずれかをインストールした後のように、私はいくつかの一般的な指示を実行しなければなりません。また、 'BUILD_TOOL'に基づいて、設定が必要な他のものを決定しなければなりません。この方法では、前述のように 'RUN ./setup.sh RUN ./configure.sh RUN。/ execute.sh'と' if/else'を含むファイルになります。私が何を言おうとしていることを願っています。 – DMA