2021年4月26日月曜日

docker Node.jsの実行環境完成

 dockerを使ったNode.jsの実行環境を作りました。

実際には、データベースも含みますが、それは省略して、このようなフォルダ構成にしました。

フォルダ構成は、実行環境、開発環境により、様々な方法がありますが、VSCodeでの開発を前提にして、このようにしてみました。


MyApp

├─ .devcontainer

│   ├─ devcontainer.json

│   ├─ docker-compose.yml

│   └─ Dockerfile

├─ src

│   └─ 

├─ docker-compose.yml

├─ Dockerfile

├─ app.env

└─ .dockerignone



開発環境のdocker(.devcontainerフォルダ内)は、まだ、未完成ですから、ファイル構成のみ、書き残します。


プログラムのソースは、srcフォルダに置くことにしました。



docker-compose.yml


version: '3.8'

services:

  app:

    build:

      context: .

      args: 

        - NODE_ENV=production

    container_name: tp_app_container

    env_file: ./app.env

    environment:

      - TZ=Asia/Tokyo

    ports:

      - '80:3000'

    restart: always

    working_dir: /app

    command: npm start



Dockerfile


FROM node:14-slim


ARG NODE_ENV=production

ENV NODE_ENV $NODE_ENV


ARG PORT=3000

ENV PORT $PORT

EXPOSE $PORT


WORKDIR /app


RUN chown node:node /app

USER node


COPY --chown=node:node ./src/package*.json ./

RUN npm install

COPY --chown=node:node ./src .



.dockerignone


.git

*Dockerfile*

*docker-compose*

node_modules



狙いとしては、

・Node.jsのエラー時の再起動の管理は、dockerに任せる

・実行は、nodeユーザー

・ソースは、コンテナ内にコピーして実行する



この構成にたどり着くまでに苦労したのは、フォルダ、ファイルの権限です。

rootで実行するなら悩むことはありませんが、nodeユーザーで実行するために試行錯誤しました。

RUN chown node:node /app

がポイントです。

COPY --chown=node:node ./src/package*.json ./

の--chown=node:nodeは、この場合、不要だと思いますが、今後、Dockerfileを修正したときに忘れないように、残しておきました。

0 件のコメント:

コメントを投稿