# 创建构建用的目录
mkdir -p /opt/docker/build/filebeat
从官网(Download Filebeat • Lightweight Log Analysis | Elastic)获取tar.gz包(https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.14.2-linux-x86_64.tar.gz),并将tar.gz包上传到/opt/docker/build/filebeat目录下。
# 编辑dockerfile
- cd /opt/docker/build/filebeat
- vi dockerfile
# 将下面的内容添加到dockerfile文件内并保存。
- FROM ubuntu:18.04
-
- WORKDIR /usr/share/filebeat
-
- COPY filebeat-7.14.2-linux-x86_64.tar.gz /usr/share
-
- RUN cd /usr/share && \
- tar -xzf filebeat-7.14.2-linux-x86_64.tar.gz -C /usr/share/filebeat --strip-components=1 && \
- rm -f filebeat-7.14.2-linux-x86_64.tar.gz && \
- chmod +x /usr/share/filebeat
-
- ADD ./docker-entrypoint.sh /usr/bin/
- RUN chmod +x /usr/bin/docker-entrypoint.sh
- ENTRYPOINT ["docker-entrypoint.sh"]
- CMD ["/usr/share/filebeat/filebeat","-e","-c","/usr/share/filebeat/filebeat.yml"]
1.设置的工作目录和之前的不太一样,是因为最近搭建elk时根据官方给的elk镜像目录进行的调整。
2.这里选择ubuntu的原因是其作为底层打包出来的镜像比centos要小很多。我曾经尝试使用alpine:3.7作为底层,但是构建后的镜像运行时报“standard_init_linux.go:190: exec user process caused "no such file or directory"”,故最后还是选择ubuntu。
# 编辑docker-entrypoint.sh
vi docker-entrypoint.sh
# 将下面的内容添加到docker-entrypoint.sh文件内并保存。
- #!/bin/bash
- set -e
- TMP=${PATHS}
- config=/usr/share/filebeat/filebeat.yml
- if [ ${TMP:0:1} = '/' ] ;then
- tmp='"'${PATHS}'"'
- fi
-
- env
- echo 'Filebeat init process done. Ready for start up.'
- echo "Using the following configuration:"
- cat /usr/share/filebeat/filebeat.yml
- exec "$@"
# 构建
- cd /opt/docker/build/filebeat
- docker build --rm -t filebeat:7.14.2 .
构建完成后,通过docker images可以看到多了一个filebeat:7.14.2的镜像。