在一个docker镜像中运行两个nodejs应用程序

时间:2016-09-18 12:46:05

标签: node.js docker dockerfile

如何在一个docker镜像中运行两个不同的nodejs应用程序? 两个不同的CMD [ "node", "app.js"]CMD [ "node", "otherapp.js"]将不起作用,因为 Dockerfile 中只能有一个CMD指令。

1 个答案:

答案 0 :(得分:6)

我建议使用pm2作为入口点流程,它将处理docker镜像中的所有NodeJS应用程序。这样做的好处是pm2可以作为essential in docker的适当流程管理员。其他有用的功能是负载平衡,重新启动消耗太多内存或因任何原因而死的应用程序,以及日志管理。

这是Dockerfile我已经使用了一段时间了:

#A lightweight node image
FROM mhart/alpine-node:6.5.0

#PM2 will be used as PID 1 process
RUN npm install -g pm2@1.1.3

# Copy package json files for services

COPY app1/package.json /var/www/app1/package.json
COPY app2/package.json /var/www/app2/package.json

# Set up working dir
WORKDIR /var/www

# Install packages
RUN npm config set loglevel warn \
# To mitigate issues with npm saturating the network interface we limit the number of concurrent connections
    && npm config set maxsockets 5 \
    && npm config set only production \
    && npm config set progress false \
    && cd ./app1 \
    && npm i \
    && cd ../app2 \
    && npm i


# Copy source files
COPY . ./

# Expose ports
EXPOSE 3000
EXPOSE 3001

# Start PM2 as PID 1 process
ENTRYPOINT ["pm2", "--no-daemon", "start"]

# Actual script to start can be overridden from `docker run`
CMD ["process.json"]
process.json中的

CMD文件为described here