Apache NiFi 的自定义 docker 容器

custom docker container for Apache NiFi

我已经为 运行 Apache NiFi 创建了一个自定义 docker 容器,后来在 NiFi 之上创建了一些其他位。 容器是 运行ning Ubuntu 18 nifi.properties 文件非常普通。 这是我的 docker 文件。

FROM ubuntu:18.04
FROM openjdk:8-jre

RUN apt-get update
RUN apt-get install unzip
RUN apt-get install wget -y
RUN mkdir /opt/MicroFocus
RUN apt-get install dos2unix 

WORKDIR /opt/nifi/
RUN wget https://archive.apache.org/dist/nifi/1.11.4/nifi-1.11.4-bin.tar.gz
RUN tar -xzf nifi-1.11.4-bin.tar.gz
ADD nifi.properties /opt/nifi/nifi-1.11.4/conf
RUN chmod 777 /opt/nifi/nifi-1.11.4/conf/nifi.properties
RUN dos2unix /opt/nifi/nifi-1.11.4/conf/nifi.properties

ADD start.sh /opt/nifi
RUN chmod 777 start.sh
RUN dos2unix start.sh
ADD nifi-env.sh /opt/nifi/nifi-1.11.4/bin
RUN chmod 777 /opt/nifi/nifi-1.11.4/bin/nifi-env.sh
ENTRYPOINT [ "/opt/nifi/nifi-1.11.4/bin/nifi.sh","start"]

这是更大的 docker 撰写设置的一部分。所以当我 运行

docker compose build nifi 

构建没有任何错误。那我们我运行

docker compose up nifi

我得到以下输出,之后容器终止。

[+] Running 1/1
 - Container nifi_tnsw  Recreated                                                                                                           0.3s
Attaching to nifi_tnsw
nifi_tnsw  |
nifi_tnsw  | Java home: /usr/local/openjdk-8
nifi_tnsw  | NiFi home: /opt/nifi/nifi-1.11.4
nifi_tnsw  |
nifi_tnsw  | Bootstrap Config File: /opt/nifi/nifi-1.11.4/conf/bootstrap.conf
nifi_tnsw  |
nifi_tnsw  |
nifi_tnsw exited with code 0

对于每个容器,都应该有一个前台进程来防止容器退出。 /opt/nifi/nifi-1.11.4/bin/nifi.sh start 将在后台启动进程,然后退出,最终使容器作为无前台进程退出 运行。

对于你来说,你可以直接使用dockerhub上的apache/nifi镜像:

docker run -d --name nifi -p 8080:8080 apache/nifi:latest

当然,如果你非要自己写dockerfile,可以参考上面的防止容器退出:

  1. 参考他们的Dockerfile,他们使用一个脚本作为入口:

    ENTRYPOINT ["../scripts/start.sh"]
    
  2. 指的是他们的start.sh,这会使用wait命令等到主进程退出,然后你会一直在容器中有一个前台进程,这会阻止容器出口:

NIFI_HOME=/opt/nifi/nifi-1.11.4
"${NIFI_HOME}/bin/nifi.sh" run &
nifi_pid="$!"
tail -F --pid=${nifi_pid} "${NIFI_HOME}/logs/nifi-app.log" &

trap 'echo Received trapped signal, beginning shutdown...;./bin/nifi.sh stop;exit 0;' TERM HUP INT;
trap ":" EXIT

echo NiFi running with PID ${nifi_pid}.
wait ${nifi_pid}