Comment puis-je configurer les conteneurs Docker elasticsearch (elasticsearch: 7.5.0) pour utiliser moins de ressources et s'exécuter en mode de non-production?
Je souhaite exécuter des conteneurs dans Jenkins et sur mon bureau et répond aux exigences de ce document élastique pour exécuter des images docker en production
Je voudrais savoir comment je peux modifier mon elasticsearch.yml que je copie dans le conteneur pour le configurer pour mettre le conteneur dans un mode moins gourmand en ressources.
Quelqu'un sait-il comment faire ça?
3 Réponses :
Vous pouvez exécuter votre docker en mode développement et créer un cluster ES à nœud unique en suivant le lien ES officiel sur le cluster ES à nœud unique . Comme mentionné dans ce lien.
Pour démarrer un cluster Elasticsearch à nœud unique à des fins de développement ou de test, spécifiez la découverte de nœud unique pour contourner les contrôles d'amorçage:
En bref, tout ce que vous avez à faire est d'ajouter -e "discovery.type=single-node"
dans votre commande docker, ce qui activerait le mode dev et vous n'aurez pas à satisfaire les limites strictes des environnements de production, c'est- à- dire qu'il contournera vérifications de bootstrap .
Vous trouverez plus d'informations sur vos paramètres et comment les désactiver ici
node.store.allow_mmap. Il s'agit d'un paramètre booléen indiquant si le mappage mémoire est autorisé ou non. La valeur par défaut est de l'autoriser.
Ainsi, si -e "discovery.type=single-node
env. Ne le désactive pas, vous pouvez le définir explicitement sur false dans votre elasticsearch.yml
.
J'ai également rencontré ce problème lorsque j'utilisais cette image docker.elastic.co/elasticsearch/elasticsearch:7.6.2
élastique-search pour un cluster à un seul nœud.
L'erreur que j'obtenais est:
FROM docker.elastic.co/elasticsearch/elasticsearch:7.6.2 RUN echo discovery.seed_hosts : 127.0.0.1:9300 >> /usr/share/elasticsearch/config/elasticsearch.yml RUN cat /usr/share/elasticsearch/config/elasticsearch.yml
Pour démarrer un cluster Elasticsearch à nœud unique avec Docker
Solution1
La solution serait donc d'exécuter une image docker avec une variable d'environnement -e "discovery.type=single-node"
dans la commande docker run.
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.6.2
Solution2
Ajoutez ce "discovery.seed_hosts : 127.0.0.1:9300"
dans le fichier eleasticsearch.yml. Et créez votre propre image de docker et utilisez-la.
Dockerfile
ressemblera à ceci.
ERROR: [1] bootstrap checks failed [1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
Pour plus de détails, cliquez ici .
J'ai déjà fourni la solution 1 dans ma réponse et à propos de la solution 2, je ne sais pas comment cela fonctionne, pouvez-vous expliquer pourquoi il évite les contrôles de production et l'exécute en mode développement?
@OpsterElasticsearchNinja Je viens de mettre à jour la réponse et de fournir le Dockerfile
alors Dockerfile
un œil. Ici, nous utilisons l'adresse de bouclage comme seed_hosts afin que la recherche élastique ne soit alors accessible qu'à partir de la machine hôte elle-même. J'espère que c'est plus clair maintenant.
pourquoi le rendre complexe ?, utiliser simplement discovery.type=single-node
ignore les contrôles de production et est mentionné dans la configuration elasticsearch et contient beaucoup de documentation.
Si vous lisez ceci, essayez de savoir comment le faire lorsque vous utilisez docker-compose
:
docker-compose.yml:
elasticsearch: volumes: - /path-to/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
Créez elasticsearch.yml
:
discovery: type: single-node
Montez-le en tant que volume sur votre conteneur dans docker-compose.yml:
elasticsearch: environment: - discovery.type=single-node
Assurez-vous que la première partie est en fait un chemin, elle doit commencer par /
ou ./
sinon elle va la traiter comme un volume nommé. La deuxième partie est le chemin à l'intérieur du conteneur afin qu'il puisse être laissé tel quel.
Le fichier doit se trouver à un emplacement pour lequel vous avez activé le partage de fichiers dans votre application Docker. Configurez cela dans Préférences> Ressources> Partage de fichiers si vous ne l'avez pas fait.
Je n'ai pas encore. Je devrais pouvoir revenir pour tester dans quelques jours. Merci pour l'info
Non seulement cela fonctionne, mais c'est aussi ainsi que nos scripts d'environnement de laboratoire de test le font ... et j'ai écrit l'orchestration de ceux-ci et je l'ai manqué. Ce contexte est pour notre machine de construction et les tests de bureau. Merci
Merci d'avoir accepté la réponse, je suis heureux que cela vous ait aidé :)
Je vous en prie. Espérons que cela aide aussi la personne suivante
Merci pour ces mots gentils :)