При прохождении данного модуля вы создадите образ контейнера для монолитного приложения node.js и передадите его в Amazon Elastic Container Registry. Приступить

развертывание в amazon ecr

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

обзор архитектуры

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

Управление зависимостями и улучшенный конвейер
Образ контейнера Docker – это снимок кода и зависимостей приложения по состоянию на определенный момент времени. С его помощью организация-разработчик может создать стандартный конвейер для жизненного цикла приложения. Пример

  1. Разработчики создают и запускают контейнер локально.
  2. Сервер непрерывной интеграции запускает тот же контейнер и выполняет для него интеграционные тесты, проверяя, соответствует ли он ожиданиям.
  3. Этот же контейнер передается в среду промежуточного хранения, где можно проверить поведение его среды выполнения с помощью тестов нагрузки или ручного контроля качества.
  4. Этот же контейнер поставляют для производства.

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

Плотность и эффективность ресурсов
Контейнеры упрощают повышение эффективности ресурсов, позволяя выполнять множественные разнородные процессы в единой системе. Эффективность ресурсов – естественный результат изоляции и технологий распределения, которые используются в контейнерах. На использование контейнерами ЦП и памяти хоста могут накладываться ограничения. Понимая, какие ресурсы нужны контейнеру и какие ресурсы доступны из базового сервера хоста, вы можете правильно рассчитать объем ресурсов, которые будете использовать с меньшими хостами, или увеличить плотность процессов, выполняемых на одном большом хосте, повышая тем самым доступность и оптимизируя потребление ресурсов.

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

Время выполнения: 20 минут

Используемые сервисы:


При работе с первой частью данного учебного пособия вы создадите образ контейнера Docker для монолитного приложения node.js и передадите его в Amazon Elastic Container Registry. Щелкните номер шага, чтобы развернуть соответствующий раздел.

