docker-compose выигрывает, поскольку переопределяет то, что находится в Dockerfile.То, что указано в Dockerfile, используется по умолчанию.и может быть переопределено с помощью команды docker, что делает docker-compose.
Это задокументировано в документации здесь
под обложками, по сути, docker-composeработает что-то вроде
docker run -e VARIABLE=VALUE