Как расширить существующий образ докера?

Я использую официальное изображение Docker эластичного поиска вместо того, чтобы настраивать собственный экземпляр эластичного поиска. И это прекрасно работает, вплоть до того момента, когда я хотел расширить его. Я хотел установить marvel в этот экземпляр ElasticSearch, чтобы получить больше информации.

Теперь dockerfile /asticsearch автоматически запускает ElasticSearch и устанавливает команду в /bin/bash не работает, не подключается к контейнеру, не пытается получить к нему доступ через SSH, не устанавливает ssh-daemon с apt-get install -y openssh-server,

В этом конкретном случае я мог бы просто зайти в файловую систему контейнера и выполнить opt/elasticsearch/bint/plugin -i elasticsearch/marvel/latest и все заработало.

Но как я могу установить дополнительный сервис, который должен быть установлен с apt-get когда у меня не может быть терминала внутри работающего контейнера?

3 ответа

Решение

Просто расширьте его, используя Dockerfile, который начинается с

FROM dockerfile/elasticsearch

и установите Marvel или SSH-сервер или все, что вам нужно. Затем завершите с правильной командой для запуска ваших служб. Вы можете использовать supervisor для запуска нескольких сервисов, для получения дополнительной информации см. Запуск сервиса автоматически в контейнере Docker.

Если вы не возражаете против использования docker-compose, то обычно я добавляю первый раздел для базового образа, который вы планируете использовать повторно, а затем используйте этот образ в качестве базового в остальных файлах Docker служб, что-то вроде линии:

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

    collector:
         build: ./images/collector

Затем в images/collector/Dockerfile, и так как мой проект называется webtrack, я набрал бы

FROM webtrack_base
...

И теперь это сделано!

Обновление август 2016

Найдя очень мало актуальной информации о том, как это сделать с последними версиями плагинов ElasticSearch (например, 2.3.5), Kibana (4.5.3) и Marvel & Sense, я решил пойти по более крутому пути и написать свое собственное изображение.

Пожалуйста, найдите исходный код (Dockerfile) и README здесь

FROM java:jre-alpine

MAINTAINER arcseldon <arcseldon@gmail.com>

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

Если вы просто хотите предварительно подготовленное изображение, сделайте:

docker pull arcseldon/elasticsearch-kibana-marvel-sense

Вы можете посетить репозиторий на hub.docker.com здесь.

Использование:

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

Вы можете подключиться к Elasticsearch с http://localhost:9200/ и его интерфейсом Kibana с http://localhost:5601/.

Вы можете подключиться к Marvel с помощью http://localhost:5601/app/marvel и Sense с помощью http://localhost:5601/app/sense

Надеюсь, что это помогает другим и экономит время!

Другие вопросы по тегам