Як автоматизувати розгортання контейнера Docker через Maven

Ця стаття призначена для людей, які використовують Maven як інструмент побудови та управління залежностями для програм JAVA. Він покаже вам, як інтегрувати робочі процеси побудови контейнерів докерів, додавання тегів та надсилання їх до існуючої екосистеми управління збірками Maven.

Наявність можливості створювати, мітити та надсилати програму як контейнер відразу від команд життєвого циклу Maven - це досить класна річ. Це просто робить справи простими та швидкими, якщо ви намагаєтесь залучити потужність контейнерів для розгортання своїх програм і готові за допомогою Maven для управління залежностями.

Якщо ми подивимось на існуючі рішення для інтеграції розгортання контейнерів докерів у Maven, то є кілька таких, як плагін spotify maven docker, плагін Docker Maven fabric8io тощо. Але всі ці рішення вносять небажану складність, додаткову криву навчання та занадто багато перейдіть на існуючий код програми. Проте існує простіший і простіший спосіб досягти цього без використання сторонніх плагінів.

Якщо ви звернули увагу на плагін Maven's Ant, він дозволяє нам запускати зовнішні команди. Отже, використовуючи плагін Ant, ми маємо можливість запускати збірку докера, додавання тегів, натискання або просто будь-яку команду за вашим бажанням. Єдине, що нам потрібно зробити, це надати належний файл Docker для побудови образу Docker для вашої програми та необхідний набір команд та конфігурацій Maven у файл pom.xml.

Для пояснення кроків, задіяних у цьому процесі, я буду використовувати зразок програми JAVA. Він містить усі зразки коду, використані в наступних кроках. Ви можете клонувати його звідси.

Крок 1 | Створіть файл Docker

Файл Docker повинен зберігатися у шляху src / main / docker / Dockerfileпрограми JAVA.
# Pull base imageFROM tomcat:8.0.30-jre7# MaintainerMAINTAINER "[email protected]"
# Set Environment propertiesENV JAVA_OPTS=-Denvironment=production# Copy war file to tomcat webapps folderCOPY /dockermavensample.war /usr/local/tomcat/webapps/

Крок 2 | Оновіть pom.xml, щоб скопіювати всі ресурси, пов’язані з Docker, у цільовий каталог

Ми можемо використовувати maven-resource-plugin для копіювання ресурсів.
 maven-resources-plugin   copy-resources validate  copy-resources   ${basedir}/target;   src/main/docker true     

Крок 3 | Оновіть pom.xml, щоб дозволити збирати та позначати зображення Docker за допомогою плагіна Maven's Ant

 org.apache.maven.plugins  1.6 prepare-package package false       ;     run   

Плагін Maven's Ant виконає команду docker у фазі пакету життєвого циклу Maven у наступному порядку, що створить образ докера з файлу Docker, який було скопійовано в цільову папку на кроці 2.

docker build -t dockermavensample:1.0.0 target

Крок 4 | Оновіть файл pom.xml, щоб дозволити надсилання зображення Docker до віддаленого сховища Docker

Ідеально для виробництва, вам доведеться вставляти ваші зображення Docker у власний приватний реєстр Docker або використовувати стороннє сховище зображень Docker, яке дозволяє зберігати приватні зображення Docker, щоб інші не могли безпосередньо витягувати ваші зображення Docker.
 org.apache.maven.plugins; maven-antrun-plugin 1.6 ;  install false              run   

На додаток до наведених вище кроків, ви можете мати контроль над тим, як ви виконуєте ці команди, пов’язані з докером, у життєвому циклі Maven. Для цього ви можете використовувати профілі Maven для логічного розділення вище визначень плагінів. Потім виконуйте їх лише тоді, коли викликається профіль, пов’язаний з цією дією.

Погляньте на наступні зразки профілів:

 dockerBuild    maven-resources-plugin   copy-resources validate;  copy-resources   ${basedir}/target   src/main/dockertrue  ;     org.apache.maven.plugins maven-antrun-plugin 1.6   prepare-package package false            run      
  true; 
dockerRelease    org.apache.maven.plugins maven-antrun-plugin 1.6   install false              run      

Після виконання вищевказаних кроків просто запустіть

mvn clean install -P dockerBuild,dockerRelease

Тепер ваша програма JAVA упакована як контейнер і також перенесена у віддалене сховище докерів. Ви можете перевірити, чи працює створене вами зображення, виконавши наступні команди,

Як бачите, ми можемо використовувати вже доступні функції та плагіни Maven для створення добре структурованого конвеєра збірки для розгортання наших додатків як контейнерів.

Зразок проекту:

rav94 / dockermavensample

Демо-проект для демонстрації автоматизації розгортання контейнерів через Maven - rav94 / dockermavensample github.com

Дякуємо за читання!