Docker の複数のコンテナーで Node.js アプリをセットアップしようとしています。私のアプリは現在、1つのUbuntu DOドロップレットにあり、次を使用しています:
- Node.js (エクスプレス 4)
- アプリ データベースの mysql
- キー値ストアの redis
- nginx を使用して負荷分散を行い、静的ファイルを提供します。
コンテナーごとに 1 つずつ、さまざまなパーツを Docker 化する必要があります。それから、Docker-Compose (以前は Fig として知られていた) を使用して、さまざまなコンテナーを単純に記述し、それらの間のリンクをセットアップします。マルチコンテナのアプローチについてはよくわかりません。
nginx 用に
1 つ、Node.js 用に 1 つ、エクスプレス アプリ用
に 1 つ、MySql 用
に 1 つ、Redis 用に 1 つ
Docker-compose.yml はどのようになりますか? nginx、mysql、redis は変更されていない公式イメージになると思いますか? node.js には Dockerfile を指すビルド ディレクティブがありますが、node.js の公式イメージと構成手順に基づいていることに注意してください。たとえば、mysql と redis を構成/プロビジョニングする必要があるため、それぞれが独自の Dockerfile で分離する必要があるということですか?
コンテナ間をリンクするにはどうすればよいでしょうか。ボリュームを使用してファイルをコピーし、ポートを設定し、hosts ファイルを調整して some.domain.com を nginx IP にマップしますか?
次に、nodemon や PM2 などのいくつかの npm パッケージをグローバルにインストールし、いくつかの cron ジョブを設定する必要があります... (Node.js コンテナー上で?)
これが最初のドラフトです。この新しいセットアップをよりよく理解するために、何か助けていただければ幸いです。
Docker-compose.yml
nginx:
image: nginx
links:
- "node"
node:
build: .
volumes:
- "app:/src/app"
ports:
- "3030:3000"
links:
- "db:mysql"
db:
image: mysql:5.6
environment:
- MYSQL_ROOT_PASSWORD=mypassword
Dockerfile
FROM node:0.12
RUN mkdir /src
RUN npm install nodemon pm2 -g
WORKDIR /src
ADD app/package.json /src/package.json
RUN npm install
ADD app/nodemon.json /src/nodemon.json
EXPOSE 3000
CMD npm start
この単純なプロジェクトをベースとして使用していますが、アプリには必要です