Как контейнеризировать приложение Nest.js с помощью Docker и Docker Compose

Что такое Docker и Docker Compose?

Docker — это платформа разработки с открытым исходным кодом, которая предоставляет технологию упаковки, используемую при создании и упаковке приложений, а также их зависимости в виде переносимых образов.

Эти образы затем запускаются как исполняемые компоненты в изолированной контейнерной среде. Запуск приложений в этих контейнерах обеспечивает стабильную производительность приложений в различных производственных системах без каких-либо проблем совместимости.

С другой стороны, Docker Compose — это инструмент, используемый вместе с Docker для упрощения процесса определения и управления многоконтейнерными приложениями.

Хотя Docker в основном используется для управления отдельными контейнерами, Docker Compose позволяет управлять конфигурацией нескольких контейнеров, которые необходимо запускать как одно приложение.

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

Прежде чем погрузиться в код, вам необходимо установить Docker Desktop на локальный компьютер.

Настройте проект Nest.js

В этом руководстве рассматривается процесс настройки двух контейнеров Docker, которые без проблем работают как одно приложение Nest.js. Первый контейнер будет содержать экземпляр образа Docker веб-сервера Nest.js, а второй контейнер будет выполнять образ базы данных Docker PostgreSQL.

Для начала установите инструмент командной строки Nest.js:

npm я -g @nestjs/cli

Теперь создайте новый проект Nest.js, выполнив приведенную ниже команду в своем терминале.

гнездо нового приложения docker-nest

Затем инструмент CLI отобразит несколько менеджеров пакетов, из которых вы сможете выбрать один из них для создания проекта. Нажмите предпочтительный вариант. В этом примере используется npm.

Наконец, вы можете перейти в папку проекта и запустить сервер разработки.

запуск запуска cd docker-nest-app npm

Создать модуль базы данных

Сначала установите зависимости:

npm install pg typeorm @nestjs/typeorm @nestjs/config

Затем в корневом каталоге проекта создайте файл .env и добавьте следующие значения конфигурации подключения к базе данных:

DATABASE_HOST=”db” DATABASE_PORT=5432 DATABASE_USER=”testUser” DATABASE_PASSWORD=”mypassword123″

Наконец, давайте продолжим и создадим модуль базы данных.

База данных модуля G гнезда

Теперь, после создания модуля, откройте файл базы данных /database.module.ts и включите следующий код конфигурации базы данных:

импортировать {Модуль} из ‘@nestjs/common’; импортировать { TypeOrmModule } из ‘@nestjs/typeorm’; импортировать { ConfigModule, ConfigService } из ‘@nestjs/config’; @Module({ imports: ( ConfigModule.forRoot(), TypeOrmModule.forRootAsync({ imports: (ConfigModule), useFactory: async (configService: ConfigService) => ({ type: ‘postgres’, хост: configService.get(‘DATABASE_HOST) ‘), порт: configService.get(‘DATABASE_PORT’), имя пользователя: configService.get(‘DATABASE_USER’), пароль: configService.get(‘DATABASE_PASSWORD’), синхронизировать: true, }), inject: (ConfigService), } ), ), }) класс экспорта DatabaseModule {}

После настройки образа Docker PostgreSQL с использованием этой конфигурации TypeORM приложение Nest.js установит соединение с базой данных.

Обновить файл app.module.ts

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

импортировать {Модуль} из ‘@nestjs/common’; импортировать { ConfigModule } из ‘@nestjs/config’; импортировать {AppController} из ‘./app.controller’; импортировать {AppService} из ‘./app.service’; импортировать { DatabaseModule } из ‘./database/database.module’; @Module({ импортирует: ( ConfigModule.forRoot({ envFilePath: ‘.env’, }), DatabaseModule, ), контроллеры: (AppController), поставщики: (AppService), }) класс экспорта AppModule {}

Настройте Dockerfile

Dockerfile записывает необходимый набор инструкций, которые нужны движку Docker для создания образа Docker. Он включает исходный код приложения и все его зависимости.

В корневом каталоге проекта создайте новый файл и назовите его Dockerfile. Затем добавьте следующее:

ОТ узла: 16.3.0-alpine3.13 WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm запустить сборку CMD («npm», «run», «start:dev»)

Там:

  1. FROM указывает базовый образ, который Docker должен использовать для создания образа приложения.
  2. WORKDIR указывает Docker установить каталог /app в качестве рабочего каталога приложения в контейнере.
  3. COPY package*.json./ копирует все файлы с этим форматом имени файла из текущего каталога приложения в каталог приложения.
  4. RUN npm install устанавливает необходимые пакеты и зависимости, необходимые приложению, в контейнере Docker.
  5. COPY… указывает Docker скопировать все файлы исходного кода приложения из текущего каталога в каталог /app.
  6. RUN npm run build собирает приложение Nest.js перед созданием образа Docker. Он компилирует код TypeScript в JavaScript и сохраняет результаты процесса сборки в каталоге dist.
  7. CMD определяет команду, которая будет запускаться при запуске контейнера. В этом случае мы запустим команду npm run start:dev, чтобы запустить сервер в режиме разработки.

Эта конфигурация позволяет приложению активно отслеживать изменения кода. При обнаружении изменений контейнер автоматически перестраивается.

Создать файл Docker Compose

В корне каталога проекта создайте новый файл docker-compose.yml и добавьте следующий контент:

версия: ‘3.9’ сервисы: сервер: сборка: . порты: – ‘3000:3000’ depend_on: – db db: image: ‘postgres’ порты: – ‘5432:5432’ среда: POSTGRES_PASSWORD: ‘mypassword123’ POSTGRES_USER: ‘testUser’ тома: – data:/var/lib/postgresql /объемы данных: данные:

Docker Compose будет использовать эти инструкции для создания и запуска двух образов в двух контейнерах Docker. Первый контейнер, сервер, будет хранить изображения приложения; работает на порту 3000.

Во втором контейнере будет храниться образ базы данных PostgreSQL. Вам не нужно указывать Dockerfile для этого образа — Docker будет использовать образ PostgreSQL, доступный в реестре образов Docker, для его сборки.

Запустить Docker-контейнер

Наконец, продолжайте создавать образы и запустите контейнер, выполнив следующую команду:

докер составить

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

Как контейнеризировать приложение Nest.js с помощью Docker и Docker Compose. Рисунок 1.

Теперь, когда ваш веб-сервер и контейнер базы данных работают, добавьте больше функциональности в свое приложение Nest.js. Например, вы можете создать Nest.js CRUD REST API.

Отправьте образ Docker в Docker Hub.

Следуй этим шагам:

1. Перейдите в Docker Hub, зарегистрируйтесь и войдите в панель управления учетной записью.

2. Нажмите кнопку «Создать репозиторий», введите имя репозитория, определите его видимость, выбрав Public или Private, затем нажмите «Создать».

Как контейнеризировать приложение Nest.js с помощью Docker и Docker Compose. Рисунок 2.

3. Теперь вам необходимо войти в учетную запись через терминал, выполнив приведенную ниже команду, а затем указать имя пользователя и пароль Docker.

вход в докер

4. Затем обновите имя образа Docker, чтобы оно соответствовало этому формату: / с помощью команды:

тег докера /

5. Наконец, отправьте образ Docker.

докер push /

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

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *