Как запустить приложение Angular в качестве контейнера на виртуальной машине Azure

Пошаговое руководство с примером проекта

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

В этом посте мы увидим, как установить Docker на виртуальную машину Azure и запустить на ней приложение Angular в качестве контейнера.

  • Предварительные требования
  • Пример проекта
  • Настройте виртуальную машину и установите Docker
  • Запустить контейнер
  • Доступ из браузера
  • Резюме
  • Заключение

Предпосылки

Есть некоторые предварительные условия для этой статьи. У вас должен быть установлен nodejs на вашем ноутбуке и как работает http. Если вы хотите попрактиковаться и запустить это на своем ноутбуке, вам необходимо иметь их на своем ноутбуке.

Предварительные требования для Azure

У вас должна быть учетная запись Microsoft Azure. Вы можете получить бесплатную учетную запись на один год. После входа в систему вы должны увидеть экран ниже.

Вам необходимо создать подписку для своей учетной записи. Самая распространенная — подписка Pay As You Go.

 

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

Установите Azure CLI и настройте

Получив учетную запись Azure, вы можете установить Azure CLI. Вы можете перейти к приведенной ниже документации и установить Azure CLI в зависимости от вашей операционной системы. Вы можете настроить Azure CLI с помощью своей подписки.

Перечислим подписку с помощью следующей команды

az account list --output table

Пример проекта

Давайте посмотрим, что мы запускаем здесь в качестве примера проекта. Это простой проект, демонстрирующий разработку и запуск приложения Angular с помощью NodeJS. У нас есть простое приложение, в котором мы можем добавлять пользователей, подсчитывать и отображать их сбоку, а также извлекать их, когда захотите.

// clone the project
git clone https://github.com/bbachi/angular-nodejs-minikube.git
// Run NodeJS server on port 3080
npm install
npm start
// Run Angular code on port 4200
cd my-app
npm install
npm start

Запустить в Docker

Мы используем многоступенчатые сборки для создания эффективных образов докеров. Создание эффективных образов Docker очень важно для более быстрой загрузки и уменьшения поверхностных атак. В этой многоэтапной сборке создание проекта Angular и размещение этих статических ресурсов в папке dist является первым шагом. Второй шаг включает в себя использование этих статических файлов сборки и их обслуживание на сервере узлов.

См. также:  npm weekly # 115: объявляя о 2FA и токенах только для чтения, мы перенесли щенков на Node.js

Давайте создадим образ с помощью Dockerfile. Вот что нам нужно для создания имиджа.

Этап 1

  • Начать с базового образа node:10
  • Есть два файла package.json: один для сервера nodejs, а другой для пользовательского интерфейса Angular. Нам нужно скопировать их в файловую систему Docker и установить все зависимости.
  • Нам нужен этот шаг в первую очередь, чтобы быстрее создавать изображения на случай, если позже в исходный код будет внесено изменение. Мы не хотим повторять установку зависимостей каждый раз при изменении каких-либо исходных файлов.
  • Скопируйте все исходные файлы.
  • Angular использует Angular / CLI для создания приложения. Итак, устанавливаем CLI и устанавливаем все зависимости.
  • Запустите npm run build, чтобы создать приложение Angular, и все ресурсы будут созданы в dist папке в папке my-app.

2 этап

  • Начать с базового образа node:10
  • Возьмите сборку из этапа 1 и скопируйте все файлы в папку. / my-app / dist.
  • Скопируйте nodejs package.json
  • Установите все зависимости
  • Наконец, скопируйте server.js
  • Используйте эту команду node server.js с CMD. Это автоматически запускается, когда мы запускаем изображение.

Вот полный Dockerfile

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

// build the image
docker build -t angular-node-image .
// check the images
docker images

После создания образа Docker. Вы можете запустить образ с помощью следующей команды.

// run the image
docker run -d -p  3080:3080 --name ang-node-ui angular-node-image
// check the container
docker ps

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

Публикация образа Docker

Давайте опубликуем образ Docker в Docker Hub с помощью этой команды docker push <repo name>. Перед этим вам необходимо создать учетную запись Docker Hub, если у вас ее нет. Вот ссылка на это.

См. также:  PHP 7.x - P41: стрелочные функции

Давайте создадим репозиторий, в моем случае это bbachin1. Нам нужно войти в систему, пометить изображение и, наконец, отправить его.

