「nodejs」と掛けまして、
「両親が共働きの女の子」と、ときます・・・
そのココロは・・・・
鍵を握るのはJS(女子小学生)です。
謎掛けを必死で考えてみた、ユゲタです。
サーバーでjavascriptが実行できるnodejsは、扱いになれると非常に頼もしいツールになります。
そんなnodejsをdockerを使って環境構築したいと思ったら、意外とめんどくさかったので、僕の行った方法を書き記しておきます。
docker-composeの各種ソースコード
/
├ docker-compose.yml
└ nodejs/
└ Dockerfile
version: '3'
services:
nodejs:
container_name: "node"
working_dir: "/var/www/html"
build:
context: ./nodejs/.
ports:
- "8080:8080"
- "8880:8880"
volumes:
- ~/web:/var/www/html
command: run.js
tty: true
FROM node:12.4.0-alpine
RUN apk add --no-cache yarn
$ docker-compose up -d
解説
僕の環境の場合は、ローカルフォルダの"~/web"をwebソースコード用のフォルダに固定しているので、それをdockerコンテナ内の"/var/www/html/"のシンボリックになるようにセットしています。
ご自身の環境に合わせた内容に書き換えてお使いください。
そして、nodejsのコンテナ起動で難しかった点としては、"docker-compose up -d"と-dオプションを付けても永続起動できてなくて、すぐに終了して"Exit"になっていましたが、
"docker-compose.yml"の最後に書いている"tty: true"を付けることによって、この問題が解消できました。
この設定は、upする時の永続起動してくれる命令だったんですね。
さらに、実際のnodejsのプログラムを永続的に動かす時に、foreverを使って動かしていたんですが、そのまま起動コマンドで書いた所、コマンドが実行されると、サーバーが終了してしまう現象が発生していました。
どうやらこれは、サーバーが無限ループを発生させていて、dockerコンテナは自動的に終了をしているという状態らしいです。
nodejsで"socket.io"などを使う場合などは永続起動が必要なので、どうすればいいか悩んでいたんですが、実はforeverを使わずに、そのままnodejsプログラムを起動すると、待受状態になってくれることが分かりました。
dockerを使った方がシンプルに構築できるなんて、思いも寄らないメリットでした。
本番環境でも、こうしたメリットが利用できるdockerを使うというのは悪くないですね。
0 件のコメント:
コメントを投稿