
出品丨Docker公司(ID:docker-cn)
編譯丨小東
每周一、三、五,與您不見不散!
Docker 的一大優點是可以讓您快速使用它來試用應用程式,而無需直接在開發人員的計算機上安裝它。如果您不想在自己的計算機上安裝 Java 或 erlang 等運作時環境,那麼您就可以不安裝它們,因為容器封裝了所有依賴項,并在删除時可以不留下任何痕迹。今天,我将帶來本系列第三篇文章,用 Docker 探索開源軟體 —— Elasticsearch,它将給我們一個機會來看看 docker-compose 是如何運用的。
注:為了了解本教程中的指令,我建議您使用 Play with Docker,它可以讓您在浏覽器中運作文章中涉及到的所有指令。
點選下列文章标題,回顧本系列文章的往期内容:
- 系列教程丨用 Docker 探索開源軟體 —— Redis
- 系列教程丨用 Docker 探索開源軟體 —— PostgreSQL(一)
- 系列教程丨用 Docker 探索開源軟體 —— PostgreSQL(二)
啟動一個運作 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