【发布时间】:2019-07-11 05:37:59
【问题描述】:
我有一个使用 MongoDB 的 Node 项目。对于自动化测试,我们使用Mongo Memory Server
对于Mongo Memory Server,我的Mongo不支持Alpine,所以不能在Alpine镜像上运行
来自文档:
目前没有针对 alpine linux 的官方 MongoDB 版本。这意味着我们不能为 Alpine(或 MongoDB 未正式支持的任何其他平台)提取二进制文件,但您可以使用已经内置 mongod 的 Docker 映像,然后将 MONGOMS_SYSTEM_BINARY 变量设置为指向该二进制文件.这应该允许您在可以安装 mongod 的任何系统上使用 mongodb-memory-server。
我可以使用 Node 基础映像在 Docker 容器中运行所有测试,但对于生产,我想使用 Alpine 映像来节省内存。
所以我的 Dockerfile 看起来像这样。
FROM node:x.x.x as test
WORKDIR /app
COPY . /app
npm install
npm run build # we use Typescript, this runs the transpilation
npm test # runs our automated tests
FROM node:x.x.x-alpine
WORKDIR /app
COPY --from=test /app/src /app/src
COPY --from=test /app/package.json /app/package.json
COPY --from=test /app/package-lock.json /app/package-lock.json
COPY --from=test /app/config /app/config
COPY --from=test /app/scripts /app/scripts
RUN npm install --production
RUN npm run build
进行冒烟测试,生成的 Alpine 图像似乎可以正常工作。我认为它是安全的,因为我将模块安装在 alpine 映像本身中。
我想知道,这是最佳做法吗?有没有更好的方法来做这样的事情?也就是说,对于 Node 来说,安全地拥有一个更大的测试容器和一个小的生产容器。
【问题讨论】:
标签: node.js mongodb typescript docker alpine