9

Использование Docker для локального тестирования

Всем привет, работаю java программистом больше 10 лет, в этом посте хотел бы показать, как использовать Docker для локального тестирования приложения.

Средний корпоративный код содержит не очень много логики, но множество интеграций с другими сервисами, несколько баз данных (postgres, кеш в redis, поиск в elastic), очередь (kafka), хранилище документов (s3) итд. Хотелось бы иметь возможность тестировать приложение на локальной машине, без необходимости доставки каждого изменения до общего dev стенда.

Чтобы не разворачивать весь стек технологий на рабочем ноуте, используют Docker контейнеры. Часто образ контейнера содержит минимальную сборку linux (alpine) и сам сервис, например postgres. Внутри контейнера сервис доступен по своему стандартному порту (5432 для postgres), но обратиться напрямую к нему нельзя - на время работы контейнера Docker будет предоставлять внешний порт

Postgres поднят, но порт 5432 доступен только внутри контейнера

Postgres поднят, но порт 5432 доступен только внутри контейнера

Можно настроить, чтобы Docker контейнер сохранял состояние на жестком диске. Но для тестов лучше запускать образы с нуля - тогда предыдущие попытки выполнения тестов не будут влиять на текущие.

Для запуска Docker на рабочей машине можно установить Docker desktop. Для поддержки Docker в CI может потребоваться конфигурация dind (docker in docker). При разработке в компании также потребуется указывать корпоративный репозиторий образов. Версия в образе должна соответствовать используемой на продакшене версии сервиса.

Для автоматизации работы с Docker из java тестов я использую библиотеку testcontainers:

@Container
@ServiceConnection
static PostgreSQLContainer<?> postgreSQLContainer = new PostgreSQLContainer<>("postgres");

Здесь postgres - имя контейнера без указания версии. Аннотация Container указывает на необходимость запустить Docker до старта теста. Аннотация ServiceConnection позволяет java узнать внешний порт сервиса и подставить в свой конфиг.

Использование контейнеров позволяет упростить локальное тестирование приложения и является мастхев инструментом. Буду рад ответить на вопросы.

Лига программистов

2.3K поста12K подписчика

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества