【问题标题】:How to extend an existing docker image?如何扩展现有的 docker 镜像?
【发布时间】:2014-05-19 07:20:03
【问题描述】:

我正在使用the official elasticsearch Docker image,而不是设置我自己的弹性搜索实例。这很好用,直到我想扩展它。我想将marvel 安装到该 ElasticSearch 实例中以获取更多信息。

现在 dockerfile/elasticsearch 自动运行 ElasticSearch 并将命令设置为 /bin/bash 不起作用,附加到容器或尝试通过 SSH 访问它也不起作用,也无法使用 apt-get install -y openssh-server 安装 ssh-daemon。

在这种特殊情况下,我可以进入容器的文件系统并执行opt/elasticsearch/bint/plugin -i elasticsearch/marvel/latest,一切正常。

但是当我在运行的容器中没有终端时,如何安装需要使用apt-get 安装的附加服务?

【问题讨论】:

标签: elasticsearch docker


【解决方案1】:

只需使用以

开头的 Dockerfile 扩展它
FROM dockerfile/elasticsearch

并安装 marvel 或 ssh-server 或任何您需要的东西。然后,以正确的命令结束以启动您的服务。您可以使用 supervisor 启动多个服务,请参阅Run a service automatically in a docker container 了解更多信息。

【讨论】:

  • 有没有办法扩展 Dockerfile,而不是图像?假设我有一个用于电子邮件服务器的 Dockerfile。它以各种方式存储文件(Amazon S3、CEPH 等),所以我需要一个用于这些服务的库。我想有一个用于服务器的基本 Dockerfile,然后每个服务有一个 Dockerfile 用于存储文件。所有这一切都无需担心中间图像。
  • 不。在这种情况下,一种策略可以是一个 Dockerfile,其中包含尽可能多的共享功能,以及一组在新构建的镜像上扩展的小型 Dockerfile,为特定服务安装库
  • @qkrijger - 感谢您让我走上正确的道路 - 我在最近的回答中提供了一个完整的 Dockerfile。
  • 如果您要扩展的图像已经定义了入口点怎么办?扩展时还能有另一个入口点吗?
【解决方案2】:

如果您不介意使用 docker-compose,我通常会为您计划重用的基础镜像添加第一部分,然后将该镜像用作其余服务的 Dockerfiles,大致如下:

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

    collector:
         build: ./images/collector

然后,在 images/collector/Dockerfile 中,由于我的项目名为 webtrack,我将输入

FROM webtrack_base
...

现在完成了!

【讨论】:

    【解决方案3】:

    2016 年 8 月更新

    目前关于如何使用最新版本的 ElasticSearch(例如 2.3.5)、Kibana (4.5.3) 和 Marvel & Sense 插件的信息很少,我选择走更陡峭的道路并编写自己的图片。

    请找到源代码(Dockerfile)和自述文件here

    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 here 上的存储库

    用法:

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

    您可以使用 http://localhost:9200 连接到 Elasticsearch,使用 http://localhost:5601 连接到其 Kibana 前端。

    您可以使用 http://localhost:5601/app/marvel 连接到 Marvel 并使用 http://localhost:5601/app/sense 连接到 Sense

    希望这对其他人有所帮助并节省一些时间!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-02
      • 2019-07-04
      • 2016-08-16
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多