Докеризируйте свой REST API Node.js с помощью технологии контейнеризации Docker, которая упрощает процесс развертывания и управления.
Процесс развертывания и запуска приложений в разных средах может быть проблематичным, поскольку необходимо учитывать ряд факторов. таких как настройка переменных среды для настройки необходимых зависимостей и конкретных версий различных пакетов программного обеспечения.
Однако, используя технологию контейнеризации Docker, вы можете развертывать приложения в различных средах с минимальными усилиями со всеми необходимыми зависимостями в образе Docker. Это означает, что вам не нужно беспокоиться о настройке. Это упрощает процесс развертывания и запуска приложений в различных средах.
Что такое докер?
Докер — это платформа разработки, предоставляющая инструменты и среду для упаковки приложений в виде переносимых образов, которые можно запускать как автономные исполняемые компоненты в контейнерах.
Эти контейнеры составляют код приложения и необходимые зависимости для успешного запуска приложения в различных средах выполнения без каких-либо проблем.
Прежде чем начать, установите Docker на свой локальный компьютер. Ознакомьтесь с предварительными требованиями для конкретной платформы и инструкциями по установке из официальной документации.
Создайте REST API Node.js
Для начала, создать веб-сервер Node.js.
Вы можете найти код этого приложения в его Репозиторий GitHub.
Затем установите необходимые пакеты для этого проекта.
npm установить morgan pg knex
пг package используется для установки соединения с базой данных PostgreSQL. кнекс, с другой стороны, предоставляет простой API для взаимодействия с PostgreSQL — вы будете использовать его для написания SQL-запросов.
Наконец, вы будете использовать Морган, промежуточное ПО, которое регистрирует HTTP-запросы и ответы на консоли для отладки и мониторинга вашего приложения, работающего в контейнере Docker.
Наконец, откройте index.js файл и добавьте код ниже этого реализует простой REST API с тремя маршрутами.
константа экспресс = требовать("выражать")
константа Морган = требовать("морган")
константа приложение = экспресс()
константа дБ = требовать('./дб')
константа ПОРТ = процесс.env. ПОРТ || 5000app.use (морган('разработчик'))
app.use (express.json())
app.use (express.urlencoded({ расширенный: истинный }))приложение.получить('/', (req, res) => res.send('Привет, мир!' ))
приложение.получить('/ пользователи', асинхронный (требование, разрешение) => {
константа пользователи = Ждите БД.выбрать().от('пользователи')
res.json (пользователи)
})приложение.пост('/ пользователи', асинхронный (требование, разрешение) => {
константа пользователь = Ждите дБ('пользователи').вставлять({ имя: req.body.name }).returning('*')
res.json (пользователь)
})
app.listen (ПОРТ, () => консоль.бревно(`Сервер в порту:${ПОРТ}`))
Настройка подключения к базе данных
REST API будет взаимодействовать с экземпляром Docker PostgreSQL, однако сначала вам необходимо настроить подключение к базе данных в вашем приложении. В корневом каталоге папки вашего проекта создайте db.js файл и добавьте код ниже.
константа кнекс = требовать('кнекс')
модуль.экспорт = knex({
клиент: 'постгрес',
связь: {
хозяин: 'дб',
пользователь: 'тестовый пользователь',
пароль: 'мой пароль123',
база данных: 'тестовый пользователь',
},
})
Настройте файлы migrate.js и seed.js
Эти два файла позволят создать таблицу в базе данных и заполнить ее тестовыми данными через API. Создать новую папку, сценарии, в корневом каталоге вашего проекта и добавьте два файла: мигрировать.js и seed.js.
в мигрировать.js файл, добавьте код ниже:
константа дБ = требовать('../дб');
(асинхронный () => {
пытаться {
Ждите db.schema.dropTableIfExists('пользователи')
Ждите db.schema.withSchema ('общественный').создатьТаблицу('пользователи', (таблица) => {
таблица.инкременты()
таблица.строка('имя')
})
консоль.бревно('Таблица пользователей создана!')
процесс.выход(0)
} ловить (ошибка) {
консоль.лог (ошибка)
процесс.выход(1)
}
})()
Этот код создаст пользователи таблица с автоматически увеличивающимся столбцом идентификатора и имя столбец в базе данных.
Далее, в seed.js файл, добавьте код ниже:
константа дБ = требовать('../дб');
(асинхронный () => {
пытаться {
Ждите дБ('пользователи').вставлять({ имя: «Тестовый пользователь 1» })
Ждите дБ('пользователи').вставлять({ имя: «Тестовый пользователь 2» })
консоль.бревно(«Добавлены фиктивные пользователи!»)
процесс.выход(0)
} ловить (ошибка) {
консоль.лог (ошибка)
процесс.выход(1)
}
})()
Этот код реализует асинхронную функцию, которая вставит двух пользователей в базу данных PostgreSQL.
Наконец, добавьте эти команды в свой пакет.json файл.
"скрипты": {
"начинать": "узел index.js",
"мигрировать": "узловые скрипты/migrate.js",
"семя": "узловые скрипты/seed.js"
},
Поскольку у вас нет настроенного клиента, для тестирования API вам потребуется запустить два файла как сценарии вместе с запуск нпм команда.
Настроить Dockerfile
Dockerfile определяет инструкции, необходимые механизму Docker для создания образа Docker. В корневом каталоге вашего проекта создайте новый файл и назовите его, Докерфайл. Затем добавьте следующие инструкции, чтобы создать образ Docker для приложения Node.js.
ОТ узел:16.3.0-альпийский3.13
РАБОЧИЙКАТАЛОГ /app
КОПИРОВАТЬ пакет*.json ./
БЕГАТЬ установка нпм
КОПИРОВАТЬ. .
РАЗОБЛАЧАТЬ8000
CMD [ "узел", "index.js" ]
Давайте разберем это:
- ОТ — Эта инструкция устанавливает базовый образ для приложения, которым является образ Node.js Alpine, упрощенная версия образа Node.js, который можно найти в реестре Docker.
- РАБОЧИЙКАТАЛОГ - наборы /app каталог в качестве рабочего каталога.
- КОПИРОВАТЬ пакет *.json./ - указывает Docker скопировать все файлы с этим форматом имени файла из текущего каталога в /app папка.
- БЕГАТЬ - выполняет и строит образ.
- КОПИРОВАТЬ.. - копирует исходные файлы в /app папка.
- РАЗОБЛАЧАТЬ - это указывает Docker открыть порт внутри контейнера для внешней среды, в данном случае для хост-компьютера.
- CMD — указывает команду, которая будет выполняться при создании контейнера Docker из образа.
Создайте файл компоновки Docker
Чтобы приложение Node.js могло взаимодействовать с экземпляром Docker PostgreSQL, два приложения должны работать в контейнерах Docker в одной и той же сетевой среде.
По этой причине вам необходимо определить и создать как образ приложения, так и экземпляр PostgreSQL, используя Докер Сочинять — инструмент, позволяющий создавать и управлять несколькими контейнерами Docker.
Проще говоря, используя Docker Compose, вы можете определить службы, из которых состоит ваше приложение, как единое целое, в данном случае REST API Node.js и базу данных PostgreSQL.
Создайте новый файл, докер-compose.yml, в корневом каталоге и добавьте следующий код:
версия:'3.9'
услуги:
сервер:
строить:.
порты:
-'5000:5000'
зависит от:
-дБ
дБ:
изображение:'постгрес'
порты:
-'4321:5432'
среда:
POSTGRES_ПАРОЛЬ:'мой пароль123'
POSTGRES_USER:'тестовый пользователь'
тома:
-данные:/var/lib/postgresql/данные
тома:
данные:
Этот код создаст и запустит два контейнера Docker. Первый контейнер, сервер, Docker Compose использует Dockerfile для создания образа для этого контейнера.
Он также указывает, что контейнер сервера зависит от дБ контейнер. Это означает, что сервер контейнер должен быть запущен после дБ контейнер для соединения с ним.
Второй контейнер — это контейнер базы данных PostgreSQL. Вам не нужно указывать Dockerfile для этого контейнера, так как он будет создан из образа PostgreSQL в реестре образов Docker.
Создайте образы Docker
Используйте команду Docker Compose для создания образов и запуска двух контейнеров.
docker-compose up -d
Вы должны увидеть аналогичный ответ после успешного завершения процесса.
Протестируйте REST API
Выполните приведенную ниже команду, чтобы протестировать REST API, работающий в контейнере Docker. Он должен создать таблицу в базе данных PostgreSQL.
docker exec docker_node-server-1 npm запустить миграцию
Вы должны увидеть аналогичный ответ.
Совместное использование образов Docker
Последним шагом является отправка образа Docker для вашего приложения Node.js в Docker Hub. Это похоже на отправку ваших проектов на GitHub.
- Направляйтесь к Докер Хаб и зарегистрируйте учетную запись и войдите в панель управления пользователя.
- Далее нажмите на Создать репозиторий. Укажите имя вашего репозитория и установите его видимость либо Общественный или Частный а затем нажмите Создавать.
- Чтобы отправить образ Docker вашего приложения в Docker Hub, вам сначала нужно войти в свою учетную запись через терминал, а затем указать свое имя пользователя и пароль.
вход в докер
- Затем обновите имя вашего образа Docker, чтобы оно соответствовало этому формату:
/ . Запустите команду ниже, чтобы внести это изменение:
тег докера /
- Наконец, отправьте образ Docker.
докер толчок /
Использование Docker в разработке
Это руководство затронуло лишь часть потенциала, который может предложить Docker. Однако теперь вы можете использовать технологию контейнеризации Docker для упаковки любого приложения и всех его зависимостей как образы, которые могут быть развернуты в различных средах разработки, а также в производственных средах, таких как облако, без каких-либо икота.