Docker MEAN的堆栈从哪个FROM使用?

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

我是否这样做,

 FROM node:0.10.40 RUN <whatever the mongo install command is> 

或这个,

 FROM mongo:2.6.11 RUN <whatever the npm install command is> 

或者是其他东西?

看看支持这些源码的Dockerfiles!

如果他们都来自可比较的来源(即Ubuntu),那么你应该能够把mongo dockerfile和修改它从节点图像,从而生成一个两个服务可用的图像。

因此,修改了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 

…当然,如果你要这样做的话,你需要修改入口点来运行这两个服务。


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

请参阅Docker网站上的Container Linking文档 ,了解如何configuration您的容器以进行通信。