docker-composeでnodejsを効率よく扱うための方法

2020年2月25日

テクノロジー

「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を使うというのは悪くないですね。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。