Как расширить существующий образ докера?
Я использую официальное изображение 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
Надеюсь, что это помогает другим и экономит время!