Как наиболее простым образом собирать докер-контейнеры для разных env?
- в зависимости от ENV выбирался docker-compose.{env}.yaml и dockerfile.{env} для каждого из контейнеров (если сборка из директории, а не из образа)
Это так не работает. ENV задаётся сразу для определённого сервиса в docker-compose и для определённой сборки Dockerfile.
Я бы сделал нормальный CI в gitlab, например, и билды из веток для stage и production. Тут сам docker-compose не совсем предназначен для сборок и порождает костыли.
Удобней иметь один Dockerfile, а особые параметры передавать через --build-argdocker build --build-arg ENV=stage .
Если вы предпочитаете использовать отдельные файлы для каждого env, то насколько понимаю, это очень просто:
1) ENV=xxxx
2) COMPOSE_FILE=docker-compose-$ENV.yml    (или $ENV/docker-compose.yml)
3) DOCKERFILE=Dockerfile-$ENV.yml
и запускаем build