2015-11-03 56 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/ –