ElasticSearch 自定义镜像

从 ElasticSearch 文档中,我们拉取的 Docker Image 是预先安装 X-Pack 的,加上了 Security 和 Monitor,但有时我们并不想要,然而这并不容易禁用和删除。

修改 Dockerfile


好消息是,这个 Image 的 Dockerfile 是开源的,我们可以基于这个 Dockerfile 修改。

首先我们先 git clone elastic/elasticsearch-docker,可以看到 repo 根目录下有一个 Makefile。

要执行这个构建,需要依赖 Python3、 virtualenv 和 jinja2。

接着:

1: 执行 make ,之后在 build 目录可以看到如下输出:

build
└── elasticsearch
├── bin
│   └── es-docker
├── Dockerfile
├── elasticsearch-5.4.3
│   ├── bin
│   ├── config
│   ├── lib
│   ├── LICENSE.txt
│   ├── modules
│   ├── NOTICE.txt
│   ├── plugins
│   └── README.textile
├── elasticsearch.yml
├── log4j2.properties
└── x-pack
└── log4j2.properties

2: Dockerfile 是我们要修改的东西,注释掉 X-Pack 安装的相关部分。

# Install x-pack and also the ingest-{agent,geoip} modules required for Filebeat
RUN for PLUGIN in x-pack ingest-user-agent ingest-geoip; do \
elasticsearch-plugin install --batch "$PLUGIN"; \
done
...
COPY x-pack/log4j2.properties config/x-pack/

3: 使用预先下载的 ElasticSearch tar 包加快 Docker build。
上面的目录树中, elasticsearch-5.4.3 是一个目录,从 ElasticSearch tar 包中解压出来的。

首先注释下载 tar 包的步骤:

# Download and extract defined ES version. busybox tar can't strip leading dir.
RUN wget --progress=bar:force https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-.tar.gz && \
tar zxf elasticsearch-.tar.gz && \
chown -R elasticsearch:elasticsearch elasticsearch- && \
mv elasticsearch-/* . && \
rmdir elasticsearch- && \
rm elasticsearch-.tar.gz

替换为 COPY 命令:

COPY elasticsearch-5.4.3/ /usr/share/elasticsearch

构建


docker build -f Dockerfile --tag niko_repo/elasticsearch:v5.4.3-niko .

完整 Dockerfile 文件


如果不想自己去 make 这个构建,可以参考我 make 好的 Dockerfile:

# This Dockerfile was generated from templates/Dockerfile.j2

FROM centos:7
LABEL maintainer "Elastic Docker Team <docker@elastic.co>"

ENV ELASTIC_CONTAINER true
ENV PATH /usr/share/elasticsearch/bin:$PATH

COPY jdk1.8.0_112/ /usr/jdk64/jdk1.8.0_112/
ENV JAVA_HOME /usr/jdk64/jdk1.8.0_112

RUN groupadd -g 1000 elasticsearch && adduser -u 1000 -g 1000 -d /usr/share/elasticsearch elasticsearch

COPY elasticsearch-5.4.3/ /usr/share/elasticsearch
RUN chown -R elasticsearch:elasticsearch /usr/share/elasticsearch

WORKDIR /usr/share/elasticsearch

RUN set -ex && for esdirs in config data logs; do \
mkdir -p "$esdirs"; \
chown -R elasticsearch:elasticsearch "$esdirs"; \
done

USER elasticsearch

COPY elasticsearch.yml log4j2.properties config/

COPY bin/es-docker bin/es-docker

USER root
RUN chown elasticsearch:elasticsearch \
config/elasticsearch.yml \
config/log4j2.properties \
bin/es-docker && \
chmod 0750 bin/es-docker

USER elasticsearch
CMD ["/bin/bash", "bin/es-docker"]

EXPOSE 9200 9300

参考