出品丨Docker公司(ID:docker-cn)
编译丨小东
每周一、三、五,与您不见不散!
Docker 的一大优点是可以让您快速使用它来试用应用程序,而无需直接在开发人员的计算机上安装它。如果您不想在自己的计算机上安装 Java 或 erlang 等运行时环境,那么您就可以不安装它们,因为容器封装了所有依赖项,并在删除时可以不留下任何痕迹。今天,我将带来本系列第三篇文章,用 Docker 探索开源软件 —— Elasticsearch,它将给我们一个机会来看看 docker-compose 是如何运用的。
注:为了理解本教程中的命令,我建议您使用 Play with Docker,它可以让您在浏览器中运行文章中涉及到的所有命令。
点击下列文章标题,回顾上期文章内容:
添加 Kibana 和 head 插件
在本文中,我将为一个 Kibana 实例和 Elasticsearch Head 插件的 docker-compose 文件添加几个容器。所以如下所示,这就是我们将要使用的最终“docker-compose.yaml”文件:
version: '2.2'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.4.2
container_name: elasticsearch
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- http.cors.enabled=true
- http.cors.allow-origin=*
- discovery.zen.minimum_master_nodes=2
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.2
container_name: elasticsearch2
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "discovery.zen.ping.unicast.hosts=elasticsearch"
- http.cors.enabled=true
- http.cors.allow-origin=*
- discovery.zen.minimum_master_nodes=2
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata2:/usr/share/elasticsearch/data
networks:
- esnet
elasticsearch3:
image: docker.elastic.co/elasticsearch/elasticsearch:6.4.2
container_name: elasticsearch3
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "discovery.zen.ping.unicast.hosts=elasticsearch"
- http.cors.enabled=true
- http.cors.allow-origin=*
- discovery.zen.minimum_master_nodes=2
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata3:/usr/share/elasticsearch/data
networks:
- esnet
kibana:
image: 'docker.elastic.co/kibana/kibana:6.4.2'
container_name: kibana
environment:
SERVER_NAME: kibana.local
ELASTICSEARCH_URL: http://elasticsearch:9200
ports:
- '5601:5601'
networks:
- esnet
headPlugin:
image: 'mobz/elasticsearch-head:5'
container_name: head
ports:
- '9100:9100'
networks:
- esnet
volumes:
esdata1:
driver: local
esdata2:
driver: local
esdata3:
driver: local
networks:
esnet:
您可以下载我的 YAML 文件
curl https://gist.githubusercontent.com/markheath/f246ec3aa5a3e7493991904e241a416a/raw/a2685d1bf0414acbc684572d00cd7c7c531d0496/docker-compose-v4.yml > docker-compose-v4.yml
现在我们可以再次更新我们的集群
docker-compose -f docker-compose-v4.yml up -d
尝试 Kibana
完成此操作后,我们可以通过浏览 localhost:5601 访问 Kibana 网站。如果您一直在“Play with Docker”中进行操作,那么您将可以看到每个公开端口(9200、9100和5601)的特殊链接,如下图所示:
如果您点击5601链接,您将到达一个 Kibana 的实例。第一步是定义索引模式(例如:“customer *”):
然后,如果您访问 discover 选项卡,那么您将看到我们可以使用 Kibana 搜索索引中的文档:
尝试 Elasticsearch head 插件
您还可以访问localhost:9100(或在Play with Docker中,单击9100链接)来使用 Elasticsearch head 插件。这为您提供了可视化的群集运行状况:
请注意,如果使用 Play with Docker,需要复制端口9200链接并将其粘贴到 Connect 文本框中,以便将 head 插件连接到 Elasticsearch 集群。
清 理
停止并删除所有容器:
docker-compose -f docker-compose-v4.yml down
如果您还想删除卷(这样所有索引数据都将丢失),请添加-v标志:
docker-compose -f docker-compose-v4.yml down -v
总 结
在本教程中,我们看到使用 Docker 运行 Elasticsearch 实例非常容易,我们可以使用它来试验 API。但使用 Docker Compose,我们还可以定义容器间的相互通信,以及启动它们的容器集合。所有这些都很容易用“docker-compose up”实现。
当我们升级 YAML 文件时,Docker Compose 可以智能地决定需要更换哪些容器,哪些容器可以保留原样。