Введение
В предыдущей статье мы увидели, что такое Docker, как контейнеры полезны в качестве новой тенденции DevOps, и мы узнали разницу между контейнерами и изображениями, а также узнали о DockerFile.
Теперь мы узнаем о команде Docker-Compose и о том, как использовать для запуска приложения Springboot из локального контейнера. Но, прежде чем сделать это, нам нужно упаковать приложение Spring Boot с Docker. Посмотрим, как это сделать.
Задачи на приложение Spring Boot
Первое, что мы сделаем, — это иметь базовое приложение на основе Spring Boot, которое мы можем сделать. Для этого мы можем использовать базовое приложение, которое поставляется с пружинными лесами при использовании Spring Initiazr в IntelliJ, и мы добавим очень простую конечную точку, которая просто вернет приветственное сообщение в формате JSON. В случае, если у вас нет Spring Initiazr, это не имеет значения, если вы можете разоблачить конечную точку и запрашивать ее через Mockmvc
тестовый объект или инструмент, такой как почтальон.
Для справки, вот наша структура пакета приложений:
Мы можем заметить, что Dockerfile
размещен в корневой папке всего проекта. Это будет файл, используемый для управления всеми деталями нашего изображения, его Технические характеристики .
Затем файл будет использоваться для создания изображения Docker, и с этого изображения, как только он эффективно работает, у нас будет наш контейнер.
Чтобы докеризировать приложение Spring Boot (или любое приложение), необходимо указать в нашем Dockerfile
Все, что нам нужно, чтобы запустить наше приложение. По сути, это должно быть многоуровневым описанием всех шагов, которые мы предпримуте, чтобы построить и запустить наше приложение локально, в формате, который может быть:
воспроизводимый: DockerFile всегда должен привести к одному и тому же изображению после его запуска и полностью указана. Любой, кто использует это изображение, всегда будет получать точно такую же функциональность.
Независимый от окружающей среды: По сути, сила докера опирается на тот факт, что многие услуги по инфраструктуре и DevOps теперь поддерживают его в своих трубопроводах разработки, так что всякий раз, когда произойдет толчок нового кода в указанную филиал, это вызовет полное восстановление Docker Image, а затем разработчики могут использовать его через
Docker-Compose
Бесплано, или новейшее изображение будет доступно в реестре, который будет выявлен в качестве микросхема для мира через Nginx и т. Д.
Поскольку после окончания компиляции единственное, что нам действительно требуется, чтобы запустить приложение Springboot, — это файл JAR, содержащий скомпилированный код, если мы используем базовое изображение Java для создания собственного, мы можем обернуть наше приложение Springboot в контейнер Docker, определив точку входа как запуск файла JAR:
FROM openjdk:8 COPY target/greeter-*.jar greeter.jar EXPOSE 8080 ENTRYPOINT ["java","-jar","greeter.jar"]
Таким образом, мы строим наше изображение из базового изображения с Java 8 OpenJDK, затем мы копируем файл JAR (который должен существовать в нашей локальной машине на том же уровне папок, что и Target и сам Dockerfile) из нашей локальной системы в каталог корневых контейнеров.
Затем мы выставляем порт 8080 из контейнера, чтобы быть доступным снаружи. Это тот же порт, что и служба Springboot, в противном случае контейнер не будет знать, где работает сервис.
Наконец, мы просто называем Java, чтобы начать наш сервис с банки, которую мы только что скопировали в контейнер с нашей местной машины. Это означает, что При запуске контейнера из изображения, построенного через этот Dockerfile, мы эффективно запустим приложение Springboot Анкет
А докер-состав командование
Dockerfile
позволяет нам указать, что требуется для создания изображения.
Docker-Compose
это команда, которая позволяет указать и запускать несколько сервисов, состоящих из многих изображений Docker вместе, согласованно, позволяя нам указать изображения для использования для каких служб и обеспечения правильного запуска службы. Это также позволяет определять переменные среды, которые подвергаются воздействию работающего контейнера.
Давайте предположим, что наше приложение потребовало имени пользователя и аутентификации пароля в нашей конечной точке. Чтобы определить эти переменные, мы можем написать Docker-compose.yml
Файл, который мы размещаем на том же уровне, что и DockerFile, и там мы можем указать, из какого DockerFile для создания контейнера или какого изображения использовать (или оба для локальных сборок и использования удаленных изображений), а также, как обслуживает состав контейнеров будет использовать, а также необходимые переменные среды.
Простой Docker-compose.yml
может быть:
version: '3' services: web: build: . ports: - "8080:8080" environment: - - password="Pass"
Мы определяем сервис под названием Интернет
Это построено из DockerFile в текущем каталоге, разоблачает порт 8080 снаружи, а сервис, работающий в контейнере, также находится в порту 8080.
Затем мы определяем переменные среды, доступные для нашего сервиса, точно так же, как мы определяем в Application.properties
файл или оболочка.
Чтобы использовать этот файл, чтобы запустить контейнер, мы просто делаем:
Docker -Compose -f <Путь для составления файла> -d вверх
Который будет использовать файл Compose для создания и создания наше контейнер и запустить службу, настроенную с этой средой.
-Д
гарантирует, что контейнер продолжает работать на заднем плане и вверх
начинает это.
Compose позволяет разработчикам нанимать изображение локально на своих машинах, запускать его и тестировать его локально, что очень полезно.
Вывод
Мы видели, что Docker-Compose
Как это помогает разработчикам тестировать определенные функциональные возможности и изолировать проблемы в контролируемой среде, и мы увидели, что необходимо для упаковки приложения Springboot с Docker. Следите за обновлениями!
Оригинал: «https://dev.to/brunooliveira/intro-to-docker-2-docker-compose-and-packaging-a-springboot-application-2366»