dockerfile動態修改服務配置文件


主要是利用命令envsubst能實現變量的替換並生成新得配置文件以及docker命令行的變量輸入等。

本次實驗主要是編寫flume鏡像,並在容器啟動(docker run)時動態修改配置文件並啟動,並向flume發數據,然后發給kafka。

此實驗的基礎:

    會dockerfile的編寫,熟悉flume服務,kafka服務。

步驟:

1、dockerfile文件如下:

FROM centos
WORKDIR /opt
COPY jdk-8u241-linux-x64.rpm /root
RUN rpm -i /root/jdk-8u241-linux-x64.rpm   # 安裝jdk
RUN yum install -y gettext   # 安裝 envsubst命令
COPY flume ./flume/
EXPOSE 5140/udp
VOLUME /tmp/logs/
CMD envsubst < /opt/flume/conf/flume.conf.template > /opt/flume/conf/flume.conf && ./flume/bin/flume-ng agent -c ./flume/conf/ -f ./flume/conf/flume.conf  --name agent  -Dflume.root.logger=INFO,console
# envsubst根據flume.conf.template這個配置文件替換變量並生成flume.conf。

 flume的配置文件如下:

agent.sources = s1
agent.sinks = k1
agent.channels = c1

agent.sources.s1.type = syslogudp
agent.sources.s1.port = 5140
agent.sources.s1.host = ${BIND_IP}

agent.channels.c1.type = memory
agent.channels.c1.capacity = 100000
agent.channels.c1.transactionCapacity = 5000

agent.sinks.k1.type = logger
agent.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
agent.sinks.k1.kafka.topic = log
agent.sinks.k1.kafka.bootstrap.servers = ${KAFKA_IP}:${KAFKA_PORT}
agent.sinks.k1.flumeBatchSize = 200
agent.sinks.k1.producer.acks = 1
agent.sinks.k1.producer.linger.ms = 1
agent.sinks.k1.producer.compression.type = snappy

agent.sources.s1.channels = c1
agent.sinks.k1.channel = c1

2、構建鏡像 

docker build /root/flume/dockerfile/ -t flume_sink_file:v1

 注意:/root/flume/dockerfile/目錄下要有flume、jdk-8u241-linux-x64.rpm、dockerfile文件。

3、啟動容器:

 docker run -d --rm -P -e  KAFKA_IP="192.168.174.128",KAFKA_PORT="9092",BIND_IP="0.0.0.0" --name=abcd flume_sink_file:v1 

4、而后,向flume發送數據,測試是否能在kafka topic log上接收到數據。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM