docker - Docker MEAN堆栈使用哪个FROM?

标签 docker

我想创建一个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并将其修改为来自节点镜像,从而生成一个同时具有两个服务的镜像。

因此,修改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以了解如何配置容器以进行通信。

关于docker - Docker MEAN堆栈使用哪个FROM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33506121/

相关文章:

在 "could not access file $libdir/..."中为 Postgres 11 结果创建扩展

linux - 我无法在 docker 镜像中提交更改

docker - 无法更改在Docker中运行的数据库

docker - 如何在浏览器中访问Docker Selenium Hub控制台?

docker - 如何关闭 docker 容器内的主机(ubuntu)

Docker 日志问题 : Logs are not created or displayed in Tomcat's logs folder in docker container

bash - 如何在 shell 中等待文件创建并监听其内容直到超时

docker - Alpine : unsatisfiable constraints

Docker - 如何设置到容器到本地主机的连接

docker - 错误 : 2 matches found based on name: network <nameofservice>_default is ambiguous