Обычно образ делается в системах CI/CD, связанных с VCS, т.е. фиксация кода вызывает экшен (GitHub Actions/GitLab CI/CD, CircleCI и пр.), при котором на внешних мощностях из кода строится образ, которому присваивается версия и он загружается (с docker push) на хранилище образов (AWS ECR, JFrog Artifactory и т.д.), а оттуда скачивается (docker pull) на продакшен машине при запуске docker compose или в другой среде оркестрации контейнеров.