Amazon представляет сервис, который называется Elastic Container
Service [7], который позволяет запускать наши Docker [8] контейнеры в Fargate
кластере, абстрагировавшись от поддержки и обслуживания сетевой настройки,
настройки автоскейлинга и поддержки контейнерной платформы, что сильно
удешевляет процесс настройки и поставки программного обеспечения. Из
коробки ECS предоставляет достаточно много инструментов для гибкой
настройки деплоймента. Вначале необходимо создать Docker образ, в который
мы помещаем бинарные артефакты после сборки с помощью Maven [9] —
фреймворка для автоматизации сборки проектов на основе описания их
структуры в файлах на языке POM, являющемся подмножеством XML, из кода,
который написан разработчиками на языках Java и Kotlin:
Листинг сборки Docker образа
FROM alpine:3.10
ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en'
LC_ALL='en_US.UTF-8'
ENV JAVA_VERSION jdk-12.0.1+12
ENV JAVA_HOME=/opt/java/openjdk \
PATH="/opt/java/openjdk/bin:$PATH"
ADD target/service-distribution/lib /usr/share/jvmservice/lib
ADD target/service-distribution/analytics-api-0.31.0.jar
/usr/share/jvmservice/service.jar
CMD java $JAVA_OPTS -jar /usr/share/jvmservice/service.jar
В примере выше мы берём Docker образ OS Alpine (я не привожу полный
листинг), устанавливаем Java 12.0.1 и затем добавляем внутрь образа артефакт,
который был создан на предыдущем шаге, в данном случае это «ADD
target/service-distribution/analytics-api-0.31.0.jar». Затем мы билдим наш образ при
помощи команды docker build, добавляем теги номера версии и хеша последнего
коммита в гите, чтобы отличать контейнеры друг от друга, и затем отправляем
образ в наше хранилище контейнеров Amazon Container Registry [10].