Spring АйО
8.42K subscribers
303 photos
209 videos
402 links
Русскоязычное сообщество Spring-разработчиков.

Habr: bit.ly/433IK46
YouTube: bit.ly/4h3Ci0x
VK: bit.ly/4hF0OG8
Rutube: bit.ly/4b4UeX6
Яндекс Музыка: bit.ly/3EIizWy

Канал для общения: @spring_aio_chat
Download Telegram
🐳 Как управлять запуском различных сервисов в Docker Compose?

Docker Compose предлагает несколько способов управления запуском сервисов. Один из вариантов — создать множество compose.yaml файлов. Главный файл будет содержать все возможные сервисы приложения и его окружения, а другие файлы — импортировать сервисы из основного.

Однако у такого подхода есть недостатки. Во-первых, сложно получить целостное представление о приложении. Во-вторых, создание и поддержка большого количества compose.yaml файлов может быть трудоемкой задачей, особенно если ваша IDE не поддерживает их удобное редактирование.

Решением этой проблемы в Docker Compose являются профили. Этот подход знаком многим разработчикам, работающим со Spring. Профили позволяют гибко управлять запуском сервисов в зависимости от окружения.

Подробнее о Docker Compose профилях можно прочитать в статье (en): https://event-driven.io/en/docker_compose_profiles/

#Docker #DockerCompose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥511
🐳 Эффективное управление окружениями с Docker Compose

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

Предположим, что мы хотим разработать окружения для Spring Boot приложения, использующего PostgreSQL и Kafka:
* Для продакшена: минимальный набор сервисов – Spring Boot, PostgreSQL и Kafka.
* Для разработки: расширенный набор, Spring Boot, PostgreSQL, Kafka и удобные инструменты для работы, такие как pgAdmin и KafkaUI.

Мы рассмотрим решение этой задачи в контексте использования Docker Compose. Отметим, что в большинстве случаев для продакшена рекомендуется использовать более продвинутые решения, например, Kubernetes.

Возможные способы решения поставленной задачи

1. Один файл с профилями
Можно описать все сервисы в одном docker-compose.yml и использовать профили для разделения сервисов, необходимых в продакшене и разработке. Такой подход позволит легко управлять сервисами, активируя нужные профили в зависимости от окружения.

Преимущества:
* Один файл для управления всеми сервисами.
* Легкость переключения между окружениями за счёт использования профилей.

Недостатки:
* Отсутствие гибкости: сложно настроить разные порты, скрипты инициализации для сервисов в разных окружениях.
* Не всегда удобен для сложных конфигураций.

2. Дублирование файлов

Преимущества:
* Полная гибкость в настройке каждого окружения.
* Можно легко добавить уникальные параметры и сервисы для каждого случая.

Недостатки:
* Дублирование кода.
* Сложность синхронизации изменений между файлами.
* Проблемы с поддержкой нескольких файлов (например, при добавлении нового сервиса).

3. Переиспользование сервисов с include и extends

Возможно, не все знают, но Docker Compose предоставляет ключевые слова include и extends, которые могут отлично подойти для нашей задачи. Эти конструкции позволяют избежать дублирования кода, переиспользуя общие сервисы между различными файлами.

* Include даёт возможность подключить один docker compose файл к другому, аналогично запуску нескольких файлов через терминал. Этот способ полезен, если нам нужно просто включить сервисы без дополнительных изменений.
* Extends – более гибкий инструмент, который позволяет подключить сервисы из одного файла в другой и переопределить их свойства, что особенно удобно, если требуется настроить окружение под разные нужды.

Преимущества:
* Избегаем дублирования кода.
* Гибкость при настройке сервисов в разных окружениях.
* Возможность вынести общие сервисы в отдельный файл и изменять их конфигурации в каждом окружении.

Недостатки:
* Сложнее в реализации и поддержке по сравнению с одним файлом с профилями.
* Потребуются дополнительные знания о синтаксисе docker-compose.

services.yml (общие сервисы)


version: '3.8'
services:
postgres:
image: postgres:13
kafka:
image: bitnami/kafka:latest


docker-compose.prod.yml:


version: '3.8'
services:
spring:
image: my-spring-app:latest
postgres:
extends:
file: services.yml
service: postgres
kafka:
extends:
file: services.yml
service: kafka


docker-compose.dev.yml:


version: '3.8'
services:
postgres:
extends:
file: services.yml
service: postgres
kafka:
extends:
file: services.yml
service: kafka
pgadmin:
image: dpage/pgadmin4
kafka-ui:
image: provectuslabs/kafka-ui


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

Ставь ❤️ если знал про extends/include и 🔥 если не знал

#DockerCompose #Tips
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥80👍1412🤯2