Docker Compose для контейнеризации приложения MEAN Stack



Docker Compose - это инструмент для определения и запуска нескольких контейнеров для запуска сложных приложений в Docker, например контейнеризации приложения MEAN.

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

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





Введение в Docker Compose

Для меня было легко создать контейнер для одного сервисного приложения. Но когда мне пришлось поместить несколько сервисов в отдельные контейнеры, я столкнулся с препятствием. Моим требованием было разместить в контейнере и разместить приложение стека MEAN.

Ага, вы правильно прочитали. Приложение полного стека. Сначала я думал, что это невозможно. Но после того, как я услышал о Docker Compose, я понял, что все мои проблемы будут решены.



Docker Compose можно использовать для создания отдельных контейнеров (и их размещения) для каждого из стеков в приложении стека MEAN. MEAN - это аббревиатура от MongoDB Express Angular и NodeJs. Демо, которое я покажу в этом блоге, также посвящено той же теме.

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

Связь и время работы этих контейнеров будет поддерживаться Docker Compose.



Вы можете спросить, как настроить всю эту инфраструктуру? Что ж, позвольте мне дать вам более подробное объяснение.

Dockerfile

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

В нашем случае у нас есть приложение с полным стеком, которое состоит из MongoDB, ExpressJS, Angular и NodeJS. MongoDB заботится о серверной базе данных, NodeJS и ExpressJS предназначены для рендеринга на стороне сервера, а Angular - для внешнего интерфейса.

Приложение MEAN Stack - Docker Compose - Edureka

как установить путь Java в окнах

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

  1. Контейнер 1 - Угловой
  2. Контейнер 2 - NodeJS и ExpressJS
  3. Контейнер 3 - MongoDB

Создание контейнеров Docker

В качестве первого шага к dockerize среднего приложения давайте напишем dockerfile для сборки каждого из компонентов, начиная с контейнера Angular. Этот файл докеров должен находиться в каталоге проекта вместе с файлом package.json. «Package.json» содержит подробную информацию о том, какая версия зависимостей должна использоваться «NPM» для построения приложения angular.

1. Dockerfile для внешнего интерфейса

С узла: 6 ЗАПУСТИТЬ mkdir -p / usr / src / app WORKDIR / usr / src / app КОПИРОВАТЬ package.json / usr / src / app ЗАПУСТИТЬ npm cache clean ЗАПУСТИТЬ npm установить КОПИРОВАТЬ. / usr / src / app EXPOSE 4200 CMD ['npm', 'start']

Как всегда, наша первая команда - получить базовое изображение, а мы извлекаем базовое изображение «узел: 6».

Следующие две команды предназначены для создания нового каталога «/ usr / src / app» внутри контейнера Docker для хранения кодов Angular и превращения его в рабочий каталог внутри контейнера.

Затем мы копируем файл package.json из каталога нашего проекта во внутрь контейнера.

Затем мы запускаем команду «npm cache clean», которая очищает кеш npm.

После этого мы запускаем команду «npm install», которая запускает загрузку шаблонов, необходимых для размещения приложения Angular. Он начинает загрузку шаблонов на основе версий зависимостей, указанных в «package.json».

Следующий запуск команды «RUN» - это копирование всех кодов и папок из каталога проекта во внутрь контейнера.

Приведенная выше команда просит контейнер предоставить номер порта 4200 для связи с внутренним сервером для отправки запросов, сделанных пользователями, обращающимися к клиентскому интерфейсу через веб-интерфейс.

Наконец, последняя команда - это команда «RUN» для запуска «npm». Начнется выполнение кода для создания нашего приложения Angular.

Теперь приложение Angular готово, но оно не будет размещено должным образом из-за его зависимости от внутреннего сервера и базы данных. Итак, давайте пойдем дальше и напишем файл докеров для контейнеризации внутреннего сервера.

2. Dockerfile для серверной части

Даже этот файл докеров будет присутствовать в каталоге проекта. Этот каталог также будет содержать файл package.json для определения зависимостей сервера Express и других требований NodeJS. Но самое главное, он содержит код проекта для поддержки внутреннего сервера.

С узла: 6 ЗАПУСТИТЬ mkdir -p / usr / src / app WORKDIR / usr / src / app КОПИРОВАТЬ package.json / usr / src / app ЗАПУСТИТЬ npm cache clean ЗАПУСТИТЬ npm установить КОПИРОВАТЬ. / usr / src / app EXPOSE 3000 CMD ['npm', 'start']

Как видите, между двумя dockerfile есть много общего. Мы используем тот же «узел: 6» в качестве слоя базового изображения, создаем новый каталог внутри контейнера, делаем его рабочим каталогом и, среди прочего, запускаем команду «npm install». Но единственное отличие - это номер порта, доступный для связи. В этом случае определяется номер порта 3000. Здесь будет размещен сервер и будет искать запросы от клиента.

3. База данных

Вам может быть интересно, почему я не упомянул «dockerfile For Database» в заголовке. Причина в том, что на самом деле нам не нужно настраивать make. Мы можем сразу получить базовый образ MongoDB для хранения наших данных и просто указать номер порта, по которому к нему можно получить доступ.

Теперь у вас будет вопрос, где бы я это сделал? Что ж, мы можем сделать это в файле Docker Compose.

