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