我已经使用Spark安装定义了一个Dockerfile。我想从定义为入口点的bash脚本加载我的应用程序。但是,此脚本应使用参数实现。此脚本位于项目文件夹中。问题是如何将此脚本设置为入口点,并将项目目录定义为workdir?
我的Dockerfile现在看起来像这样:
FROM java:8
ENV SCALA_VERSION 2.11.8
ENV SBT_VERSION 1.1.1
ENV SPARK_VERSION 2.2.0
ENV SPARK_DIST spark-$SPARK_VERSION-bin-hadoop2.6
ENV SPARK_ARCH $SPARK_DIST.tgz
ARG SPARK_MASTER
WORKDIR /opt
# Install Scala
RUN \
cd /root && \
curl -o scala-$SCALA_VERSION.tgz http://downloads.typesafe.com/scala/$SCALA_VERSION/scala-$SCALA_VERSION.tgz && \
tar -xf scala-$SCALA_VERSION.tgz && \
rm scala-$SCALA_VERSION.tgz && \
echo >> /root/.bashrc && \
echo 'export PATH=~/scala-$SCALA_VERSION/bin:$PATH' >> /root/.bashrc
# Install SBT
RUN \
curl -L -o sbt-$SBT_VERSION.deb https://dl.bintray.com/sbt/debian/sbt-$SBT_VERSION.deb && \
dpkg -i sbt-$SBT_VERSION.deb && \
rm sbt-$SBT_VERSION.deb
# Install Spark
RUN \
cd /opt && \
curl -o $SPARK_ARCH http://d3kbcqa49mib13.cloudfront.net/$SPARK_ARCH && \
tar xvfz $SPARK_ARCH && \
rm $SPARK_ARCH && \
echo 'export PATH=$SPARK_DIST/bin:$PATH' >> /root/.bashrc
EXPOSE 9851 9852 4040 9092 9200 9300 5601 7474 7687 7473
VOLUME /home/user/path/to/project /Demo
WORKDIR /Demo
ENTRYPOINT runDemo.sh $SPARK_MASTER
答案 0 :(得分:1)
鉴于当前目录为/Demo
且runDemo.sh
位于该文件夹内,您的入口点应如下所示:
ENTRYPOINT ./runDemo.sh $SPARK_MASTER
注意.
这意味着当前目录。
这与docker无关,它只是执行不在Linux / Unix $PATH
中的程序/脚本的标准方法。
答案 1 :(得分:1)
正如评论中所提到的,你可以这样做:
/home/user/path/to/project
这会将您的本地/Demo
文件夹装入容器的/Demo/runDemo.sh $SPARK_MASTER
,然后将COPY
设置为入口点。
请注意,如果脚本是独立的(即项目主目录中没有外部依赖项),则可以使用...
EXPOSE 9851 9852 4040 9092 9200 9300 5601 7474 7687 7473
COPY /home/user/path/to/project/runDemo.sh /Demo
WORKDIR /Demo
ENTRYPOINT runDemo.sh $SPARK_MASTER
仅将脚本添加到容器中,而不是装入完整卷。
EnemyShip variableName = getEnemryRef(i);
variableName = new EnemyShip();
以下是volumes和Dockerfile directives的文档。