2015-11-03 52 views
1

我想创建一个码头容器来加载MEAN栈(特别是Mongo-Node)。根据我的理解,我不能在我的Dockerfile中使用多个FROM语句,在Docker镜像上设置Node和Mongo的最简单方法是什么?其中使用FROM的Docker MEAN栈?

我做到这一点,

FROM node:0.10.40 

RUN <whatever the mongo install command is> 

或此,

FROM mongo:2.6.11 

RUN <whatever the npm install command is> 

或其他什么东西?

+1

我认为Docker方法是在每个容器中运行单独的服务,您需要运行应用程序的节点容器和mongo的一个容器。 – Carlangueitor

回答

1

看看支持这些源码的Dockerfiles!

如果它们都来自可比较的来源(即。ubuntu),那么你应该能够将mongo dockerfile修改为从节点图像去,从而生成一个包含两种可用服务的图像。

因此,修改the mongo:2.6.11 dockerfile

FROM node:0.10.40 
RUN groupadd -r mongodb && useradd -r -g mongodb mongodb 

RUN apt-get update \ 
    && apt-get install -y --no-install-recommends \ 
     ca-certificates curl \ 
     numactl \ 
    && rm -rf /var/lib/apt/lists/* 

# grab gosu for easy step-down from root 
RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 
RUN curl -o /usr/local/bin/gosu -SL "https://github.com/tianon/gosu/releases/download/1.6/gosu-$(dpkg --print-architecture)" \ 
    && curl -o /usr/local/bin/gosu.asc -SL "https://github.com/tianon/gosu/releases/download/1.6/gosu-$(dpkg --print-architecture).asc" \ 
    && gpg --verify /usr/local/bin/gosu.asc \ 
    && rm /usr/local/bin/gosu.asc \ 
    && chmod +x /usr/local/bin/gosu 

RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys DFFA3DCF326E302C4787673A01C4E7FAAAB2461C 

ENV MONGO_VERSION 2.6.11 

RUN curl -SL "https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-$MONGO_VERSION.tgz" -o mongo.tgz \ 
    && curl -SL "https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-$MONGO_VERSION.tgz.sig" -o mongo.tgz.sig \ 
    && gpg --verify mongo.tgz.sig \ 
    && tar -xvf mongo.tgz -C /usr/local --strip-components=1 \ 
    && rm mongo.tgz* 

VOLUME /data/db 

COPY docker-entrypoint.sh /entrypoint.sh 
ENTRYPOINT ["/entrypoint.sh"] 

EXPOSE 27017 

...当然,你需要修改切入点,同时运行的服务,如果你做到这一点。


但是:不要这样做!最佳实践方法是拥有多个容器,每个服务一个容器,而不是仅构建一个运行堆栈中涉及的所有服务的容器。通过这种方式将组件保存在自己的沙盒名称空间中可以降低以下几个方面的复杂性:安全漏洞跨越容器的空间较少;容器之间的相互依赖性较小(新版节点所需的软件更新不会破坏MongoDB或相反);您的容器不需要初始系统或与监督多个服务相关的其他组件;等等。

请参阅Docker网站上的Container Linking documentation了解如何配置您的容器以便能够进行通信。

+0

因此,我可以运行多个容器,让他们互相交谈?又名我的节点容器可以与我的mongo容器交谈? – Catfish

+0

是的,您可以配置您的容器以便能够相互通信。 –

+0

查看https://docs.docker.com/userguide/dockerlinks/ –