天天看點

系列教程丨用 Docker 探索開源軟體 —— Elasticsearch(一)

系列教程丨用 Docker 探索開源軟體 —— Elasticsearch(一)

出品丨Docker公司(ID:docker-cn)

編譯丨小東

每周一、三、五,與您不見不散!

Docker 的一大優點是可以讓您快速使用它來試用應用程式,而無需直接在開發人員的計算機上安裝它。如果您不想在自己的計算機上安裝 Java 或 erlang 等運作時環境,那麼您就可以不安裝它們,因為容器封裝了所有依賴項,并在删除時可以不留下任何痕迹。今天,我将帶來本系列第三篇文章,用 Docker 探索開源軟體 —— Elasticsearch,它将給我們一個機會來看看 docker-compose 是如何運用的。

注:為了了解本教程中的指令,我建議您使用 Play with Docker,它可以讓您在浏覽器中運作文章中涉及到的所有指令。

點選下列文章标題,回顧本系列文章的往期内容:

啟動一個運作 Elasticsearch 的新容器

如果您隻想嘗試在單節點中運作 Elasticsearch,那麼我們可以使用下面所示的“docker run”指令來實作。

我們公開了 9200 端口(用于 REST API),并使用官方的 elasticsearch 6.4.2 鏡像(點選文尾處“閱讀原文”下載下傳該鏡像)設定單節點叢集(使用環境變量)。我還将展示如何使用 volume 來存儲索引資料。

docker run -d -p 9200:9200 -e "discovery.type=single-node" \
-v esdata:/usr/share/elasticsearch/data \
docker.elastic.co/elasticsearch/elasticsearch:6.4.2
           

我們用“curl”運作的所有 Elasticsearch 指令在這個容器上都可以正常工作。但是對于本教程,我将使用“docker-compose”來建立叢集。

使用 Docker Compose 建立 Elasticsearch 叢集

使用docker-compose,我們可以以YAML格式聲明構成應用程式的所有容器。對于每個容器來說,我們還可以配置其應該設定的環境變量、所需的任何 volume 以及定義允許服務互相通信的網絡。

如下所示,這是 docker-compose.yml 檔案的第一個版本。它定義了一個簡單的雙節點叢集,叢集中的每個節點都有一個 volume,這樣我們的索引就可以獨立于容器而存在,并且可以在更新後繼續存在(稍後我們将進行更新)。請注意,我們正在使用的是 Elasticsearch 6.4.1版本。

version: '2.2'
services:
 elasticsearch:
   image: docker.elastic.co/elasticsearch/elasticsearch:6.4.1
   container_name: elasticsearch
   environment:
     - cluster.name=docker-cluster
     - bootstrap.memory_lock=true
     - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
   ulimits:
     memlock:
       soft: -1
       hard: -1
   volumes:
     - esdata1:/usr/share/elasticsearch/data
   ports:
     - 9200:9200
   networks:
     - esnet
 elasticsearch2:
   image: docker.elastic.co/elasticsearch/elasticsearch:6.4.1
   container_name: elasticsearch2
   environment:
     - cluster.name=docker-cluster
     - bootstrap.memory_lock=true
     - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
     - "discovery.zen.ping.unicast.hosts=elasticsearch"
   ulimits:
     memlock:
       soft: -1
       hard: -1
   volumes:
     - esdata2:/usr/share/elasticsearch/data
   networks:
     - esnet
 
volumes:
 esdata1:
   driver: local
 esdata2:
   driver: local
 
networks:
 esnet:
           

要在本地下載下傳該 compose 檔案作為 docker-compose-v1.yml,您可以使用以下指令:

curl https://gist.githubusercontent.com/markheath/f246ec3aa5a3e7493991904e241a416a/raw/c4fa64575bc854e34a2506291bd14033caf5e9b6/docker-compose-v1.yml > docker-compose-v1.yml
           

現在我們可以使用“docker-compose up”指令啟動容器,并建立所有必要的資源,如網絡和 volume。 我們使用“-d”讓其在背景運作,就像我們使用“docker run”一樣:

docker-compose -f docker-compose-v1.yml up -d
           

檢查群集運作狀況

我們在其中一個容器上公開了 9200 端口,允許我們使用以下請求來查詢叢集運作狀況:

curl http://localhost:9200/_cluster/health?pretty