如何在Docker上运行Elasticsearch 8用于本地开发

438 阅读6分钟

如何在Docker上运行Elasticsearch 8用于本地开发

用Docker和Docker Compose在几分钟内启动Elasticsearch和Kibana

对于Elasticsearch的新的主要版本(8.x.x),在Docker上运行Elasticsearch和Kibana有重大更新。过去适用于以前版本的Docker和Docker Compose的命令和语法需要更新,以便适用于最新版本。在这篇文章中,我们将介绍如何用Docker和Docker Compose启动Elasticsearch(8.2.2版)和Kibana进行本地开发。

在Docker上运行Elasticsearch和Kibana,禁用xpack安全性

xpack安全默认是启用的,这意味着你需要认证才能访问Elasticsearch服务器。然而,对于本地开发,我们通常不需要高安全级别,因为一切都在本地。我们会更关注业务逻辑和代码,而不是基础设施。当代码准备用于生产时。我们可以使用一个托管的Elasticsearch解决方案,如elastic.io,该公司开发和维护Elasticsearch。

直接用Docker启动Elasticsearch和Kibana是非常简单的。首先,我们需要创建一个Elasticsearch和Kibana都将使用的网络。

$ docker network create elastic

然后,我们可以为Elasticsearch创建一个Docker容器。

这里的关键点。

  • 刚刚创建的网络是用于Elasticsearch的,所以它可以被Kibana发现,而Kibana也会使用这个网络。
  • 一个单节点的Elasticsearch集群被创建。
  • 环境变量ES_JAVA_OPTS ,用于指定最小和最大的JVM堆大小(本例中为1GB)。如果没有设置,你的Elasticsearch容器很可能无法成功启动。
  • 我们需要明确地禁用xpack的安全性,这样我们就不需要认证来访问Elasticsearch服务器。这对于本地开发来说是可以的,但对于生产来说应该启用。
  • 我们可以使用Dockerhub上托管的docker镜像,或者Elasticsearch直接提供的镜像。

现在我们可以使用curl来调用Elasticsearch的API,并检查Docker容器是否成功启动。

当你看到上述输出时,这意味着Elasticsearch Docker容器已成功启动。然后我们可以启动Kibana容器,用一个漂亮的用户界面来管理Elasticsearch服务器。

要启动Kibana的Docker容器,请运行。

键入这里。

  • 我们必须为Kibana指定与Elasticsearch相同的网络。
  • 最好使用与Elasticsearch相同版本的Kibana。

如果你访问http://localhost:5601,你将能够直接打开Kibana的Web UI,而不需要认证。

使用Docker Compose运行Elasticsearch和Kibana

最好在docker-compose.yaml 文件中指定我们需要运行的Docker容器,特别是当你有多个容器时。通过这种方式,你可以同时管理它们,不需要一个一个地启动它们。有了docker-compose.yaml ,对于代码版本控制和共享也更加方便。

上面演示的Elasticsearch和Kibana容器的docker-compose.yaml 文件如下。这些设置与直接启动Docker容器的设置相同。

正如你所看到的,我们可以在同一个文件中管理网络、卷和容器,这超级方便。记得在用这个docker-compose.yaml 文件启动容器/服务之前,先把上面启动的elasticsearchkibana 容器拿下来,否则,会有端口冲突。或者,你也可以在这个文件中指定不同的发布端口。

在Docker上运行Elasticsearch和Kibana,并启用xpack安全性

上面我们介绍了如何为Elasticsearch和Kibana快速启动Docker容器进行本地开发。在不需要担心认证问题的情况下,它们非常适合于本地开发。

对于生产来说,我们肯定应该启用xpack的安全功能。然而,如果可能的话,我们不应该自己托管Elasticsearch服务器,而应该通过专门的供应商,如elastic.io,开发和维护Elasticsearch的公司。这样一来,我们就不需要担心琐碎的硬件、安全或升级问题,可以专注于业务逻辑和数据。

尽管如此,也会有需要本地认证的情况。我们可以删除上面演示的xpack.security.enabled=false 环境变量,xpack的安全性就会自动启用。

要启动一个启用了xpack安全性的Elasticsearch容器,请运行。

注意,我们为默认用户elastic指定了一个密码。如果这里没有指定,当你启动容器时将会生成一个随机密码。你也会看到为Kibana生成的注册令牌。

打开一个新的控制台,让我们先直接调用Elasticsearch的API。奇怪的是,我们需要从Docker容器中复制安全证书,并将其用于curl的认证。

然后让我们创建一个Kibana容器来管理这个带认证的Elasticsearch服务器。该命令实际上与上图所示相同。

在控制台中,我们看到这样的东西。

Go to http://0.0.0.0:5601/?code=038409 to get started.

注意,我们需要在URL中指定验证码来访问Kibana。0.0.0.0 ,意味着本地机器上的所有IPv4地址都可以访问这个端口。当你进入http://localhost:5601?code=038409,你会被提示输入一个注册码。

复制并粘贴你启动Elasticsearch容器时屏幕上显示的注册令牌。如果屏幕上出现了大量的日志或者令牌已经过期,你可以使用elasticsearch-create-enrollment-token 命令来生成一个新的令牌。我们可以在Elasticsearch容器内直接使用elasticsearch-create-enrollment-token 命令。

然后在你点击 "配置Elastic "后,你需要输入你的用户名和密码,在这个例子中都是elastic

最后,你可以使用Kibana来管理你的Elasticsearch服务器。嗯,启用了xpack的安全功能,确实很安全。我们需要验证码、注册令牌和用户名/密码,这将通过各种方式确保安全🛡️。

启用xpack安全后,用Docker Compose运行Elasticsearch和Kibana

令人惊讶的是,当xpack安全启用时,编写一个docker-compose.yaml 文件来管理Elasticsearch和Kibana容器是非常复杂的。我们需要自己明确地管理证书,这在官方文件中可以找到。非常奇怪的是,直接使用Docker是如此简单,而使用Docker Compose对xpack安全来说却复杂得多。我认为在他们有更好的版本来做这件事之前,我们应该避免使用它。

我们已经介绍了在Docker上运行Elasticsearch和Kibana的各种方法。对于本地开发,我们可以在大多数情况下禁用xpack的安全性,只需关注数据和查询。当xpack安全被禁用时,使用Docker就更直接了。对于生产,我们通常会将数据托管在一个专门的供应商,如elastic.io,这可以节省我们管理服务器、证券和升级的精力,让我们专注于重要的业务逻辑。

相关文章。