Как мы все знаем, докер — это не просто еще один модный слой, но один из лучших инструментов для контейнеров для инженеров программного обеспечения. Благодаря способности отправить любое приложение независимо от его экологических требований Docker решила проблемы на этапе развития и производства, как; несоответствия при запуске вашего приложения с фразой, популярной известной как «Ургх .. но он работал на моем компьютере!»
В этом руководстве показано, как подключить приложение Nestjs, построенное с помощью Nestjs CLI и Docker.
Требования
- Докер установлен
- Приложение Nestjs
1. Установка докера
a) Для руководства по установке по посещению Windows https://docs.docker.com/docker-for-windows/install/
b) Для руководства по установке на Linux Vision https://docs.docker.com/install/linux/docker-ce/ubuntu/
c) Для руководства по установке на MacOS посетите https://docs.docker.com/docker-for-mac/
2. Nestjs Application.
Создайте и разрабатывайте приложение NASTJS или используйте образец проекта, указанного ниже для демонстрации: https://github.com/abbasogaji/Dockerized-nestjs-production-app.
Структура проекта приложений Nestjs обычно выглядит так:
И связанные сопутствующие команды NPM для работы, тестирования и создания вашего проекта NASTJS находятся в вашем объекте скриптов Package.json (свойство);
Некоторые из этих команд будут использоваться, когда мы связываем наше приложение.
Теперь мы пишем наш докерфиль
FROM node:10 AS builder WORKDIR /app COPY ./package.json ./ RUN npm install COPY . . RUN npm run build FROM node:10-alpine WORKDIR /app COPY --from=builder /app ./ CMD ["npm", "run", "start:prod"]
Авария
Процесс сборки разделен на два шага (многоступенчатая сборка);
- Первый шаг использует узел: 10 в качестве базового изображения, устанавливает зависимости и транспортирует файлы Tearscript в JavaScript. Полный узел Image используется для этого процесса, поскольку он содержит все инструменты по сборке необходимости, необходимые для зависимостей с нативной сборкой (узел-GYP, Python, GCC, G ++, Make)
- Второй этап использует узел: 10-Alpine (легкая версия), копии файловой системы с первого шага (промежуточного) контейнера, устанавливает команду для запуска приложения. Процесс с несколькими шагами был настроен для эффективной установки наших зависимостей на первом шаге и для запуска легкого контейнера из изображения нашего последнего этапа.
На первом шаге;
- Мы установим наш каталог приложений на «/приложение», поэтому наше приложение входит в «/приложение» в нашем файловой системе Docker Image.
- Мы скопируем наше «package.json» Затем запустите «Установка NPM» Перед тем, как мы скопируем оставшиеся файлы проекта, потому что это предотвратит ненужные установки в любое время, мы повторно создаем наше изображение и используем кэшированные установки.
- Мы запустим «NPM Run Build» для создания файлов производства в «dist/main» Справочник, который требуется нашей команде «RUN» в контексте производства I.E (начало прогона NPM: PROD)
На последнем этапе;
- Мы установим наш каталог приложений на «/приложение», поэтому наше приложение входит в «/приложение» в нашем файловой системе Docker Image.
- Мы скопируем файловую систему предыдущего шага.
- Мы установим команду для запуска нашего приложения
- Создать .Dockerignore, чтобы избежать копирования Node_Modules; Так в твоем .Dockerignore Вы вводите «Node_modules» И теперь у вас есть свой Dockerfile и .Dockerignore файл в базовом каталоге вашего проекта, как показано ниже;
- Теперь мы строим наш образ, назначаю тег с форматом «Docker-имя пользователя/имя проекта», затем нажмите в Docker Hub, запустив:
docker build -t exampleuser/dockerized-nest-project . docker push exampleuser/dockerized-nest-project
Вопрос:|: Теперь мы сделаем; Но подожди минутку? Экспес порта командование было опущено? Ответ : Потому что команда выставки не уважается некоторыми PAAS (платформа AS Service) поставщики E.g (Heroku).
Но если вы разверните свое изображение докера к облачным провайдере, который требует команды expose, которая отображает ваши порыты сети Docker на ваш хост-порт. Затем вы должны добавить «выдержать 3000» в DockerFile перед последней командой CMD;
# Using Node:10 Image Since it contains all # the necessary build tools required for dependencies with native build (node-gyp, python, gcc, g++, make) # First Stage : to install and build dependences FROM node:10 AS builder WORKDIR /app COPY ./package.json ./ RUN npm install COPY . . RUN npm run build # Second Stage : Setup command to run your app using lightweight node image FROM node:10-alpine WORKDIR /app COPY --from=builder /app ./ EXPOSE 3000 CMD ["npm", "run", "start:prod"]
Примечание : Использование многоступенчатого процесса сборки для подключения нашего приложения NASTJS не является необходимостью и использовалась только потому, что мы хотели бы, чтобы наше изображение было легким. Для одного этапа процесс сборки мы напишем следующее;
# Using Node:10 Image Since it contains all # the necessary build tools required for dependencies with native build (node-gyp, python, gcc, g++, make) FROM node:10 WORKDIR /app COPY ./package.json ./ RUN npm install COPY . . RUN npm run build # EXPOSE 3000 CMD ["npm", "run", "start:prod"]
Тогда, наконец, нам придется Восстановить , деко и Беги изображение
Оригинал: «https://dev.to/abbasogaji/how-to-dockerize-your-nestjs-app-for-production-2lmf»