Logo do ElasticSearch e Docker juntos

Rodando o Elastic Search no Docker

Tive a impressão, lendo alguns tutoriais em português, que o material estava um tanto desatualizado. Isso me fez perder algum tempo tentando entender o que eu estava fazendo de errado até entender que: eu não estava fazendo nada errado. O passo a passo estava correto, mas a forma de chamar as APIs do Elastic Search é que haviam mudados. Faço esse post para não me deixar esquecer de como funciona e também para facilitar a vida de quem quer subir um container local para desenvolvimento ou para brincar antes de jogar para produção.

Instalando

É necessário que você já tenha o Docker instalado e rodando na sua máquina. Antes de começar o primeiro passo tenha certeza de que o Docker está rodando! Todas as instruções são via linha de comando e funcionam igualmente no PowerShell e no terminal do Linux (eu uso o Ubuntu 22.04).

O primeiro passo aqui é baixar a imagem do Elastic Search que atualmente está na 8.10.4. Vou usar o repositório de imagens do próprio Elastic pois no repositório do Docker a última versão é a 8.10.2 no dia de hoje e quero usar a última porquê sim. Você pode verificar outras versões aqui https://www.docker.elastic.co/r/elasticsearch.

docker pull docker.elastic.co/elasticsearch/elasticsearch:8.10.4

Se tudo der certo o resultado vai ser algo parecido com a imagem abaixo. No meu caso rodando no Ubuntu tive que rodar o comando com o sudo .

Docker Pull na imagem do Elastic Search
docker pull na imagem do Elastic Search

Podemos ver que na minha lista de imagens salvas localmente temos lá o Elastic Search na versão 8.10.4. Lembrando que no meu caso tive que adicionar o sudo .

docker image ls
Docker Image LS para listar as imagens baixadas e mostrando a imagem do Elastic Search

Rodando

Até aqui todos os tutoriais foram bem. Alguns instalando diredo do repositório do Docker outros do repositório do ElasticSearch, mas daqui em diante é o que estava me confundindo um tanto, mas que vai ficar bem claro aqui.

docker run --name elasticboladao -p 9200:9200 -it -m 1GB docker.elastic.co/elasticsearch/elasticsearch:8.10.4

Deu erro?

Em alguns tutoriais o container subia e tudo funcionava magicamente bem, mas quando eu tentei encontrava alguns erros e que seguindo o tutorial me dava a entender de que eu estava fazendo alguma coisa errada. Seguindo o passo a passo até aqui dava um erro tanto rodando no Windows quanto rodando no Ubuntu, então se você rodou até aqui e se esbarrou com o erro node validation exception\n[1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.\nbootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] siga a recomendação abaixo, caso não tenha tido problema e o comando tenha rodado pode pular direto para o tópico “Testando”.

Erro ao rodar o comando docker run com a imagem do Elastic Search

Significa que você precisa aumentar o valor do vm.max_map_count para o valor minimo de 262144, como recomendando pelo Elastic Search. No Ubuntu basta rodar o comando baixo.

sysctl -w vm.max_map_count=262144

Se você quiser deixar esse valor minimo definido como padrão no seu sistema sempre você só precisa editar o arquivo /etc/sysctl.conf e adicionar ao final dele o vm.max_map_count=262144.

Deu bom?

Se você não teve o problema acima, ou fez o ajuste necessário, depois de rodar o comando docker run e ao final da processo de inicialização do container você provavelmente vai ver essa tela na primeira.

Docker Run rodado com sucesso mostrando as informações de senha do Elastic Search e outras informações

Testando

Esse foi um outro ponto confuso em que cheguei depois de seguir os tutoriais. O pessoal simplesmente lançava na URL http://localhost:9200 e entrava com uma autenticação básica e conseguia fazer algumas consultas direto no navegador. No entanto temos ai duas possibilidade: No Windows, rodando o Docker Desktop com WSL ativado, não consegui acessar a URL diretamente pelo navegador. Só consegui fazer as requisições usando o Postman/Insomnia ou pelo CURL. No Ubuntu funcionou com https, mas não com o http e até aí tudo bem, pois não pretendo usar o navegador mesmo. Acessar via navegador era mais um teste simples para verificar se estava funcionando.

Elastic Search sendo acessado via navegador na porta 9200

Depois de autenticar com o usuário elastic e com a senha que é gerada quando o elastic é iniciado (da uma olhada na imagem do Deu Bom?).

Retorno efetivo com as informações do Elastic Search

Insomnia/Postman

Tanto usando o Insomnia quanto o Postman talvez seja necessário desabilitar a validação de certificados SSL, ao menos tive que fazer isso, já que o certificado gerado localmente não é realmente reconhecido.

Antes de você realizar uma requisição você precisa configurar a autenticação do tipo basic e há duas formas de fazer isso a primeira é usando o recurso direto do Postman ou do Insomina que basicamente é ir na aba de Authorization, escolher a opção Basic preencher o usuário com o elastic e a senha com aquela que já sabemos.

Autenticação Basic direto no Insomnia

A outra forma é configurar diretamente no Headers o cabeçalho Authorization com o usuário e senha separado por “:” encodados na base64. Eu particularmente prefiro essa pois já fica mais baixo nível e mais próximo da chamada que vou precisar fazer via código. Algo como elastic:O*ZMpUEhF*+5cHAYW3yR viraria ZWxhc3RpYzpPKlpNcFVFaEYqKzVjSEFZVzN5Ug==.

É isso, objetivo aqui foi alcançado que era deixar rodando o ElasticSearch com Docker. Fiquem a vontade pra tirar dúvidas dessa instalação ou mesmo outras coisas que tenha dito e não tenha ficado claro.

Pra fechar

Se você precisar gerar uma nova senha para o usuário elastic você pode em um outro terminal enviar um comando para essa troca.

docker exec -it elasticboladao bin/elasticsearch-reset-password -u elastic

Referências

https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html


Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.