web-dev-qa-db-ja.com

Node + Docker Compose:開発と本番環境のセットアップ

プロジェクトにdocker、docker-compose、nodejsを使用してdevelopmentproductionの両方の環境を持つソリューションを探しています。

これにどのように取り組みますか?

基本的に私が欲しいのはdocker本番環境を開始するコマンド私の開発環境を開始するコマンド(たとえば、nodemonを使用できます)です。

ここに私のDockerfileがあります

FROM node:13-Alpine

RUN mkdir /app

WORKDIR /app

COPY . /app

RUN npm install

RUN npm run build

EXPOSE 1234

CMD ["npm", "run", "prod"] # <--- Have a possibility to run something like "npm run dev" here instead

docker-compose.yml

version: "3"
services:
    findus:
        build: .
        ports:
            - "1234:1234"
        links:
            - mongo
        container_name: myapp
    mongo:
        image: mongo
        restart: always
        ports:
            - "4444:4444"

package.json

// ...
    "scripts": {
        "build": "tsc",
        "dev": "nodemon source/index.ts",
        "prod": "node build/index.js"
    },
// ...
4
Sir hennihau

次のような構造を作成できます。

docker-compose.yml -->
      docker-compose.dev.yml
      docker-compose.prod.yml

基本構成が存在する場所docker-compose.yml、ポートやユーザー資格情報などの環境固有の情報はdocker-compose.dev.ymlまたはdocker-compose.prod.yml

そして、あなたは以下で開発環境を実行することができます:

docker-compose \
    -f docker-compose.yml \
    -f docker-compose.dev.yml \
    up -d

または、以下の製品環境:

docker-compose \
    -f docker-compose.yml \
    -f docker-compose.prod.yml \
    up -d
1
Adi Dembak

これを行う1つの方法は、次のようにDockerfileに2つの「ターゲット」を作成することです。

Dockerfile:

FROM node:13-Alpine As development

RUN mkdir /app

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

RUN npm run build

FROM node:13-Alpine as production

ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}

WORKDIR /app

COPY package*.json ./

RUN npm install --only=production

COPY . .

COPY --from=development /app/dist ./dist

CMD ["node", "dist/index.js"]

そしてあなたのdocker-compose上のそれらは開発バージョンのみを実行します:

version: '3.7'

services:
  main:
    container_name: main
    build:
      context: .
      target: development
    command: npm run dev
...

したがって、開発環境では、次のコマンドを実行できます。

docker-compose up

製品版では、Dockerを直接実行できます

docker run-ターゲットの生産

「npm run build」を実行すると、dist/productionフォルダーが生成されると想定しているため、ルートフォルダーのindex.jsで直接実行するのではなく、そこにノードを実行することをお勧めします。

0
André Oliveira