一、介绍

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

二、安装docker

本文使用的是centos7.5(CentOS-7-x86_64-Minimal-1804) 系统。

请确保本机有2G的内存。因为elasticsearch会占用1G内存。

安装docker

yum安装docker

yum install -y docker-io

需要添加国内镜像源

vim /etc/docker/daemon.json

默认内容是{},修改效果如下:

{
"registry-mirrors": ["https://registry.docker-cn.com"]
}

重启docker服务

systemctl restart docker

安装docker命令补全工具

yum install -y bash-completion

注意:必须要退出终端,重新登录一次才能生效。

下载centos系统镜像

docker pull centos

这个镜像就是centos7的

三、安装elasticsearch

下载rpm安装就可以了

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.rpm

使用centos镜像启动一个容器

docker run -it docker.io/centos /bin/bash

进入容器之后,先安装wget和java,并清理rpm包

yum install -y wget java-1.8.-openjdk && yum clean all

下载elasticsearch的rpm包并安装

rpm -ivh elasticsearch-6.2..rpm && rm -f elasticsearch-6.2..rpm 

修改配置文件

sed -i '55s/#network.host: 192.168.0.1/network.host: 0.0.0.0/g' /etc/elasticsearch/elasticsearch.yml
sed -i '59s/#http.port: 9200/http.port: 9200/g' /etc/elasticsearch/elasticsearch.yml

启动elasticsearch服务

runuser -s /bin/bash -l elasticsearch -c "/usr/share/elasticsearch/bin/elasticsearch"

注意:不能使用systemctl命令启动elasticsearch服务,必须要以特权模式运行才行!

比如 docker run -it docker.io/centos privileged=true /bin/bash

四、编写Dockerfile

Dockerfile

新建一个空目录,编译文件Dockerfile

mkdir /opt/elasticsearch
vi /opt/elasticsearch/Dockerfile

内容如下:

FROM centos

RUN yum install -y wget java-1.8.-openjdk && yum clean all && \
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.rpm && \
rpm -ivh elasticsearch-6.2..rpm && rm -f elasticsearch-6.2..rpm && \
sed -i '55s/#network.host: 192.168.0.1/network.host: 0.0.0.0/g' /etc/elasticsearch/elasticsearch.yml && \
sed -i '59s/#http.port: 9200/http.port: 9200/g' /etc/elasticsearch/elasticsearch.yml
EXPOSE
ENTRYPOINT runuser -s /bin/bash -l elasticsearch -c "/usr/share/elasticsearch/bin/elasticsearch"

注意:每执行一次RUN,镜像就会增加一层。层数越多,镜像体积越大。

为了避免多次RUN,把相关命令统一到一个RUN中。

EXPOSE 9200 表示要暴露的端口号

ENTRYPOINT 表示镜像run起来之后,默认要执行的命令

runuser 指定用户执行命令。

  • -s 指定环境变量
  • -l 指定用户
  • -c 执行的命令

编排镜像

docker build -t elasticsearch /opt/elasticsearch

启动容器

docker run -it elasticsearch

默认会直接调用命令 runuser -s /bin/bash -l elasticsearch -c "/usr/share/elasticsearch/bin/elasticsearch"

输出如下:

