Как расширить существующее изображение докеров?
Я использую официальное изображение Dockinger для elasticsearch вместо того, чтобы настраивать свой собственный пример экстренного поиска. И это отлично работает, вплоть до того момента, когда я хотел его продлить. Я хотел установить marvel в этот экземпляр ElasticSearch, чтобы получить дополнительную информацию.
Теперь dockerfile/elasticsearch автоматически запускает ElasticSearch и установка команды /bin/bash
не работает, не прикрепляется к контейнеру или не пытается получить доступ к ней через SSH, а также не устанавливает ssh-daemon с apt-get install -y openssh-server
.
В этом конкретном случае я мог просто войти в файловую систему контейнера и выполнить opt/elasticsearch/bint/plugin -i elasticsearch/marvel/latest
, и все сработало.
Но как я могу установить дополнительную службу, которая должна быть установлена с помощью apt-get
, когда я не могу иметь терминал внутри запущенного контейнера?
Ответы
Ответ 1
Просто расширьте его, используя файл Docker, который начинается с
FROM dockerfile/elasticsearch
и установите чудо или ssh-сервер или что вам нужно. Затем завершите правильную команду для запуска ваших сервисов. Вы можете использовать супервизор для запуска мультиплексных сервисов, см. Запуск службы автоматически в контейнере докеров для получения дополнительной информации об этом.
Ответ 2
Если вы не возражаете против использования docker-compose, то, что я обычно делаю, это добавить первый раздел для базового изображения, которое вы планируете повторно использовать, а затем использовать это изображение в качестве базы в остальной части Dockerfiles сервисов, что-то вроде:
---
version: '2'
services:
base:
build: ./images/base
collector:
build: ./images/collector
Затем в файле images/collector/Dockerfile, и поскольку мой проект называется webtrack, я бы напечатал
FROM webtrack_base
...
И теперь это сделано!
Ответ 3
Обновление августа 2016 года
Найдя очень мало текущей информации о том, как это сделать, с последними версиями ElasticSearch (например, 2.3.5), плагинами Kibana (4.5.3) и Marvel и Sense, я решил сделать более крутой путь и написать свой собственный изображение.
Пожалуйста, найдите исходный код (Dockerfile) и README здесь
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
Если вы просто хотите предварительно построенное изображение, пожалуйста, сделайте следующее:
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 с < а5 >
Надеюсь, что это поможет другим и сэкономит время!