2014-04-07 12 views
25

Używam the official elasticsearch Docker image zamiast konfigurowania własnej elastycznej instancji wyszukiwania. I to działa świetnie, aż do momentu, kiedy chciałem go rozszerzyć. Chciałem zainstalować marvel w tej instancji ElasticSearch, aby uzyskać więcej informacji.Jak przedłużyć istniejący obraz dokowania?

Teraz dockerfile/elasticsearch automatycznie uruchamia ElasticSearch i ustawienie polecenia /bin/bash nie działa, nie ma mocowania do pojemnika lub próbuje uzyskać do niego dostęp przez SSH, ani instalowania ssh-demona z apt-get install -y openssh-server.

W tym konkretnym przypadku mogłem po prostu przejść do systemu plików kontenera i wykonać opt/elasticsearch/bint/plugin -i elasticsearch/marvel/latest i wszystko działało.

Ale jak mogę zainstalować dodatkową usługę wymagającą instalacji z apt-get, gdy nie mogę mieć terminala w uruchomionym pojemniku?

+0

Adres URL [elasticsearch url] (https://hub.docker.com/r/_/elasticsearch/) zmieniono na [https://hub.docker.com/r/_/elasticsearch/](https:/ /hub.docker.com/r/_/elasticsearch/) – luckydonald

Odpowiedz

29

Wystarczy przedłużyć go za pomocą Dockerfile że początek

FROM dockerfile/elasticsearch 

i zainstalować cud lub ssh-serwer lub cokolwiek, czego potrzebujesz. Następnie zakończ z poprawnym poleceniem, aby uruchomić twoje usługi. Możesz użyć nadzorcy, aby uruchomić usługi multiefektowe, zobacz Run a service automatically in a docker container, aby uzyskać więcej informacji na ten temat.

+0

Czy istnieje sposób na rozszerzenie pliku Dockerfile, w przeciwieństwie do obrazu? Powiedz, że mam plik Docker dla serwera e-mail. Przechowuje pliki na różne sposoby (Amazon S3, CEPH itp.), Więc potrzebuję biblioteki dla każdej z tych usług. Chciałbym mieć bazowy plik Dockerfile dla serwera, a następnie jeden plik Dockerfile na usługę służącą do przechowywania plików. Wszystko to bez martwienia się o obrazy pośrednie. – conradkdotcom

+1

nope. W tym przypadku taktyką może być jeden plik Docker z taką samą funkcjonalnością, jaką można w nim umieścić, oraz tablica małego pliku Dockerfile obejmującego nowo utworzony obraz, który instaluje bibliotekę dla konkretnej usługi. – qkrijger

+0

@qkrijger - Dziękuję za rozpoczęcie mnie od właściwa droga - w mojej ostatniej odpowiedzi podałem w pełni działający plik Docker. – arcseldon

2

Jeśli nie przeszkadza docker-komponować, co zwykle zrobić jest dodanie pierwszą sekcję dla obrazu bazowego planujesz do ponownego użycia, a następnie użyć tego obrazu jako podstawy w pozostałych usług "Dockerfiles, coś wzdłuż linii:

--- 
version: '2' 
services: 
    base: 
     build: ./images/base 

    collector: 
     build: ./images/collector 

Następnie w obrazach/kolektor/Dockerfile, a ponieważ mój projekt jest nazywany webtrack, bym wpisać

FROM webtrack_base 
... 

A teraz gotowe!

0

Aktualizacja sierpień 2016

Stwierdziwszy bardzo mało aktualne informacje o tym, jak to zrobić z najnowszymi wersjami ElasticSearch (2.3.5 na przykład), Kibana (4.5.3) oraz Marvel & Sense wtyczek, ja zdecydowałem się na bardziej stromą ścieżkę i napisać własny obraz.

Proszę znaleźć kod źródłowy (Dockerfile) i README here

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 

Jeśli chcesz po prostu pre-wbudowany obraz następnie wykonaj:

docker pull arcseldon/elasticsearch-kibana-marvel-sense 

można znaleźć w repozytorium na piaście. docker.com here

Zastosowanie:

docker run -d -p 9200:9200 -p 5601:5601 arcseldon/elasticsearch-kibana-marvel-sense 

Możesz połączyć się z Elasticsearch z http://localhost:9200 i jego front-endem Kibana z http://localhost:5601.

Można połączyć się z http://localhost:5601/app/marvel Marvel i poczucie ze http://localhost:5601/app/sense

nadzieję, że pomaga innym i oszczędza trochę czasu!

Powiązane problemy