Рубрики
Uncategorized

Dockerize Your Node

Эй, добро пожаловать в ответ. Эта статья является частью серии Dockerize, обязательно проверьте … Tagged с узлом, докером, DevOps, JavaScript.

Серия Dockerize (5 серии деталей)

Эй, добро пожаловать в ответ. Эта статья является частью серии Dockerize, обязательно проверьте введение, где я рассказываю о некоторых концепциях, которые мы собираемся использовать.

Сегодня мы рассмотрим наше приложение узла, очень похожее на то, как мы рассмотрели наше приложение React в последней части, используя преимущества схема строителя с помощью многоэтапных сборки!

Я также снял видео, если вы хотите следовать за

Настройка проекта

Я инициализировал простое приложение Express

├── node_modules
├── index.js
├── package.json
└── yarn.lock
const express = require('express');

const app = express();
const PORT = process.env.PORT || 4000;

app.get('/', (request, response) => {
  response.status(200).json({
    message: 'Hello Docker!',
  });
});

app.listen(PORT, () => {
  console.log(`Server is up on localhost:${PORT}`);
});

Я также настройка Esbuild чтобы объединить наш проект.

"build": "esbuild --bundle src/index.js --outfile=build/app.js --minify --platform=node"

Для получения более подробной информации вы можете проверить мою предыдущую статью Blazing Fast TypeScript с WebPack и Esbuild Анкет

Для разработки

Начнем с добавления Dockerfile

FROM node:14-alpine AS development
ENV NODE_ENV development
# Add a work directory
WORKDIR /app
# Cache and Install dependencies
COPY package.json .
COPY yarn.lock .
RUN yarn install
# Copy app files
COPY . .
# Expose port
EXPOSE 4000
# Start the app
CMD [ "yarn", "start" ]

Давайте создадим Docker-compose.dev.yml Анкет Здесь мы также установим наш код в том чтобы мы могли синхронизировать наши изменения с контейнером во время развития.

version: "3.8"

services:
  app:
    container_name: app-dev
    image: app-dev
    build:
      context: .
      target: development
    volumes:
      - ./src:/app/src
    ports:
      - 4000:4000

Давайте обновим наш Package.json сценарии

"dev": "docker-compose -f docker-compose.dev.yml up"

Мы можем использовать -d флаг для запуска в режиме демона

Давайте начнем развиваться!

yarn dev

Отлично, наш сервер Dev встал!

Attaching to app-dev
app-dev  | yarn run v1.22.5
app-dev  | $ nodemon src/index.js
app-dev  | [nodemon] to restart at any time, enter `rs`
app-dev  | [nodemon] watching path(s): *.*
app-dev  | [nodemon] starting `node src/index.js`
app-dev  | Server is up on localhost:4000

Для производства

FROM node:14-alpine AS builder
ENV NODE_ENV production
# Add a work directory
WORKDIR /app
# Cache and Install dependencies
COPY package.json .
COPY yarn.lock .
RUN yarn install --production
# Copy app files
COPY . .
# Build
CMD yarn build

FROM node:14-alpine AS production
# Copy built assets/bundle from the builder
COPY --from=builder /app/build .
EXPOSE 80
# Start the app
CMD node app.js

Давайте добавим Docker-compose.prod.yml для производства

version: "3.8"

services:
  app:
    container_name: app-prod
    image: app-prod
    build:
      context: .
      target: production
docker-compose -f docker-compose.prod.yml build

Давайте начнем наш производственный контейнер на порту 80 с именем React-App

docker run -p 80:4000 --name node-app app-prod

Следующие шаги

При этом мы должны быть в состоянии воспользоваться Docker в нашем рабочем процессе и быстрее развернуть наши производственные изображения на любую платформу по нашему выбору.

Не стесняйтесь обращаться ко мне в Twitter Если вы столкнетесь с какими -либо проблемами.

Серия Dockerize (5 серии деталей)

Оригинал: «https://dev.to/karanpratapsingh/dockerize-node-application-222k»