Dockerize вашего первого приложения Nodejs

Я много раз использовал docker, но контейнеризация приложений казалась мне намного сложнее из-за всех этих dockerfiles и инструкций по docker compose. В этой статье я постараюсь показать вам, как вы можете легко контейнеризировать ваше приложение NodeJS.

Что такое docker?

Для начала позвольте мне рассказать вам, что такое docker и почему его нужно использовать. Docker — это программное обеспечение, которое использует виртуализацию на уровне ОС для доставки программного обеспечения в пакетах, называемых контейнерами. Вкратце, это просто приложение, которое как бы дает вам виртуальную машину, которую вы можете развернуть в другом месте, но основное различие между виртуальной машиной и контейнером docker в том, что виртуальная машина — это полноценная операционная система, работающая в виртуальной среде, что означает, что контейнер docker будет иметь хост ОС и гостевую ОС для каждой виртуальной машины. С другой стороны, контейнеры docker — это просто мини виртуальные машины, которые используют ядро основной ОС, что делает их очень легкими.

Итак, почему их нужно использовать?

Возможно, вы сталкивались с этим мемом, и это именно та причина, по которой мы используем docker. Он помогает вам создавать приложения, не беспокоясь о том, будет ли оно работать в производственной среде или нет. Пока оно работает внутри контейнера, вы можете быть уверены, что оно будет работать где угодно.

Начало работы

Теперь давайте начнем с создания нашего первого контейнера. Для этой статьи мы будем использовать простое приложение аутентификации на nodejs с MySQL в качестве базы данных. Вот как выглядит каталог приложений:

Заметили docker-compose.yml и Dockerfile в конце? Это два главных супергероя этой статьи :).

Dockerfile — это набор инструкций для сборки образов. Вы можете думать об этом как о ручных инструкциях, которые вы можете дать, если вы не используете docker, например, запуск пакетов npm, запуск приложения node и т.д.

Docker-compose.yml используется для запуска образов. В нем указываются все службы, переменные окружения и т.д. Если вы знакомы с командой docker run, то это то же самое. Однако вместо того, чтобы каждый раз выполнять команду docker run в терминале, вы используете docker-compose.yml.

Теперь давайте начнем с создания нашего Dockerfile. Создайте файл с именем Dockerfile в корневом каталоге вашего приложения и вставьте в него приведенное ниже содержимое.

FROM node:14
WORKDIR /app

COPY package.json .
COPY yarn.lock .

RUN yarn install

COPY . .

CMD ["yarn", "start"]
Войти в полноэкранный режим Выход из полноэкранного режима

Позвольте мне пройтись по каждому из них по очереди.

  • FROM node:14: Это описывает, что ваш родительский образ — это node версии 14.

  • WORKDIR /app: Это означает, что ваш рабочий каталог будет /app внутри контейнера.

  • COPY package.json .: Это довольно простое действие, которое просто скопирует package.json в рабочий каталог. То же самое касается yarn.lock, а также COPY. ., где мы даем инструкции скопировать все из текущего каталога в рабочий каталог.

  • RUN yarn install: Инструкция RUN используется для запуска команды Linux внутри вашего приложения. Здесь мы даем инструкции по выполнению команды yarn install (устанавливает пакеты nodejs). Если вы используете npm, то вместо yarn install вы запустите npm install.

  • CMD [«yarn», «start»]: Инструкция CMD определяет программу по умолчанию, которая будет выполняться после запуска контейнера.

Пока все хорошо. Давайте создадим наш файл docker-compose.yml.

version: "2"

services:
  mysql_container:
    container_name: <any custom name>
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: <mysql-root-password>
      MYSQL_DATABASE: <mysql-root-database>
    restart: always
    volumes:
      - mysql_db:/var/lib/mysql

  # API
  app:
    build: .
    ports:
      - 3000:3000
    depends_on:
      - mysql_container

volumes:
  mysql_db: {}

Войти в полноэкранный режим Выход из полноэкранного режима

Убедитесь, что вы правильно расставили отступы в файле docker-compose.yml.

  • версия: «2»: Указывает версию docker, которую вы используете.
  • services: Это место, где мы определяем все сервисы и их конфигурацию, необходимую для работы вашего приложения на node. Как было сказано ранее, в этой статье я использую простое приложение для аутентификации на node с MySQL в качестве базы данных. Поэтому здесь я определил две службы mysql_container и app. Давайте рассмотрим их по очереди.

    • mysql_container: Здесь я определил базу данных.
      • Имя_контейнера: Вы можете по желанию задать имя_контейнера. Это просто пользовательское имя для вашего контейнера.
      • image (образ): Здесь указывается, какой образ использует ваша служба. В данном случае я использую MySQL, поэтому я написал это там. Если вы используете любую другую базу данных, например, PostgreSQL или mongo, вы можете использовать и это.
      • окружение: Здесь вы определяете переменные окружения, которые вы поместили в файл .env. Различные образы требуют определения различных переменных окружения, поэтому если вы используете какую-либо другую базу данных, просто проверьте документацию.
      • restart always: Обеспечивает перезапуск вашего контейнера при перезагрузке docker или сбое приложения.
      • volumes: Здесь вы определяете тома, которые использует ваше приложение. По умолчанию данные в контейнере будут храниться до тех пор, пока вы не остановите его. После этого данные исчезнут. Чтобы избежать этого, вы используете тома. Здесь я указал путь /var/lib/mysql, который является местом расположения БД по умолчанию в случае MySQL.
    • app: Это наше основное приложение для node.
      • build: Ранее мы уже использовали dockerfile, чтобы дать инструкции по сборке для нашего приложения. Здесь мы указываем путь к dockerfile.
      • ports: Сопоставит порт хоста с портом контейнера. Короче говоря, это откроет порт 3000 из контейнера.
      • зависит_от: Поскольку нам требуется база данных MySQL перед запуском нашего приложения, здесь мы укажем, что пока mysql_container не запущен, не запускайте приложение.
  • volumes: Здесь мы определили все тома, которые мы используем.

Пока все хорошо. Последним шагом будет выполнение команды sudo docker-compose -f docker-compose.yml up. Это запустит наше контейнерное приложение.

Заключение

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

Спасибо, что прочитали. Надеюсь, вам понравилась эта статья :).

Оцените статью
devanswers.ru
Добавить комментарий