why use docker
- 學(xué)習(xí)docker
- 快,配置和宿主機環(huán)境無關(guān),很方便的遷移埋市,也就是說,看我這篇文章的人命贴,能在幾分鐘內(nèi)啟動一個es集群
requirement
- 需要對docker有一定的了解道宅,看這篇文章的人食听,肯定滿足這個要求
- 對es有一定的了解
start
首先我們要明確一點的是,我們使用docker來啟動es污茵,我們需要將es的配置以及存儲路徑映射到宿主機上樱报,不然我們無法修改es配置或容器關(guān)閉后會丟失存儲的內(nèi)容。
所以省咨,我們第一步做的事是肃弟,建立每個es節(jié)點的配置文件以及存儲路徑。就像以下的文件目錄結(jié)構(gòu)零蓉。
es1.yml內(nèi)容如下
cluster.name: elasticsearch-cluster
node.name: es-node1
network.bind_host: 0.0.0.0
network.publish_host: _eth0_
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.seed_hosts: ["ES01:9300","ES02:9301","ES03:9302"]
cluster.initial_master_nodes: ["es-node1","es-node2","es-node3"]
discovery.zen.minimum_master_nodes: 1
對應(yīng)的es2.yml和es3.yml只需要修改node.name為es-node2
和es-node3
即可笤受。
接下來就是本文最核心的部分了,使用docker-compose啟動es集群敌蜂。
在任意目錄下箩兽,新建一個docker-compose.yml或docker-compose.yaml文件。(必須為這個名字)
文件內(nèi)容如下
version: '3.7'
services:
es1:
image: es:4.0
container_name: ES01
environment:
- ES_JAVA_OPTS=-Xms256m -Xmx256m
ports:
- "9200:9200"
- "9300:9300"
volumes:
- /Users/chengchaojie/docker/es/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /Users/chengchaojie/docker/es/data1:/usr/share/elasticsearch/data
networks:
- es-net
es2:
image: es:4.0
container_name: ES02
environment:
- ES_JAVA_OPTS=-Xms256m -Xmx256m
ports:
- "9201:9200"
- "9301:9300"
volumes:
- /Users/chengchaojie/docker/es/config/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /Users/chengchaojie/docker/es/data2:/usr/share/elasticsearch/data
networks:
- es-net
es3:
image: es:4.0
container_name: ES03
environment:
- ES_JAVA_OPTS=-Xms256m -Xmx256m
ports:
- "9202:9200"
- "9302:9300"
volumes:
- /Users/chengchaojie/docker/es/config/es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /Users/chengchaojie/docker/es/data3:/usr/share/elasticsearch/data
networks:
- es-net
es-head:
image: tobias74/elasticsearch-head
ports:
- "9100:9100"
networks:
es-net:
driver: bridge
把es:4.0
替換為你本地所擁有的的es鏡像章喉,把Users/chengchaojie/docker
替換為你配置所在的路徑
然后運行docker-compose up -d
就運行了一個es集群以及es-head應(yīng)用,可以看到以下輸出
Creating network "es_compose_es-net" with driver "bridge"
Creating network "es_compose_default" with the default driver
Creating ES01 ... done
Creating ES03 ... done
Creating ES02 ... done
Creating es_compose_es-head_1 ... done
相對的,關(guān)閉只需要在同一個目錄下運行docker-compose down
即可
最后打開http://localhost:9100/
查看你的es集群狀態(tài)
看到上面的圖汗贫,其實我還真不確認是不是集群部署成功,那么創(chuàng)建一個索引試試
curl -X PUT "localhost:9200/twitter?pretty" -H 'Content-Type: application/json' -d'
{
"settings" : {
"index" : {
"number_of_shards" : 3,
"number_of_replicas" : 2
}
}
}
'
可以看到es-head界面變?yōu)?/p>
就代表成功了秸脱。
文章到此還沒結(jié)束落包,我們學(xué)習(xí)es最主要的是想用到它的全文索引功能,默認的es不支持中文分詞摊唇,所以我們需要安裝一個中文的分詞器-ik分詞器咐蝇。
我們可以有兩種方式來實現(xiàn)它。
第一種巷查,通過docker exec -it <container> bash
進入容器有序,然后使用安裝命令安裝分詞器,然后使用docker commit <container> [repo:tag]
把該容器固化為一個新的鏡像岛请。
第二種旭寿,我們通過Dockerfile來構(gòu)建這個安裝了ik的es鏡像。這也是我選擇的方式崇败,感覺專業(yè)一點盅称。
首先創(chuàng)建一個目錄,在這個目錄下建立一個Dockerfile文件后室。內(nèi)容如下
FROM docker.elastic.co/elasticsearch/elasticsearch:7.3.1
COPY ik/ /usr/share/elasticsearch/plugins/ik/
從上面的代碼可以看出給es安裝插件的原理很簡單微渠,其實就是把插件的內(nèi)容拷貝到plugins目錄下即可。
接下來我們在Dockerfile同級目錄下新建ik目錄咧擂,然后在ik目錄中通過wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0.zip
下載ik插件逞盆。
注意,把6.3.0替換為你es鏡像的版本
然后unzip elasticsearch-analysis-ik-6.3.0.zip && rm elasticsearch-analysis-ik-6.3.0.zip
最后通過docker build -t es:4.0 .
構(gòu)建新的鏡像松申,使用該鏡像的名字替換到上面的docker-compose.yml中的鏡像名云芦。
conclusion
我相信這種方式比傳統(tǒng)搭建并且重復(fù)啟動一個es集群方便多了俯逾,不過前提是你得稍微了解一下docker。不過docker或者云原生是未來大勢所趨舅逸,大家還是需要掌握的桌肴。
我相信未來的開發(fā)是配置即代碼
的。在云的環(huán)境下琉历,以后這些中間件或者我們自己項目的配置部署運行我們開發(fā)工作的一部分坠七,運維系統(tǒng)只需要執(zhí)行docker-compose up
這些類似的指令即可。