runuser: warning: cannot change directory to /home/elasticsearch: No such file or directory
OpenJDK -Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
[--07T10::,][INFO ][o.e.n.Node ] [] initializing ...
[--07T10::,][INFO ][o.e.e.NodeEnvironment ] [qDmU4u_] using [] data paths, mounts [[/ (rootfs)]], net usable_space [15gb], net total_space [.9gb], types [rootfs]
[--07T10::,][INFO ][o.e.e.NodeEnvironment ] [qDmU4u_] heap size [.6mb], compressed ordinary object pointers [true]
[--07T10::,][INFO ][o.e.n.Node ] node name [qDmU4u_] derived from node ID [qDmU4u_NTNKmpXVV-5vlEQ]; set [node.name] to override
[--07T10::,][INFO ][o.e.n.Node ] version[6.2.], pid[], build[ccec39f/--12T20::.497551Z], OS[Linux/3.10.-.el7.x86_64/amd64], JVM[Oracle Corporation/OpenJDK -Bit Server VM/1.8.0_191/25.191-b12]
[--07T10::,][INFO ][o.e.n.Node ] JVM arguments [-Xms1g, -Xmx1g, -XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=, -XX:+UseCMSInitiatingOccupancyOnly, -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-, -Djna.nosys=true, -XX:-OmitStackTraceInFastThrow, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true, -Djava.io.tmpdir=/tmp/elasticsearch.C8ZXNqCd, -XX:+HeapDumpOnOutOfMemoryError, -XX:HeapDumpPath=/var/lib/elasticsearch, -XX:+PrintGCDetails, -XX:+PrintGCDateStamps, -XX:+PrintTenuringDistribution, -XX:+PrintGCApplicationStoppedTime, -Xloggc:/var/log/elasticsearch/gc.log, -XX:+UseGCLogFileRotation, -XX:NumberOfGCLogFiles=, -XX:GCLogFileSize=64m, -Des.path.home=/usr/share/elasticsearch, -Des.path.conf=/etc/elasticsearch]
[--07T10::,][INFO ][o.e.p.PluginsService ] [qDmU4u_] loaded module [aggs-matrix-stats]
[--07T10::,][INFO ][o.e.p.PluginsService ] [qDmU4u_] loaded module [analysis-common]
[--07T10::,][INFO ][o.e.p.PluginsService ] [qDmU4u_] loaded module [ingest-common]
[--07T10::,][INFO ][o.e.p.PluginsService ] [qDmU4u_] loaded module [lang-expression]
[--07T10::,][INFO ][o.e.p.PluginsService ] [qDmU4u_] loaded module [lang-mustache]
[--07T10::,][INFO ][o.e.p.PluginsService ] [qDmU4u_] loaded module [lang-painless]
[--07T10::,][INFO ][o.e.p.PluginsService ] [qDmU4u_] loaded module [mapper-extras]
[--07T10::,][INFO ][o.e.p.PluginsService ] [qDmU4u_] loaded module [parent-join]
[--07T10::,][INFO ][o.e.p.PluginsService ] [qDmU4u_] loaded module [percolator]
[--07T10::,][INFO ][o.e.p.PluginsService ] [qDmU4u_] loaded module [rank-eval]
[--07T10::,][INFO ][o.e.p.PluginsService ] [qDmU4u_] loaded module [reindex]
[--07T10::,][INFO ][o.e.p.PluginsService ] [qDmU4u_] loaded module [repository-url]
[--07T10::,][INFO ][o.e.p.PluginsService ] [qDmU4u_] loaded module [transport-netty4]
[--07T10::,][INFO ][o.e.p.PluginsService ] [qDmU4u_] loaded module [tribe]
[--07T10::,][INFO ][o.e.p.PluginsService ] [qDmU4u_] no plugins loaded
[--07T10::,][INFO ][o.e.d.DiscoveryModule ] [qDmU4u_] using discovery type [zen]
[--07T10::,][INFO ][o.e.n.Node ] initialized
[--07T10::,][INFO ][o.e.n.Node ] [qDmU4u_] starting ...
[--07T10::,][INFO ][o.e.t.TransportService ] [qDmU4u_] publish_address {172.17.0.2:}, bound_addresses {[::]:}
[--07T10::,][INFO ][o.e.b.BootstrapChecks ] [qDmU4u_] bound or publishing to a non-loopback address, enforcing bootstrap checks
[--07T10::,][INFO ][o.e.c.s.MasterService ] [qDmU4u_] zen-disco-elected-as-master ([] nodes joined), reason: new_master {qDmU4u_}{qDmU4u_NTNKmpXVV-5vlEQ}{Terj8KYoQvWwHYsUYkNNyA}{172.17.0.2}{172.17.0.2:}
[--07T10::,][INFO ][o.e.c.s.ClusterApplierService] [qDmU4u_] new_master {qDmU4u_}{qDmU4u_NTNKmpXVV-5vlEQ}{Terj8KYoQvWwHYsUYkNNyA}{172.17.0.2}{172.17.0.2:}, reason: apply cluster state (from master [master {qDmU4u_}{qDmU4u_NTNKmpXVV-5vlEQ}{Terj8KYoQvWwHYsUYkNNyA}{172.17.0.2}{172.17.0.2:} committed version [] source [zen-disco-elected-as-master ([] nodes joined)]])
[--07T10::,][INFO ][o.e.h.n.Netty4HttpServerTransport] [qDmU4u_] publish_address {172.17.0.2:}, bound_addresses {[::]:}
[--07T10::,][INFO ][o.e.n.Node ] [qDmU4u_] started
[--07T10::,][INFO ][o.e.g.GatewayService ] [qDmU4u_] recovered [] indices into cluster_state

