【摘要】在信创环境下一键制作arm64v8-elasticsearch6.5.4镜像。
一、前言
二、制作说明
需要提前下载的文件
elasticsearch-6.5.4.rpm安装包、elasticsearch-6.5.4.tar.gz安装包 elasticsearch.yml配置文件 arm64v8/centos:7的docker镜像 sysctl.conf文件 Dockerfile文件 一键制作的脚本文件
镜像准备
$ docker pull arm64v8/centos:7
复制
三、采用rpm的方式制作ES镜像
3.1 编写elasticsearch.yml文件
#集群名称
cluster.name: elasticsearch
#节点名称
node.name: es-node
#数据和日志存储目录
path.data: /usr/share/elasticsearch/data
path.logs: /usr/share/elasticsearch/log
#内存交换的选项,官网建议为true
bootstrap.memory_lock: true
#网关设置,设置 host 为 0.0.0.0 ,即可启用该物理机器所有网卡网络访问
network.host: 0.0.0.0
#设置对外服务的http端口,默认为9200
http.port: 9200
#es节点之间通信的端口,默认为 9300
transport.tcp.port: 9300
#解决跨域问题
http.cors.enabled: true
http.cors.allow-origin: "*"
#xpack组件关闭 (x-pack不支持linux-aarch64)
xpack.ml.enabled: false复制
3.2 编写sysctl.conf文件
vm.max_map_count=655360
复制
3.3 编写Dockerfile文件
FROM xiaohezi/centos7:jdk1.8
MAINTAINER xiaohezi
USER es
WORKDIR /usr/share/elasticsearch
VOLUME ["/usr/share/elasticsearch/data","/usr/share/elasticsearch/log"]
CMD ["/usr/share/elasticsearch/bin/elasticsearch"]
EXPOSE 9200 9300复制
3.4 编写一键制作的脚本文件build-elasticsearch-rpm.sh
#!/bin/bash
###############################################################
# 作者:何昌涛
# 脚本名:build-elasticsearch-rpm.sh
# 时间:2022-09-14
# 功能描述:arm64-v8-elasticsearch6.5.4镜像制作脚本
###############################################################
cd `dirname $0`
SH_PATH=`pwd`
BASE_PATH=${SH_PATH%/*}
echo ""
echo ""
echo "#########################################################"
echo "# 在线拉取arm64v8/centos:7镜像并启动 -- 开始 #"
echo "#########################################################"
docker run --privileged -it -d --name centos01 arm64v8/centos:7 /usr/sbin/init
echo "#########################################################"
echo "# 在线拉取arm64v8/centos:7镜像并启动 -- 结束 #"
echo "#########################################################"
echo ""
echo ""
echo "#########################################################"
echo "# 进入容器,并下载相关依赖 -- 开始 #"
echo "#########################################################"
#进入容器
docker exec -i centos01 bash << EOF
#下载相关依赖
yum install -y java-1.8.0-openjdk
yum install -y unzip
yum install -y net-tools
yum install -y sudo
yum install -y vim
exit
EOF
echo "#########################################################"
echo "# 进入容器,并下载相关依赖 -- 结束 #"
echo "#########################################################"
echo ""
echo ""
echo "#########################################################"
echo "# 向容器中拷贝es安装包以及es依赖配置文件 -- 开始 #"
echo "#########################################################"
docker cp ./elasticsearch-6.5.4.rpm centos01:/usr/local/src/
docker cp ./sysctl.conf centos01:/etc/
echo "#########################################################"
echo "# 向容器中拷贝es安装包以及es依赖配置文件 -- 结束 #"
echo "#########################################################"
echo ""
echo ""
echo "#########################################################"
echo "# 进入容器安装es并修改es依赖配置文件 -- 开始 #"
echo "#########################################################"
#进入容器
docker exec -i centos01 bash << EOF
#rpm方式安装es
cd /usr/local/src/ && rpm -ivh elasticsearch-6.5.4.rpm --nodeps --force
#新建用户
useradd es
#赋予权限
chown -R es:es /etc/elasticsearch/
chown -R es:es /usr/share/elasticsearch/
chown -R es:es /usr/lib/systemd/system/elasticsearch.service
chown -R es:es /etc/sysconfig/elasticsearch
chown -R es:es /var/lib/elasticsearch
chown -R es:es /var/log/elasticsearch
mkdir -p /data/elasticsearch/data && mkdir /data/elasticsearch/log
chown -R es:es /data && chown -R es:es /data/elasticsearch
#修改/etc/sysctl.conf文件中的参数,并使生效
sysctl -p
#修改/etc/security/limits.conf文件中的参数
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 131072" >> /etc/security/limits.conf
echo "* soft nproc 2048" >> /etc/security/limits.conf
echo "* hard nproc 4096" >> /etc/security/limits.conf
#配置es服务
sudo systemctl daemon-reload
#将es设置为开机自启动
systemctl enable elasticsearch.service
exit
EOF
echo "#########################################################"
echo "# 进入容器安装es并修改es依赖配置文件 -- 结束 #"
echo "#########################################################"
echo ""
echo ""
echo "#########################################################"
echo "# 制作xiaohezi/centos7:jdk1.8镜像 -- 开始 #"
echo "#########################################################"
docker commit -a "xiaohezi" centos01 xiaohezi/centos7:jdk1.8
echo "#########################################################"
echo "# 制作xiaohezi/centos7:jdk1.8镜像 -- 结束 #"
echo "#########################################################"
echo ""
echo ""
echo "#########################################################"
echo "#利用Dockerfile制作arm64/elasticsearch:6.5.4镜像--开始 #"
echo "#########################################################"
docker build -f ./rpm/Dockerfile -t arm64/elasticsearch:6.5.4 .
echo "#########################################################"
echo "#利用Dockerfile制作arm64/elasticsearch:6.5.4镜像--结束 #"
echo "#########################################################"复制
3.5 完整目录

3.6 一键制作镜像
$ ./build-elasticsearch-rpm.sh
复制
四、采用tar包的方式制作ES镜像
4.1 编写elasticsearch.yml文件
#集群名称
cluster.name: elasticsearch
#节点名称
node.name: es-node
#数据和日志存储目录
path.data: /usr/share/elasticsearch/data
path.logs: /usr/share/elasticsearch/log
#内存交换的选项,官网建议为true
bootstrap.memory_lock: true
#网关设置,设置 host 为 0.0.0.0 ,即可启用该物理机器所有网卡网络访问
network.host: 0.0.0.0
#设置对外服务的http端口,默认为9200
http.port: 9200
#es节点之间通信的端口,默认为 9300
transport.tcp.port: 9300
#解决跨域问题
http.cors.enabled: true
http.cors.allow-origin: "*"
#xpack组件关闭 (x-pack不支持linux-aarch64)
xpack.ml.enabled: false复制
4.2 编写sysctl.conf文件
vm.max_map_count=655360
复制
4.3 编写Dockerfile文件
FROM xiaohezi/centos7:jdk1.8
ENV VERSION=6.5.4
MAINTAINER xiaohezi
COPY ./elasticsearch-${VERSION}.tar.gz /usr/local
RUN cd /usr/local && tar zxvf elasticsearch-${VERSION}.tar.gz && rm -f elasticsearch-${VERSION}.tar.gz
RUN mkdir -p /data/elasticsearch/data && mkdir /data/elasticsearch/log
ADD ./elasticsearch.yml /usr/local/elasticsearch-${VERSION}/config/elasticsearch.yml
RUN useradd es
RUN chown -R es:es /usr/local/elasticsearch-${VERSION}/ && chown -R es:es /data
USER es
#WORKDIR指令用于指定容器的一个目录, 容器启动时执行的命令会在该目录下执行
WORKDIR /usr/local/elasticsearch-${VERSION}
#目录就会在运行时自动挂载为匿名卷,任何向/data/elasticsearch/data中写入的信息都不会记录进容器存储层,从而保证了容器存储层的无状态化
VOLUME ["/data/elasticsearch/data","/data/elasticsearch/log"]
#CMD用于设置默认执行的命令
CMD ["/usr/local/elasticsearch-6.5.4/bin/elasticsearch"]
EXPOSE 9200 9300复制
4.4 编写一键制作的脚本文件build-elasticsearch.sh
#!/bin/bash
###############################################################
# 作者:何昌涛
# 脚本名:build-elasticsearch.sh
# 时间:2022-09-14
# 功能描述:arm64-v8-elasticsearch6.5.4镜像制作脚本
###############################################################
cd `dirname $0`
SH_PATH=`pwd`
BASE_PATH=${SH_PATH%/*}
echo ""
echo ""
echo "#########################################################"
echo "# 在线拉取arm64v8/centos:7镜像并启动 -- 开始 #"
echo "#########################################################"
docker run --privileged -it -d --name centos01 arm64v8/centos:7 /usr/sbin/init
echo "#########################################################"
echo "# 在线拉取arm64v8/centos:7镜像并启动 -- 结束 #"
echo "#########################################################"
sleep 10s
echo ""
echo ""
echo "#########################################################"
echo "# 进入容器,并下载相关依赖 -- 开始 #"
echo "#########################################################"
#进入容器
docker exec -i centos01 bash << EOF
yum install -y java-1.8.0-openjdk
yum install -y unzip
yum install -y net-tools
yum install -y sudo
exit
EOF
sleep 10s
echo "#########################################################"
echo "# 进入容器,并下载相关依赖 -- 结束 #"
echo "#########################################################"
echo ""
echo ""
echo "#########################################################"
echo "# 向容器中拷贝es安装包以及es依赖配置文件 -- 开始 #"
echo "#########################################################"
docker cp ./sysctl.conf centos01:/etc/
echo "#########################################################"
echo "# 向容器中拷贝es安装包以及es依赖配置文件 -- 结束 #"
echo "#########################################################"
echo ""
echo ""
echo "#########################################################"
echo "# 进入容器并修改es依赖配置文件 -- 开始 #"
echo "#########################################################"
#进入容器
docker exec -i centos01 bash << EOF
#修改/etc/sysctl.conf文件中的参数,并使生效
sysctl -p
#修改/etc/security/limits.conf文件中的参数
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 131072" >> /etc/security/limits.conf
echo "* soft nproc 2048" >> /etc/security/limits.conf
echo "* hard nproc 4096" >> /etc/security/limits.conf
exit
EOF
echo "#########################################################"
echo "# 进入容器并修改es依赖配置文件 -- 结束 #"
echo "#########################################################"
echo ""
echo ""
echo "#########################################################"
echo "# 制作xiaohezi/centos7:jdk1.8镜像 -- 开始 #"
echo "#########################################################"
docker commit -a "xiaohezi" centos01 xiaohezi/centos7:jdk1.8
echo "#########################################################"
echo "# 制作xiaohezi/centos7:jdk1.8镜像 -- 结束 #"
echo "#########################################################"
echo ""
echo ""
echo "#########################################################"
echo "#利用Dockerfile制作arm64/elasticsearch:6.5.4镜像--开始 #"
echo "#########################################################"
docker build -f ./Dockerfile -t arm64/elasticsearch:6.5.4 .
echo "#########################################################"
echo "#利用Dockerfile制作arm64/elasticsearch:6.5.4镜像--结束 #"
echo "#########################################################"复制
注:上面是通过脚本的方式,对容器进行环境初始化,然后再将容器制作成镜像,当然这部分也可以用Dockerfile来完成。推荐使用Dockerfile来构建镜像。
4.5 完整目录结构

4.6 一键制作镜像
$ ./build-elasticsearch.sh
复制
五、优化
5.1 基础镜像的选择 (FROM)
基本原则
官方镜像优于非官方的镜像,如果没有官方镜像,则尽量选择Dockerfile开源的 固定版本tag而不是每次都使用latest 尽量选择体积小的镜像(同一个版本,不同的TAG,其镜像大小也不一样)
示例1:拉取nginx两个TAG的镜像
$ docker pull nginx:1.21.4-alpine
$ docker pull nginx:1.21.4复制
通过docker images nginx 查看镜像
$ docker images nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.21.4 ea335eea17ab 4 days ago 141MB
nginx 1.21.4-alpine b46db85084b8 9 days ago 23.2MB复制
注:通过上面可以看到同样的版本,不同的TAG,其大小相差很多。这和构建镜像时采用的基础镜像体积大小有关。比如nginx:1.21.4-alpine构建基础镜像时采用的是alpine这个linux作为基础镜像,alpine linux本身就非常小。当然由于体积小,将来可能安装某些软件就比较麻烦,所以适合自己的才是最好的。
5.2 镜像的大小和分层
如下改进版Elasticsearch的Dockerfile
FROM pkulaw/centos7:jdk1.8
ENV VERSION=6.5.4
MAINTAINER xiaohezi
COPY ./elasticsearch-${VERSION}.tar.gz /usr/local
RUN cd /usr/local && tar zxvf elasticsearch-${VERSION}.tar.gz && \
rm -f elasticsearch-${VERSION}.tar.gz && \
mkdir -p /data/elasticsearch/data && \
mkdir -p /data/elasticsearch/log && \
useradd es && \
chown -R es:es /usr/local/elasticsearch-${VERSION}/ && \
chown -R es:es /data
ADD ./elasticsearch.yml /usr/local/elasticsearch-${VERSION}/config/elasticsearch.yml
USER es
#WORKDIR指令用于指定容器的一个目录, 容器启动时执行的命令会在该目录下执行
WORKDIR /usr/local/elasticsearch-${VERSION}
#目录就会在运行时自动挂载为匿名卷,任何向/data/elasticsearch/data中写入的信息都不会记录进容器存储层,从而保证了容器存储层的无状态化
VOLUME ["/data/elasticsearch/data","/data/elasticsearch/log"]
#CMD用于设置默认执行的命令
CMD ["/usr/local/elasticsearch-6.5.4/bin/elasticsearch"]
EXPOSE 9200 9300复制
通过改进,只有一个RUN,只有一层。
六、预告
下篇我们来排一排Dockerfile完全指南,包含文件复制和目录操作、构建参数和环境变量 (ARG vs ENV)、CMD 和ENTRYPOINT命令、合理使用缓存以及合理使用 .dockerignore等内容,敬请期待!
文章转载自架构至美,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
为什么 Apache Doris 是比 Elasticsearch 更好的实时分析替代方案?
SelectDB
132次阅读
2025-03-27 17:56:44
【第 8 期】搜索客 Meetup - Elasticsearch 的一些“双刃剑”特性
极限实验室
122次阅读
2025-03-15 16:56:54
拉卡拉 x Apache Doris:统一金融场景 OLAP 引擎,查询提速 15 倍,资源直降 52%
SelectDB
105次阅读
2025-04-02 17:52:59
Apache Doris vs Elasticsearch:深入对比分析
数据微光
36次阅读
2025-03-24 09:42:38
使用 INFINI Gateway 保护 Elasticsearch 集群之修改查询不合理参数(二)
极限实验室
34次阅读
2025-03-17 23:49:01
Oracle GoldenGate实现数据库同步
luyingjun
32次阅读
2025-03-30 23:25:52
使用 INFINI Gateway 保护 Elasticsearch 集群之修改查询不合理参数(一)
极限实验室
26次阅读
2025-03-16 13:21:27
oracle11g迁移步骤win2008
PureSoybean
24次阅读
2025-03-28 12:13:25
dg库拉起脚本
www
23次阅读
2025-04-02 10:04:35
docker安装jenkins
IT那活儿
22次阅读
2025-03-31 10:00:41