Файл Docker Compose

Файл Docker Compose - это файл YAML, который содержит сведения о службах, сетях и томах для настройки приложения Docker.

Выполните приведенную ниже команду, чтобы найти версию вашего Docker Engine.

docker -v

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

Поскольку я использую Docker Engine версии 17.05.0-ce, я использовал Docker Compose версии 3.

Установить Docker Compose

Чтобы загрузить Compose, выполните следующий набор команд.

sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o / usr / local / bin / docker- составить sudo chmod + x / usr / local / bin / docker-compose

Обратите внимание, что номер версии в команде будет меняться в зависимости от версии Docker Engine, которую вы используете.

Ниже приведены команды, которые являются частью моего файла Docker Compose.

version: '3.0' # укажите версию docker-compose # Определите службы / контейнеры для запуска services: angular: # имя первой сборки службы: angular-app # укажите каталог портов Dockerfile: - '4200: 4200' # указать сопоставление портов express: # имя второй сборки службы: express-server # указать каталог портов Dockerfile: - '3000: 3000' # указать ссылки сопоставления портов: - database # связать эту службу с базой данных службы базы данных: # имя третьего образа службы: mongo # указать образ для сборки контейнера из портов: - '27017: 27017' # указать перенаправление портов

Я почти уверен, что команды в приведенном выше файле не имеют для вас никакого смысла. Итак, давайте решим эту проблему.

В первой строке кода я определил версию Docker Compose, которую использую. Это очень важный шаг, если вы хотите, чтобы Compose работал правильно, не вызывая ошибок. Убедитесь, что вы скачали версию Docker Compose, соответствующую версии вашего Docker Engine.

После этого я определил три контейнера, используя ключевое слово «услуги». Эти службы относятся к трем компонентам моего стека: интерфейс, серверная часть и база данных. Итак, в этом случае имя моих контейнеров будет именем моих служб, то есть angular, express и database.

Ключевое слово «build» используется для обозначения того, что файл докеров для вращения этого контейнера присутствует в этом каталоге. Подожди, ты как запутался?

Это просто. Путь необходимо указать после 'build:'. В нашем случае angular-app и express-server - это пути к двум каталогам, в которые можно попасть из каталога, в котором находится файл Docker Compose. Для нашего контейнера базы данных я просто сказал использовать базовый «image: mongo» вместо пути к dockerfile.

Массив сортировки c ++ в порядке возрастания

Для каждой из этих служб я также указал номера портов, которые можно использовать для приема / отправки запросов от других контейнеров (служб). 4200 - угловой, 3000 - экспресс и 27017 - монго.

Кроме того, экспресс-контейнер имеет «ссылку:» на контейнер базы данных, указывающую, что любые данные, полученные на стороне сервера, будут отправлены в базу данных, где они будут храниться.

Наконец, мы подошли к завершению настройки Compose. Чтобы запустить Docker Compose и развернуть три контейнера с тремя сервисами, нам нужно просто выполнить две следующие команды из каталога, в котором находится файл Docker Compose (файл YAML):

docker-compose build docker-compose up

Команда «docker-compose build» используется для сборки / перекомпоновки сервисов, тогда как команда «docker-compose up» используется для создания / запуска контейнеров. Преуспевать! Попробуйте сами.

Ниже приведены снимки экрана с образами Docker, которые создаются и затем выполняются. Вы можете заметить, что изображение Angular создается и затем помечается именем как angular: latest.

Кроме того, изображение для Express создается с именем и тегом «express: latest».

Теперь, когда образ построен, давайте попробуем запустить его и, таким образом, вращать контейнер в процессе. Ниже этот скриншот.

Ниже приведен снимок экрана, на котором написано «webpack: успешно скомпилирован», что означает, что Docker успешно контейнеризует три службы.

Теперь, когда контейнеры размещены, вы можете увидеть, какие службы активны на соответствующих портах. Введите следующие номера портов в своем веб-браузере, чтобы взаимодействовать с графическим интерфейсом приложения MEAN.

локальный: 4200 - Угловое приложение (Front-end)
локальный: 3000 - Экспресс-сервер и NodeJS (бэкэнд / серверная часть)
localhost: 27017 - MongoDB (База данных)

Еще не впечатлены? Подождите, потому что Docker еще не готов! Мы можем использовать команду «docker-compose scale =’ x '», чтобы легко увеличивать / уменьшать количество развертываний. Другими словами, мы можем создать такое количество контейнеров для службы. Ниже приведена полная команда для масштабирования конкретной службы до «5» контейнеров:

масштаб docker-compose = 5

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

Если у вас все еще есть сомнения по поводу этой концепции, вы можете посмотреть видео ниже, где я объяснил ту же концепцию с практическими примерами того, как настроить Docker Compose.

Docker Compose | Контейнерная обработка стека MEAN | Учебник DevOps

Теперь, когда вы узнали о Docker, ознакомьтесь с от Edureka, надежной компании по онлайн-обучению с сетью из более чем 250 000 довольных учащихся по всему миру. Этот учебный курс Edureka Docker Certification Training помогает учащимся получить опыт внедрения Docker и освоить его.

Есть вопрос к нам? Пожалуйста, отметьте это в разделе комментариев, и мы свяжемся с вами.