web-dev-qa-db-fra.com

Comment étendre une image de menu fixe existante?

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?

29
peter

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.

32
qkrijger

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!

2
mrArias

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!

0
arcseldon