2016-09-18 17 views
1

ドッカー画像で2つの異なるnodejsアプリケーションを実行するにはどうすればよいですか? 2つの異なるCMD [ "node", "app.js"]CMD [ "node", "otherapp.js"]は動作しません。CMDディレクティブが Dockerfileに1つしか存在しない可能性があります。1つのドッカー画像で2つのnodejsアプリケーションを実行中

+0

であるあなたは、「起動スクリプト」内の両方のノードのアプリの開始コマンドをラップすることができ - これについては、[Dockerチュートリアル](http://ishlema.co.za/running-services-when-docker-container-starts/)を参照してください - 私はあなたがそれが役に立つと思う。 – ishmaelMakitla

+0

あなたは以下の解決策が与えられますが、なぜそれを望みますか?このように2つを結合することのメリットは何ですか? –

+0

ほとんどの場合、それぞれのアプリを独自のイメージで実行する方が良いと私は同意します。しかし、私たちの場合、両方のアプリケーションが1つのネットワーク上で動作することを保証する他の方法はありませんでした。ストーリーはあまりにも長いので、SOのコメントはありません。私たちはそれらをある日に分割してもらいたい – Mchl

答えて

3

ドッカーイメージ内のすべてのNodeJSアプリケーションを処理するエントリポイントプロセスとしてpm2を使用することをお勧めします。これの利点は、pm2essential in dockerである適切なプロセスマネージャとして処理できることです。他の有用な機能は、ロードバランシング、何らかの理由でメモリが多すぎるか死ぬかを再起動するアプリケーションの再起動、およびログ管理です。

は、ここで私は今、いくつかの時間のために使用してきましたDockerfileです:CMD

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

#PM2 will be used as PID 1 process 
RUN npm install -g [email protected] 

# 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ファイルがdescribed here

+0

ありがとう、私はそれを調べます。 – Oleg

関連する問題