Контейнерная разработка с помощью NestJS и Docker
Войти

Контейнерная разработка с помощью NestJS и Docker

Контейнерная разработка с помощью NestJS и Docker

Создание совершенно нового приложение NestJS очень просто благодаря потрясающему CLI (интерфейсу командной строки). С помощью одной команды nest new app-name, мы получаем полностью функциональное, готовое к работе приложение.

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

Создание нового проекта

Мы можем легко создать новое приложение NestJS с помощью предназначенного для это CLI.

Чтобы установить CLI глобально, выполните:
1
yarn global add @nestjs/cli
Теперь для того, чтобы создать приложение, мы вполним:
1
nest n app-name

Естественно, app-name заменяется на актуальное название приложения. Имейте в виду, что приложение будет создано в папке app-name в текущем каталоге.

Мастер CLI попросит нас выбрать между npm и yarn; в этом руководстве мы будем использовать yarn.

Картинка

Теперь, когда наше приложение настроено, давайте перейдем к добавлению Docker.


Добавление Docker c помощью многостэтапной сборки

Контейнеризация наших приложений с помощью Docker имеет много преимуществ. Для нас два наиболее важных - это то, что приложение будет вести себя так, как ожидалось, независимо от среды, и что можно установить все внешние зависимости (в нашем случае Redis и PostgreSQL) автоматически при запуске приложения

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FROM node:12.13-alpine As development
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --only=development
COPY . .
RUN npm run build
FROM node:12.13-alpine as production
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --only=production
COPY . .
COPY --from=development /usr/src/app/dist ./dist
CMD ["node", "dist/main"]
И давайте пройдемся по нему построчно:
  1. 1
    FROM node:12.13-alpine As development

    Во-первых, мы указываем Docker использовать официальный образ Node.js, доступный в публичном репозитории.

    Указываем версию Node 12.13 и выбираем образ Alpine. Образа Alpine легче, но их использование может привести к неожиданному поведению.

    Поскольку мы используем функцию многоэтапной сборки, мы также используем оператор AS для именования образа development. Имя здесь может быть любым; это только ссылка на образ позже.

  2. 1
    WORKDIR /usr/src/app
    После установки WORKDIR, каждая команда выполняемая Docker (определенная в операторе RUN), будет выполняться в указанном контексте.
  3. 1
    2
    3
    COPY package*.json ./
    RUN npm install --only=development
    COPY . .

    Сначала копируем только package.json и package-lock.json (если он существует). Затем мы запускаем в контексте WORKDIR команду npm install. Как только он завершится, мы скопируем остальные файлы нашего приложения в контейнер Docker.

    Здесь мы устанавливаем только devDependencies из-за того, что контейнер используется в качестве «сборщика», который использует все необходимые инструменты для сборки приложения, а затем отправляет чистую папку /dist в production образ.

    Порядок операторов здесь очень важен из-за того, как Docker кэширует слои. Каждый оператор в Dockerfile создает новый слой образа, который кэшируется.



https://blog.logrocket.com/containerized-development-nestjs-docker/
Теги:
php