使用Dockerfile構建nifi基礎鏡像:
Dockerfile:
# Version: 0.0.1
FROM docker.io/centos:7
MAINTAINER [email protected]
ARG JDK_VERSION=8u66
ARG NIFI_VERSION=1.1.0
ARG NIFI_HOME=/root/data_collect
USER root
RUN yum -y install net-tools
COPY jdk-${JDK_VERSION}-linux-x64.tar.gz ${NIFI_HOME}/jdk-${JDK_VERSION}-linux-x64.tar.gz
RUN cd ${NIFI_HOME} && tar -xvzf jdk-${JDK_VERSION}-linux-x64.tar.gz \
&& rm -rf jdk-${JDK_VERSION}-linux-x64.tar.gz
COPY nifi-${NIFI_VERSION}-bin.tar.gz ${NIFI_HOME}/nifi-${NIFI_VERSION}-bin.tar.gz
RUN cd ${NIFI_HOME} && tar -xvzf nifi-${NIFI_VERSION}-bin.tar.gz \
&& rm -rf nifi-${NIFI_VERSION}-bin.tar.gz
ADD lib/ ${NIFI_HOME}/nifi-${NIFI_VERSION}/lib/
RUN cd ${NIFI_HOME} && mkdir conf
ADD conf/ ${NIFI_HOME}/conf/
ADD init.sh ${NIFI_HOME}/
RUN chmod u+x ${NIFI_HOME}/init.sh
RUN yum -y install openssh-server openssh-clients
RUN ssh-keygen -A
COPY id_rsa.pub /root/.ssh/authorized_keys
EXPOSE 8080
WORKDIR /root/data_collect
ENTRYPOINT ["/root/data_collect/init.sh"]
初始化腳本init.sh內容如下:
#!/bin/bash
### ENV ###
## USE_EMMBEDED_ZK, should set to true for master node, others should set to false.
## HOSTNAME, hostname of every node.
## ZK_CONNECTION_STR, zookeeper connection string ,such as (master.younge.club:2181,slave.younge.club:2181).
## S2S_PORT, port of site to site protocol, default 11443.
## WEB_PORT, port of web UI, default 8080.
## IS_CLUSTER, cluster mode if true, or single node mode, default false.
## MAX_MEM, max memory set for nifi, default 512.
## NIFI_VERSION, version of nifi.
## ZK_CLI_PORT, port zookeeper client connect to, default 2181.
## ZK_HOSTNAME, zookeeper's hostname, single node.
## ZK_VOTE_PORT, zookeeper's vote port, default 2888.
## ZK_LEADER_PORT, zookeeper's leader port, default 3888.
#NIFI_VERSION=1.1.0
#MAX_MEM=1024
cd /root/data_collect/nifi-${NIFI_VERSION}
#Nifi env
sed -i "/^#export JAVA_HOME=/s:.*:export JAVA_HOME=/root/data_collect/jdk1.8.0_66/:" bin/nifi-env.sh
#Jdk mem
sed -i "/^java.arg.2=-Xmx512m/s/.*/java.arg.2=-Xmx${MAX_MEM:-512}m/" conf/bootstrap.conf
#Nifi conf
sed -i "/^nifi.state.management.embedded.zookeeper.start=/s/.*/nifi.state.management.embedded.zookeeper.start=${USE_EMMBEDED_ZK:-false}/" conf/nifi.properties
sed -i "/^nifi.remote.input.host=/s/.*/nifi.remote.input.host=${HOSTNAME}/" conf/nifi.properties
sed -i "/^nifi.remote.input.socket.port=/s/.*/nifi.remote.input.socket.port=${S2S_PORT:-11443}/" conf/nifi.properties
sed -i "/^nifi.web.http.host=/s/.*/nifi.web.http.host=${HOSTNAME}/" conf/nifi.properties
sed -i "/^nifi.web.http.port=/s/.*/nifi.web.http.port=${WEB_PORT:-8080}/" conf/nifi.properties
sed -i "/^nifi.cluster.is.node/s/.*/nifi.cluster.is.node=${IS_CLUSTER:-false}/" conf/nifi.properties
sed -i "/^nifi.cluster.node.address=/s/.*/nifi.cluster.node.address=${HOSTNAME}/" conf/nifi.properties
sed -i "/^nifi.zookeeper.connect.string=/s/.*/nifi.zookeeper.connect.string=${ZK_CONNECTION_STR}/" conf/nifi.properties
sed -i "/^nifi.cluster.node.protocol.port=/s/.*/nifi.cluster.node.protocol.port=${NODE_PORT:-10443}/" conf/nifi.properties
if [ ${USE_EMMBEDED_ZK:-false} == true ]
then
#Zookeeper conf
sed -i "/^clientPort=/s/.*/clientPort=${ZK_CLI_PORT:-2181}/" conf/zookeeper.properties
sed -i "/^server.1=/s/.*/server.1=${ZK_HOSTNAME}:${ZK_VOTE_PORT:-2888}:${ZK_LEADER_PORT:-3888}/" conf/zookeeper.properties
mkdir -p state/zookeeper
fi
#鏡像後臺運行
/usr/sbin/sshd -D
#/root/data_collect/nifi-${NIFI_VERSION}/bin/nifi.sh start