break-the-monolith
  • Шаг 1. Настройка

    При выполнении следующих нескольких шагов вы будете использовать Docker, GitHub, Amazon ECS и Amazon ECR для развертывания кода в контейнерах. Для выполнения этих шагов вам понадобятся соответствующие средства.

    1. Создайте аккаунт AWS. Если у вас еще нет аккаунта AWS, вы можете зарегистрироваться здесь. Все упражнения, описанные в этом руководстве, подходят для уровня бесплатного пользования AWS.
      ⚐ ПРИМЕЧАНИЕ. Для некоторых сервисов, которыми вы будете пользоваться, может понадобиться, чтобы ваш аккаунт был активен больше 12 часов. Если у вас возникнут сложности с каким-либо сервисом, а аккаунт вы создали недавно, подождите пару часов и повторите попытку.
    2. Установите Docker. Вы будете использовать Docker для создания файлов образов, выполняемых в ваших контейнерах. Docker – это проект с открытым исходным кодом. Вы можете загрузить его здесь для Mac или для Windows.
      После установки Docker можно проверить его работу, выполнив команду Docker --version на терминале. При этом должен отобразиться приблизительно такой текст: Docker version 17.03.0-ce, build 60ccb22.
    3. Установите интерфейс командной строки AWS.
      • Передача образов в Amazon Elastic Container Registry будет осуществляться с помощью интерфейса командной строки (CLI) AWS. Дополнительные сведения о CLI см. здесь.
      • После установки AWS CLI можно проверить его работу, выполнив команду aws --version на терминале. При этом должен отобразиться приблизительно такой текст: aws-cli/1.11.63 Python/2.7.10 Darwin/16.5.0 botocore/1.5.26.
      • Если вы уже установили AWS CLI, выполните следующую команду на терминале для обновления до последней версии: pip install awscli --upgrade --user.
    4. Установите текстовый редактор. Если у вас еще нет текстового редактора для написания кода, установите его в локальной среде. Atom – простой текстовый редактор с открытым исходным кодом от GitHub, весьма популярный среди разработчиков.
  • Шаг 2. Загрузка и открытие проекта

    Загрузите код с GitHub: перейдите по адресу https://github.com/awslabs/amazon-ecs-nodejs-microservices и выберите «Clone or Download» (Клонировать или загрузить), чтобы загрузить репозиторий GitHub в свою локальную среду. Для клонирования репозитория можно использовать также GitHub Desktop (Рабочий стол GitHub) или Git.

    Откройте файлы проекта: запустите Atom, выберите «Add Project Folder» (Добавить папку проекта) и выберите папку, в которую вы сохранили репозиторий amazon-ecs-nodejs-microservices. При этом весь проект добавится в Atom, и с ним будет легко работать.

    Папка проекта содержит папки инфраструктуры и сервисов. В инфраструктуре содержится код конфигурации инфраструктуры AWS CloudFormation, который понадобится для следующего шага. Сервисы папки содержат код, образующий приложение node.js.

    Уделите несколько минут, чтобы просмотреть файлы и ознакомиться с разными аспектами приложения, в том числе db.json базы данных, server.js сервера, package.json и Dockerfile приложения.

    проект микросервисов
  • Шаг 3. Подготовка репозитория к работе

    Создайте репозиторий

    • Перейдите в Amazon Elastic Container Registry (Amazon ECR).
    • Выберите «Create Repository» (Создать репозиторий).
    • Присвойте имя репозиторию. Не будем усложнять данный этап и назовем репозиторий просто «api».


    Запишите сведения о репозитории

    • После нажатия «Next» (Далее) отобразится примерно такое сообщение:
    create
    • Формат адреса репозитория прост: [идентификатор_аккаунта].dkr.ecr.[регион].amazonaws.com/[имя_репозитория].

     

    ⚐ ПРИМЕЧАНИЕ. Этот адрес вместе с идентификатором вашего аккаунта и регионом понадобится для выполнения последующих шагов.

  • Шаг 4. Создание и передача образа Docker

    Откройте терминал и задайте путь для раздела 2-containerized/services/api кода GitHub в том каталоге, куда вы его клонировали или загрузили: ~/amazon-ecs-nodejs-microservices/2-containerized/services/api.

    Выполните аутентификацию при входе в Docker с помощью AWS

    1. Выполните aws ecr get-login --no-include-email --region [регион]. Пример: aws ecr get-login --no-include-email --region us-west-2. Если вы еще ни разу не использовали AWS CLI, ваши учетные данные, возможно, придется уточнить.
    2. Вы получите большой объем выходных данных, начинающихся с docker login -u AWS -p ... Скопируйте все эти данные в буфер, а затем вставьте и выполните в терминале.
    3. Должно отобразиться сообщение «Login Succeeded» (Вход выполнен).

    ⚐ ПРИМЕЧАНИЕ. Если же вход не будет выполнен, причина может заключаться в том, что ваша версия Docker новее, и поэтому не сработал флаг «-e none». Это вполне поправимо. Вставьте выходные данные в текстовый редактор, удалите «-e none» в конце и запустите обновленные выходные данные на терминале.

    • Создайте образ: выполните на терминале docker build -t api. ПРИМЕЧАНИЕ.Не пропустите знак «.», он здесь необходим.
    • Присвойте тег образу. После создания присвойте образу тег для передачи в репозиторий: docker tag api:latest [идентификатор_аккаунта].dkr.ecr.[регион].amazonaws.com/api:v1.

    ⚐ Подсказка. :v1 означает версию сборки образа. Во время каждой последующей сборки образа нужно увеличивать номер версии на единицу. Если вы использовали скрипт, то в качестве тега образа можно было применить автоматически присвоенный номер, например метку времени. Это оптимальный способ вернуть предыдущую сборку образа контейнера.

    • Передайте образ в ECR. Выполните команду docker push, чтобы передать образ в ECR: docker push [идентификатор_аккаунта].dkr.ecr.[регион].amazonaws.com/api:latest.

    Образ, которому был присвоен тег, должен отображаться в репозитории ECR последним.

    образы