构建包含IK插件(中文分词插件)的Elasticsearch镜像

复制代码
#!/bin/bash

# 定义变量
ES_VERSION="8.15.3"
IMAGE_NAME="elasticsearch-with-ik:${ES_VERSION}"
IK_PLUGIN_DIR="./elasticsearch-analysis-ik-${ES_VERSION}"
DOCKERFILE_NAME="Dockerfile.es-ik"

# 检查IK插件目录是否存在
if [ ! -d "${IK_PLUGIN_DIR}" ]; then
    echo "错误:IK插件目录 ${IK_PLUGIN_DIR} 不存在!"
    echo "请确保当前目录下有该插件目录"
    exit 1
fi

# 创建临时Dockerfile,修复权限问题
cat > ${DOCKERFILE_NAME} << EOF
FROM docker.elastic.co/elasticsearch/elasticsearch:${ES_VERSION}

# 切换到root用户以获得足够权限
USER root

# 复制本地IK插件到容器中
COPY ${IK_PLUGIN_DIR} /usr/share/elasticsearch/plugins/ik

# 设置权限
RUN chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/plugins/ik

# 切换回elasticsearch用户
USER elasticsearch

CMD ["./bin/elasticsearch"]
EOF

# 构建镜像
echo "开始构建包含IK插件的Elasticsearch镜像..."
docker build -f ${DOCKERFILE_NAME} -t ${IMAGE_NAME} .

# 记录构建结果
BUILD_SUCCESS=$?

# 清理临时文件
rm -f ${DOCKERFILE_NAME}

# 提示构建结果
if [ ${BUILD_SUCCESS} -eq 0 ]; then
    echo "镜像构建成功:${IMAGE_NAME}"
    echo "可以使用以下命令启动:"
    echo "docker run -d --name elasticsearch -p 8100:9200 -e \"discovery.type=single-node\" -e \"ES_JAVA_OPTS=-Xms512m -Xmx512m\" -e \"xpack.security.enabled=false\" --ulimit memlock=-1:-1 --ulimit nofile=65536:65536 ${IMAGE_NAME}"
else
    echo "镜像构建失败"
    exit 1
fi

这个文件就叫build_es_image.sh

切记 同级目录下 要下载好elasticsearch-analysis-ik-8.15.3