docker es打包自定义镜像
说明
目录说明
本文档涉及三个工作目录:
| 路径 | 用途 |
|---|---|
/server/es/origin |
存放从官方镜像复制出来的原始配置文件 |
/server/es/build |
构建上下文目录,用于打包自定义镜像 |
/server/es/result |
打包完成后,用于测试启动容器的空路径 |
一、创建 Docker 网络
sudo docker network create docker_network_es
二、从官方镜像复制配置文件到 origin 目录
1. 创建 origin 目录
sudo mkdir -p /server/es/origin
2. 启动临时容器
sudo docker run -d \
--name elasticsearch-origin \
--network docker_network_es \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms4g -Xmx4g" \
elasticsearch:9.0.1
3. 复制配置文件
sudo docker cp elasticsearch-origin:/usr/share/elasticsearch/config/. /server/es/origin/
4. 停止并删除临时容器
sudo docker stop elasticsearch-origin && sudo docker rm elasticsearch-origin
三、修改配置文件参数
编辑 /server/es/origin/elasticsearch.yml:
sudo vim /server/es/origin/elasticsearch.yml
修改/新增以下参数:
# 集群名称
cluster.name: docker-cluster
# 节点名称
node.name: node-1
# 单节点模式
discovery.type: single-node
# 网络绑定
network.host: 0.0.0.0
http.port: 9200
# 关闭安全认证(本地开发环境)
xpack.security.enabled: false
xpack.security.http.ssl.enabled: false
xpack.security.transport.ssl.enabled: false
四、准备构建目录并打包镜像
1. 创建构建目录
sudo mkdir -p /server/es/build
2. 复制配置文件到构建目录
sudo cp -r /server/es/origin/* /server/es/build/
sudo cp -r /server/es/origin/.??* /server/es/build/ 2>/dev/null
3. 复制时区文件
sudo cp /etc/localtime /server/es/build/localtime
sudo cp /etc/timezone /server/es/build/timezone
4. 修改权限(构建前处理)
cd /server/es/build
sudo chown -R 1000:0 .
5. 创建 Dockerfile
sudo vim /server/es/build/Dockerfile
内容:
FROM elasticsearch:9.0.1
ENV discovery.type=single-node \
ES_JAVA_OPTS="-Xms4g -Xmx4g -Duser.timezone=Asia/Shanghai"
COPY localtime /etc/localtime
COPY timezone /etc/timezone
COPY . /usr/share/elasticsearch/config
EXPOSE 9200 9300
CMD ["/usr/local/bin/docker-entrypoint.sh"]
6. 构建镜像
cd /server/es/build
sudo docker build -t es-bw:9.0.1 .
五、在 result 目录用新镜像测试
1. 准备测试目录
sudo mkdir -p /server/es/result/data
cd /server/es/result
2. 启动临时容器复制配置文件
sudo docker run -d --name es-verify es-bw:9.0.1 sleep 120
sudo docker cp es-verify:/usr/share/elasticsearch/config/. ./config/
sudo docker rm -f es-verify
3. 修权限
sudo chown -R 1000:0 config
find config -type f -exec chmod 644 {} \;
find config -type d -exec chmod 755 {} \;
sudo chown -R 1000:0 data
4. 确认配置文件内容正确
cat config/elasticsearch.yml
确认包含你修改的参数。
六、启动最终容器
sudo docker run -d \
--restart=always \
--name elasticsearch \
--network docker_network_es \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e "ELASTIC_PASSWORD=YourStrongPassw0rd" \
--privileged \
-v $(pwd)/config:/usr/share/elasticsearch/config \
-v $(pwd)/data:/usr/share/elasticsearch/data \
es-bw:9.0.1
七、验证服务
sleep 25
# 查看日志
sudo docker logs elasticsearch --tail 15
# 检查集群健康
curl http://localhost:9200/_cluster/health?pretty
# 检查节点信息
curl http://localhost:9200/
八、目录结构总结
/server/es/
├── origin/ # 从官方镜像复制出的原始配置文件
│ ├── elasticsearch.yml
│ ├── jvm.options
│ ├── log4j2.properties
│ └── ...
│
├── build/ # 构建上下文(用于打包镜像)
│ ├── Dockerfile
│ ├── elasticsearch.yml # 已修改参数
│ ├── jvm.options
│ ├── log4j2.properties
│ ├── localtime # 时区文件
│ └── timezone # 时区文件
│
└── result/ # 测试运行目录
├── config/ # 从镜像复制出的配置(可修改)
└── data/ # ES 运行数据(自动生成)
九、关键注意事项
| 事项 | 说明 |
|---|---|
| 数据目录不能 COPY | data 目录必须让 ES 首次启动自己初始化,否则会锁冲突 |
| 权限必须 1000:0 | ES 以 uid=1000 运行,config/data 都必须是 1000:0 |
| 不要用 chmod 777 | 777 权限会被 ES 安全机制拒绝,必须精确 644/755 + owner 1000 |
| 配置修改在宿主机 | 挂载后改 /server/es/result/config/elasticsearch.yml,重启即生效 |
| 修改配置后重启 | sudo docker restart elasticsearch |
| 安全关闭 | xpack.security.enabled: false 仅限本地开发,生产必须开启 |
留待后查,同时方便他人
联系我:ivesbao@163.com
联系我:ivesbao@163.com

浙公网安备 33010602011771号