Зачем разрабатывать в контейнерах? Это контрпродуктивно. Проблемы с дебагерами, памятью и дисковой на ровном месте.
А для тестов у нас так: собирается два образа из одной ревизии кода (через базовые образы). Один продовый, второй на основе первого с тестами. И вот второй тестируется в CI. Если все хорошо, то первый можно попытаться задеплоить.
Тут можно возразить, что деплоится и тестируется не одно и то же, но тащить в прод образ с тестами не хочется.