// login
docker login
// tag the image
docker tag angular-node-image bbachin1/angular-node-webapp
// push the image
docker push bbachin1/angular-node-webapp

Настройте виртуальную машину и установите Docker

Существует несколько способов настроить виртуальную машину в Azure. Мы увидим, как настроить виртуальную машину с помощью Azure CLI. Убедитесь, что вы установили правильную подписку, которую хотите использовать, с помощью следующей команды.

az account set --subscription <subscription id>

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

az group create --name vm-demo --location eastus

Вы можете проверить на портале, создана ли группа ресурсов или нет.

Давайте создадим виртуальную машину с помощью следующей команды. Я выбрал изображение ubuntuLTS.

az vm create \
  --resource-group vm-demo \
  --name dockerVM \
  --image UbuntuLTS \
  --admin-username azureuser \
  --generate-ssh-keys

Обратите внимание на свой собственный publicIpAddress в выводе вашей виртуальной машины. Этот адрес используется для доступа к виртуальной машине на следующих шагах. В этом случае общедоступный IP-адрес 40.87.64.208.. Вы можете проверить виртуальную машину, созданную на портале.

По умолчанию при создании виртуальной машины Linux в Azure открываются только SSH-подключения. Используйте az vm open-port, чтобы открыть TCP-порт 80 для веб-трафика.

az vm open-port --port 80 --resource-group vm-demo --name dockerVM

Давайте подключим ssh к виртуальной машине и установим на нее Docker с помощью следующих команд.

// ssh
ssh [email protected]
// install docker
sudo apt-get -y update
// remove any old versions of Docker
sudo apt-get remove docker docker-engine docker.io
// Install Docker
sudo apt install docker.io
// Start the Docker
sudo systemctl start docker
// Enable Docker so that Docker runs on startup
sudo systemctl enable docker
// check the version
docker --version

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

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

// set the permission
sudo chmod 666 /var/run/docker.sock
// pull the image
docker pull bbachin1/angular-node-webapp

См. также:  onMouseLeave / onMouseOut иногда срабатывает при обновлении страницы React

Выполните следующую команду, чтобы запустить контейнер.

docker run -d -p  80:3080 --name ang-node-ui bbachin1/angular-node-webapp

Доступ из браузера

Нам известен общедоступный IP-адрес созданной нами виртуальной машины: 40.87.64.208, а контейнер работает на порту 3080 и сопоставлен с внешним портом 80. Вы можете получить доступ приложение из следующего места.

https://40.87.64.208:80

Резюме

  • В настоящее время вы можете запускать свои приложения несколькими способами. Очень часто ваше приложение помещают в контейнер и запускают во время выполнения Docker.
  • Если вам нужен полный контроль над базовой архитектурой, вы можете установить Docker на виртуальной машине Azure и запустить на ней свое приложение.
  • Перед созданием виртуальной машины необходимо создать группу ресурсов.
  • Вы можете создать виртуальную машину с любым из образов, например Windows, Centos, Ubuntu и т. Д.
  • Вы можете указать образ Docker либо из реестра контейнеров, либо из Docker Hub.
  • По умолчанию весь внешний трафик запрещен.
  • Вы должны открыть порт, чтобы вы могли получить доступ к приложению из браузера.
  • Вам необходимо установить разрешение на docker.sock, чтобы вы могли вытащить изображение, не получая ошибку отказа в разрешении.
  • Вы можете получить доступ к приложению с помощью внешнего IP-адреса, предоставленного экземплярами виртуальных машин, и порта, который приложение прослушивает.

Заключение

Это один из способов развертывания вашего контейнерного приложения Angular в Azure. Но у этого метода есть некоторые ограничения, например, вам нужно запускать один контейнер Docker для каждого экземпляра, который нельзя масштабировать в зависимости от спроса. Вы должны использовать масштабируемые наборы виртуальных машин, которые позволяют работать с приложениями на нескольких идентичных виртуальных машинах. Вы можете сделать свои рабочие нагрузки масштабируемыми и высокодоступными с помощью LoadBalancer перед виртуальными машинами. В будущих публикациях мы увидим, как можно развернуть приложения Angular в службе приложений, Azure AKS, экземплярах контейнеров Azure и т. Д.

Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: