如何在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 文件启动容器/服务之前,先把上面启动的elasticsearch 和kibana 容器拿下来,否则,会有端口冲突。或者,你也可以在这个文件中指定不同的发布端口。
在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,这可以节省我们管理服务器、证券和升级的精力,让我们专注于重要的业务逻辑。
相关文章。