Статьи

Docker: все для разработчиков Java EE — в Windows с Maven

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

Установка Boot2Docker
Docker Engine использует специфичные для Linux функции ядра, поэтому для его запуска в Windows нам нужно использовать облегченную виртуальную машину. Есть вспомогательное приложение под названием  Boot2Docker что делает установку и запуск всего довольно простым. Первый шаг — загрузить последнюю версию  бинарного установщика  и выполнить ее. Он установит Oracle  VirtualBoxMSYS-git , ISO-образ boot2docker и инструмент управления Boot2Docker. Следующим шагом будет запуск сценария запуска Boot2Docker (после установки на рабочем столе появится небольшой значок кита). Он настроит хост Docker и подключится через ssh к хосту. Если вы хотите сделать это снова в более позднем состоянии, вы можете просто набрать: boot2docker ssh.

На данный момент нет Docker-клиента для систем на базе Windows. Итак, ssh — это обходной путь, который работает довольно хорошо и, вероятно, также хорошо известен. С недавно объявленным Microsoft новым партнерством с Docker, это может скоро измениться. Если вы хотите создать свой собственный клиент Docker, вы можете найти дополнительную информацию в  блоге Khalid Mouss  об этом.
Несколько советов для вас. Вам необходимо иметь каталог% MSYS-git_INSTALL% / bin в вашей переменной PATH. Он содержит cmd строку ssh клиента. Если вы хотите использовать PUTTY, обязательно подключитесь к Docker-хосту, используя пользователя «root» и пароль «tcuser».
Если вы используете какой-либо VPN-клиент, у вас возникнут проблемы. Docker обычно работает в режиме Host-only, а установленный VPN-клиент превращает это в NAT. Перейдите в консоль управления VirtualBox и откройте настройки для boot2docker-vm и добавьте правило перенаправления портов для Docker API. Это понадобится нам позже.

Небольшое предупреждение: порт Docker API по умолчанию — 2375. В моем случае это не так, поэтому мне сначала нужно было выяснить, какой порт прослушивает API Docker. Сделайте это с помощью netstat на вашем хосте. Итак, я в основном использовал прямой гость для размещения отображения на 2376 в этом примере. Все сделано. Теперь вы готовы запустить пример Привет, мир. Просто наберите «docker run hello-world» и дождитесь «Привет из Docker». Теперь ты в порядке.
Если вам нужен полный справочник по  Boot2Docker, это очень полезный сайт .

Почему именно мы делаем докер?
Что за шумиха вокруг Докера в эти дни? В ней есть небольшая история, и в долгосрочной перспективе она также может поддерживать развертывание микросервисов, просто определяя готовые пакеты, которые можно развернуть. В том числе требования к инфраструктуре. Думайте о контейнерах Docker как о серверах приложений, которые могут запускать определенные образы. И представьте себе изображения как большие архивы Maven, которые содержат не только ваше приложение, но также ОС и все части, необходимые для запуска вашего приложения. Нравится вам это или нет, но все играют с этим, и в конце концов, это способ решить некоторые проблемы. Я не говорю вам, что я влюбился в него мгновенно, но, по крайней мере, я хочу, чтобы это помогло мне в демонстрациях и демонстрациях. И мысль,что мне нужно только определить кучу зависимостей и плагинов Maven в моих приложениях Java EE, и все, что волшебным образом запускается — это то, что мне нравится. Но давайте посмотрим, что для этого нужно и как это сделать.

Уже доступные изображения — например, WildFly
Кстати об изображениях: готово множество изображений, готовых к работе. У нас в JBoss есть специальный  микросайт, готовый для вас со всеми образами Docker,  которые мы готовы для вас запустить. Если вы хотите использовать какой-либо из них, просто установите их в свой контейнер и запустите. Делая это, вы можете просто запустить любой компонент, в основном, как если бы он был запущен локально на вашем компьютере. Разница лишь в том, что он работает в вашем «Docker Host». Если вы хотите запустить WildFly, все, что вам нужно сделать, это выполнить следующую команду Docker: 

docker run -it -p 9990:99 jboss/wildfly

Docker автоматически извлекает соответствующие биты (что может занять некоторое время) и запускает контейнер из этого изображения.
Сопоставление портов фактически находится между хостом и контейнером. Помните проблемы VPN сверху? Не забудьте добавить отображение портов в VirtualBox также, если вы хотите попробовать это. Результат довольно ясен: теперь у вас есть WildFly, работающий в контейнере. Сопоставьте нужные порты и просто используйте их так, как обычно используете удаленный экземпляр Если вы хотите еще больше изображений, вы можете просматривать и искать 
Docker Hub . Там уже много всего.

Подобное использование Docker — не совсем та идея, которая стоит за ним.
На самом деле, изображение должно содержать не только базовый компонент, но и полностью сконфигурированное приложение. 
Создавая свои собственные образы — все по-разному

Поэтому вам нужно создавать свои собственные изображения. Есть разные способы сделать это. Вы можете обновить контейнер, созданный из изображения, и зафиксировать результаты в изображении. Или создайте свой собственный 
Dockerfile,  чтобы указать инструкции для создания изображения, или вы можете использовать инструмент сборки, такой как Maven, для создания вашего изображения. Подход Dockerfile является очень мощным и требует довольно много печатания и vi-magic. Я искал простой способ создать образ из Maven. Потому что это то, что я использую для проектов.

Создание образа Docker с помощью Maven

Существует множество различных плагинов Maven, которые действительно предлагают такую ​​функцию, которую я искал. В конце концов, команда Fabric8 использовала 
Maven-Docker-Plugin  от 
Roland Huß., Плагин может создавать и публиковать изображения, а также запускать и останавливать контейнеры для интеграционного тестирования и разработки. Я немного боролся с его настройкой, и я все еще пытаюсь найти лучшие способы его интеграции в мои приложения, так что это, в основном, первый первый список моих выводов и решений, а не полное руководство пользователя. Пожалуйста, ознакомьтесь с 
примерами  и 
официальным руководством пользователя  плагина для получения более подробной информации. Я приведу полный пример в одном из моих следующих постов в блоге и покажу вам его.

DOCKER_HOST Переменная окружения

Первым делом для этого плагина, очевидно, является переменная окружения DOCKER_HOST. Поскольку весь опыт работы с Windows пока немного неуклюжий, эта переменная не устанавливается при запуске vm. Хорошей новостью является то, что вы уже поняли все, что вам нужно знать, установив и выполнив сопоставление портов. Итак, вы просто установили его:

set DOCKER_HOST=tcp://127.0.0.1:2376

Убедитесь, что ваш общий раздел <configuration> в maven-docker-plugin совпадает с тем же

<dockerHost>https://127.0.0.1:2376</dockerHost>

Сертификаты и соединения HTTPS
Начиная с версии 1.3.0 для удаленного API Docker требуется связь через SSL и аутентификация с сертификатами при использовании с boot2docker. Итак, вам необходимо настроить сертификаты. Найдите их в папке .boot2docker / certs и обязательно добавьте этот путь в конфигурацию вашего плагина.

<certPath>C:/Users/myfear/.boot2docker/certs/boot2docker-vm</certPath>

Это все на данный момент. Дайте мне знать, если у вас есть опыт работы с Docker в Windows.