J'utilise l'image officielle de elasticsearch Docker au lieu de créer ma propre instance de recherche élastique. Et cela fonctionne très bien, jusqu'au moment où j'ai voulu l'étendre. Je voulais installer marvel dans cette instance ElasticSearch pour obtenir plus d’informations.
Désormais, dockerfile/elasticsearch exécute automatiquement ElasticSearch et la définition de la commande sur /bin/bash
ne fonctionne pas, ni la liaison au conteneur ni la tentative d'accès via SSH, ni l'installation de ssh-daemon avec apt-get install -y openssh-server
.
Dans ce cas particulier, je pourrais simplement aller dans le système de fichiers du conteneur et exécuter opt/elasticsearch/bint/plugin -i elasticsearch/marvel/latest
et tout a fonctionné.
Mais comment pourrais-je installer un service supplémentaire qui doit être installé avec apt-get
quand je ne peux pas avoir de terminal dans le conteneur en cours d'exécution?
Il suffit de l’étendre en utilisant un fichier Dockerfile qui commence par
FROM dockerfile/elasticsearch
et installez Marvel ou ssh-server ou tout ce dont vous avez besoin. Ensuite, terminez avec la commande correcte pour démarrer vos services. Vous pouvez utiliser supervisor pour démarrer plusieurs services, voir Exécuter un service automatiquement dans un conteneur de menu fixe pour plus d'informations à ce sujet.
Si cela ne vous dérange pas d'utiliser docker-compose , ce que je fais habituellement est d'ajouter une première section pour l'image de base que vous souhaitez réutiliser, puis d'utiliser cette image comme base dans le reste des services ' Dockerfiles , quelque chose comme:
---
version: '2'
services:
base:
build: ./images/base
collector:
build: ./images/collector
Ensuite, dans images/collector/Dockerfile, et puisque mon projet s'appelle webtrack , je tape
FROM webtrack_base
...
Et maintenant c'est fait!
Mise à jour août 2016
Ayant trouvé très peu d'informations actuelles sur la façon de procéder avec les dernières versions d'ElasticSearch (2.3.5 par exemple), Kibana (4.5.3) et les plugins Marvel & Sense, j'ai choisi de prendre le chemin le plus raide et d'écrire ma propre image.
Veuillez trouver le code source (Dockerfile) et README ici
FROM Java:jre-Alpine
MAINTAINER arcseldon <[email protected]>
ENV ES_VERSION=2.3.5 \
KIBANA_VERSION=4.5.3
RUN apk add --quiet --no-progress --no-cache nodejs \
&& adduser -D elasticsearch
USER elasticsearch
WORKDIR /home/elasticsearch
RUN wget -q -O - http://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/${ES_VERSION}/elasticsearch-${ES_VERSION}.tar.gz \
| tar -zx \
&& mv elasticsearch-${ES_VERSION} elasticsearch \
&& wget -q -O - http://download.elastic.co/kibana/kibana/kibana-${KIBANA_VERSION}-linux-x64.tar.gz \
| tar -zx \
&& mv kibana-${KIBANA_VERSION}-linux-x64 kibana \
&& rm -f kibana/node/bin/node kibana/node/bin/npm \
&& ln -s $(which node) kibana/node/bin/node \
&& ln -s $(which npm) kibana/node/bin/npm \
&& ./elasticsearch/bin/plugin install license \
&& ./elasticsearch/bin/plugin install marvel-agent \
&& ./kibana/bin/kibana plugin --install elasticsearch/marvel/latest \
&& ./kibana/bin/kibana plugin --install elastic/sense
CMD elasticsearch/bin/elasticsearch --es.logger.level=OFF --network.Host=0.0.0.0 & kibana/bin/kibana -Q
EXPOSE 9200 5601
Si vous voulez juste l'image pré-construite, alors s'il vous plaît faites:
docker pull arcseldon/elasticsearch-kibana-marvel-sense
Vous pouvez visiter le référentiel sur hub.docker.com ici
Usage:
docker run -d -p 9200:9200 -p 5601:5601 arcseldon/elasticsearch-kibana-marvel-sense
Vous pouvez vous connecter à Elasticsearch avec http: // localhost: 9200 et son interface Kibana avec http: // localhost: 5601 .
Vous pouvez vous connecter à Marvel avec http: // localhost: 5601/app/marvel et Sense avec http: // localhost: 5601/app/sense
J'espère que cela aide les autres et fait gagner du temps!