它会一值hold住,监听9200端口

但是一般,我们需要将本机和容器做一个端口映射,要这样启动容器

docker run -p 9200:9200 -d -it el

-p 表示端口映射,hostPort : containerPort,左边是本机的,右边是容器的

-d 表示后台运行

注意:这个2个参数要写在前面,不能写在后面

等待10秒,查看端口状态

[root@localhost el]# netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
tcp 127.0.0.1: 0.0.0.0:* LISTEN /master
tcp 192.168.91.133: 192.168.91.1: ESTABLISHED /sshd: root@pt
tcp6 0 0 :::9200 :::* LISTEN 17942/docker-proxy-
tcp6 ::: :::* LISTEN /sshd
tcp6 ::: :::* LISTEN /master

通过以上信息,就可以看到端口起来了

访问url

http://192.168.91.133:9200/

页面输出:

{
"name" : "-sawdKe",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "_7kUiLEyQBSnLQSOGxijtw",
"version" : {
"number" : "6.2.4",
"build_hash" : "ccec39f",
"build_date" : "2018-04-12T20:37:28.497551Z",
"build_snapshot" : false,
"lucene_version" : "7.2.1",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}

备注:

如果不使用容器安装elasticsearch,直接使用以下命令,就可以启动elasticsearch

systemctl daemon-reload
systemctl start elasticsearch.service
systemctl enable elasticsearch.service

不要天真的以为,它就是以root用户运行的

看/usr/lib/systemd/system/elasticsearch 文件,它里面定义了运行用户是elasticsearch

所以实际运行用户还是elasticsearch

基于docker 搭建Elasticsearch6.2.4(centos)的更多相关文章

  1. 基于Docker搭建大数据集群(一)Docker环境部署

    本篇文章是基于Docker搭建大数据集群系列的开篇之作 主要内容 docker搭建 docker部署CentOS 容器免密钥通信 容器保存成镜像 docker镜像发布 环境 Linux 7.6 一.D ...

  2. [转帖]基于docker 搭建Prometheus+Grafana

    基于docker 搭建Prometheus+Grafana https://www.cnblogs.com/xiao987334176/p/9930517.html need good study 一 ...

  3. 基于docker搭建开源扫描器——伏羲

    基于docker搭建开源扫描器——伏羲 1.简介 项目地址 伏羲是一款开源的安全检测工具,适用于中小型企业对企业内部进行安全检测和资产统计. 功能一览: 基于插件的漏洞扫描功能(类似于巡风) 漏洞管理 ...

  4. 基于Docker搭建大数据集群(六)Hive搭建

    基于Docker搭建大数据集群(六)Hive搭建 前言 之前搭建的都是1.x版本,这次搭建的是hive3.1.2版本的..还是有一点细节不一样的 Hive现在解析引擎可以选择spark,我是用spar ...

  5. 基于Docker搭建大数据集群(七)Hbase部署

    基于Docker搭建大数据集群(七)Hbase搭建 一.安装包准备 Hbase官网下载 微云下载 | 在 tar 目录下 二.版本兼容 三.角色分配 节点 Master Regionserver cl ...

  6. 基于Docker搭建分布式消息队列Kafka

    本文基于Docker搭建一套单节点的Kafka消息队列,Kafka依赖Zookeeper为其管理集群信息,虽然本例不涉及集群,但是该有的组件都还是会有,典型的kafka分布式架构如下图所示.本例搭建的 ...

  7. 基于 Docker 搭建 Consul 多数据中心集群

    本文介绍了在 Windows 10 上基于 Docker 搭建 Consul 多数据中心集群的步骤,包括 Consul 镜像的拉取和容器的创建,每个数据中心对应服务端节点和客户节点的创建,节点之间相互 ...

  8. 基于Docker搭建Hadoop+Hive

    为配合生产hadoop使用,在本地搭建测试环境,使用docker环境实现(主要是省事~),拉取阿里云已有hadoop镜像基础上,安装hive组件,参考下面两个专栏文章: 克里斯:基于 Docker 构 ...

  9. 庐山真面目之十二微服务架构基于Docker搭建Consul集群、Ocelot网关集群和IdentityServer版本实现

    庐山真面目之十二微服务架构基于Docker搭建Consul集群.Ocelot网关集群和IdentityServer版本实现 一.简介      在第七篇文章<庐山真面目之七微服务架构Consul ...

随机推荐

  1. [老法新用]使用PADDING-TOP:(PERCENTAGE)实现响应式背景图片

    处理响应式布局中背景图片的简单方法是等比例缩放背景图片.我们知道宽度设为百分比的  <img> 元素,其高度会随着宽度的变化自动调整,且其宽高比不变.如果想在背景图片中实现同样的效果,我们 ...

  2. P2831 愤怒的小鸟

    P2831 愤怒的小鸟 从 \((0, 0)\) 发射一只鸟, 轨迹满足抛物线, 问最少几只鸟可以打完 \(n <= 18\) 只猪 错误日志: 处理抛物线数组没有初始化 Solution 数据 ...

  3. 针对《面试心得与总结—BAT、网易、蘑菇街》一文中出现的技术问题的收集与整理

    最近,我在ImportNew网站上,看到了这篇文章,觉得总结的非常好,就默默的收藏起来了,觉得日后一定要好好整理学习一下,昨天突然发现在脉脉的行业头条中,居然也推送了这篇文章,更加坚定了我整理的信心. ...

  4. Spring Boot 使用properties如何多环境配置

        当我们使用properties文件作为Spring Boot的配置文件而不是yaml文件时,怎样实现多环境使用不同的配置信息呢?     在Spring Boot中,多环境配置的文件名需要满足 ...

  5. 转:Block原理及引用循环问题

    2010年WWDC发布iOS4时Apple对Objective-C进行了一次重要的升级:支持Block.说到底这东西就是闭包,其他高级语音例如Java和C++已有支持,第一次使用Block感觉满简单好 ...

  6. 高质量API网关组件实现

    PI网关组件的作用? 1.网关直接代替MVC当中的Controller层,减少编码量提高开发效率 2.统一API接口的出入参格式,提高API的友好性 3.自动检测API接口规范,提高接口的质量 4.统 ...

  7. ActiveMQ队列消息过期时间设置和自动清除解决方案

    版本 apache-activemq-5.15.3 1.消息过期设置 参数详情 1)message过期则客户端不能接收 2)ttlCeiling:表示过期时间上限(程序写的过期时间不能超过此时间,超过 ...

  8. ASP.NET 数据库缓存依赖

    By Peter A. Bromberg, Ph.D. 在ASP.NET中,Cache类最酷的特点是它能根据各种依赖来良好的控制自己的行为.以文件为基础的依赖是最有用的,文件依赖项是通过使用 Cach ...

  9. WPF让人哭笑不得的BUG

    前几天遇到了一个让我哭笑不得的bug,我写的Wpf程序在Win7里可以运行,到XP.WindowsServer里运行点击某个控件之后闪退,不报任何错,在后台代码里trycatch也捕捉不到任何异常.很 ...

  10. Android 动态添加线性布局(.java文件内) 实现控件按比例分割空间

    这里实现 两个 编辑框同一水平上 按1:1分割空间 这里的1:1 比例可以通过 lp1.weight :  1p2.weight  =m:n 实现 { LinearLayout l=new Linea ...