0

我正在使用 docker 安装 hadoop-0.20.2。我有两个文件,一个用于 java 安装,另一个用于 hadoop 安装。我正在使用 CMD 命令启动服务

 cmd ["path/to/start-all.sh"]

现在,我想编写执行示例 Map-Reduce 作业的第三个 dockerfile。但问题是

第三个 docker 文件依赖于第二个 hadoop-docker 文件。例如:

 FROM sec_doc_file

 RUN /bin/hadoop fs -mkdir input

它需要hadoop服务。但是只有在运行第二个 docker 文件后才会启动 hadoop 服务。但我想在开始 MR 作业之前将它作为第三个 docker 文件的一部分运行?可能吗?如果有,请举个例子。如果不是,还有什么其他可能性?

 #something like

 From sec_doc_file

 #Start_Service

 RUN /bin/hadoop fs -mkdir input

 #continue_map_reduce_job
4

1 回答 1

1

您用作新容器基础的 docker 映像是文件的基础,而不是应该运行的进程的基础。要执行您想要的操作,您需要在 dockerbuild 期间启动所需的进程并运行命令以正确设置。每个都RUN创建一个新的 AUFS 层,但不保留以前可能运行的服务。因此,如果您需要一项服务来执行某些设置,docker build则需要在一行中运行它(连接命令或使用自定义脚本)。例子:

FROM Gops/sec_doc_file
RUN path/to/start-all.sh && /bin/hadoop fs -mkdir input

因此,要在 docker build 期间设置 HDFS 文件夹和文件,您需要运行 hdfs 守护程序并在同一RUN命令中执行您希望的操作:

RUN /etc/hadoop/hadoop-env.sh &&\
    /opt/hadoop/sbin/start-dfs.sh &&\
    /opt/hadoop/bin/hdfs dfs -mkdir input
于 2015-01-22T07:04:53.017 回答