Docker и CI/CD: как все-таки происходит этот магический деплой?
1. Во время ci собираешь docker image и закидываешь в docker registry (как правило приватный)
2. Во время cd вызываешь API твоего оркестратора:
docker-compose/docker swarm/k8s и тд, чтобы он обновил запущенные сервисы

Оба этапа можно реализовать разными способами, хоть через гитлаб, хоть через кучу баш скриптов

PS: docker-compose не является оркестратором и не умеет на ходу обновлять образы
Согласен с Армянское Радио - важна идея, точнее понимание процесса и умение сделать все вручную.
А автоматизировать с помощью тех или иных инструментов - дело второе.
Посмотрите пример в моем ответе https://qna.habr.com/q/1016852#answer_1981278