Elasticsearch2.3官方Dockerfile解析
时间:2022-07-25
本文章向大家介绍Elasticsearch2.3官方Dockerfile解析,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言
- 作者博客:http://www.zimug.com*
- 最近在github上看到了Elasticsearch官方的Dockerfile的文档,感觉不错,有必要学习一下。
- 包括了安全考虑,和镜像entrypoint的设计也很巧妙
Elasticsearch2.3官方Dockerfile
Dockefile解析
# 使用Dockerhu的java:8-jre作为基础镜像,elashticsearch依赖于jdk7以上版本
FROM java:8-jre
# elashticsearch不能用root用户运行,所以安装gosu.用法: ./gosu user-spec command [args],
# 这样可以用指定的用户,运行指定的程序,gosu版本是GOSU_VERSION
# wget下载,mktemp -d创建临时目录,gpg去公钥服务器下载公钥并校验
# 增加gosu执行权限,gosu nobody true切换到nobody用户,安全
ENV GOSU_VERSION 1.7
RUN set -x
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)"
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc"
&& export GNUPGHOME="$(mktemp -d)"
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu
&& rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc
&& chmod +x /usr/local/bin/gosu
&& gosu nobody true
# apt-key是Debian软件包的安全管理工具。每个发布的deb包,都是通过密钥认证的,apt-key用来管理密钥。
# https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-repositories.html
# https://packages.elasticsearch.org/GPG-KEY-elasticsearch
RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 46095ACC8548582C1A2699A9D27D666CD88E42B4
# 大版本,小版本,版本库URL
ENV ELASTICSEARCH_MAJOR 2.3
ENV ELASTICSEARCH_VERSION 2.3.3
ENV ELASTICSEARCH_REPO_BASE http://packages.elasticsearch.org/elasticsearch/2.x/debian
RUN echo "deb $ELASTICSEARCH_REPO_BASE stable main" > /etc/apt/sources.list.d/elasticsearch.list
# 安装ELASTICSEARCH
RUN set -x
&& apt-get update
&& apt-get install -y --no-install-recommends elasticsearch=$ELASTICSEARCH_VERSION
&& rm -rf /var/lib/apt/lists/*
# 将ELASTICSEARCH的bin目录加入环境变量目录
ENV PATH /usr/share/elasticsearch/bin:$PATH
# 工作目录
WORKDIR /usr/share/elasticsearch
# 工作目录下面新建四个目录,并修改拥有者为elasticsearch
RUN set -ex
&& for path in
./data
./logs
./config
./config/scripts
; do
mkdir -p "$path";
chown -R elasticsearch:elasticsearch "$path";
done
#将config目录放到工作目录下,config目录的配置内容请参考elasticsearch
COPY config ./config
# 数据卷映射
VOLUME /usr/share/elasticsearch/data
# 将入口执行文件放到"/"根目录下面
COPY docker-entrypoint.sh /
# 端口映射
EXPOSE 9200 9300
# 容器启动入口,/docker-entrypoint.sh是入口文件 ,elasticsearch是参数
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["elasticsearch"]
入口文件docker-entrypoint.sh解析
#!/bin/bash
# set -e 若shell中的指令不返回0,立即退出shell
set -e
# 第一个传入参数的第一个字符是"-"么?如果是,执行elasticsearch 和参数"$@"."$@"是参数列表
if [ "${1:0:1}" = '-' ]; then
set -- elasticsearch "$@"
fi
# 如果参数1是elasticsearch,并且是root用户
if [ "$1" = 'elasticsearch' -a "$(id -u)" = '0' ]; then
# 变更/usr/share/elasticsearch/data的拥有者为elasticsearch
chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/data
# 设置参数列表"$@"= 1.gosu 2.elasticsearch 3.原始参数列表"$@"
set -- gosu elasticsearch "$@"
#注意脚本最后的exec "$@"实际就是:exec gosu elasticsearch "$@"
fi
# 如果参数中没有 elasticsearch,表示用户希望运行自己的其他进程
# 如通过 `bash` shell 进入容器内部
exec "$@"
喜欢 (9)or分享 (0)
- ASP.NET 2.0 中 Web 事件
- Visual Studio 必备可视化插件推荐
- WordPress 路径相关函数总结(一):站点路径相关函数
- 在 ASP.NET 2.0 中,Global.asax 文件没有后置代码,如何将Globa.asax中的页面移到代码文件中
- 如何启用WSS 3的匿名用户访问
- 移除 WordPress 后台“外观-主题” 管理功能
- 移除 WordPress 后台插件管理的“编辑”与“停用”功能
- 区域设置 ID (LCID) 表
- jquery 表单事件
- Jexus以.NET(Phalanger)方式支持PHP的网站
- jquery鼠标事件
- Jexus 负载均衡
- 用.NET Framework 2.0创建 Form设计器[翻译]
- jquery事件绑定
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flink SQL FileSystem Connector 分区提交与自定义小文件合并策略
- Facebook面试题: 用递归和迭代手写Array.prototype.flat()
- Kubernetes插件之ip-masq-agent
- 抽丝剥茧Kotlin - 协程
- 使用Java8中的Optional类来消除代码中的null检查
- 通俗讲解从Transformer到BERT模型!
- 「R」使用有限混合模型
- Kaggle经典数据分析项目:泰坦尼克号生存预测!
- 零基础学习梯度下降算法
- Spring JPA 依赖配置
- Spring JPA 核心概念
- Spring JPA 查询
- 初学者指南:利用SVD创建推荐系统
- 聊一聊面试中经常被问到的Tree Shaking
- 「Workshop」第十四期:线性回归