¿Cómo construir, empujar y tirar múltiples contenedores acoplables con gitlab ci?

Tengo un archivo docker-compose que construye dos contenedores, una aplicación de nodo y un servidor ngnix. Ahora me gustaría automatizar el proceso de compilación y ejecución en el servidor con la ayuda de los corredores de gitlab. Soy bastante nuevo en cosas relacionadas con CI, así que disculpe mi enfoque:

Me gustaría crear múltiples repositorios en gitlab.com y tener un dockerfile para cada uno de estos. ¿Ahora tengo que asociar una instancia de gitlab-runner con cada uno de estos proyectos para construir la imagen, llevarla a un repositorio docker y dejar que el servidor la extraiga de allí? Y luego tendría que empujar de alguna manera el archivo docker-compose en el servidor y componer todo desde allí.

Así que mis preguntas son:

Puedo ejecutar múltiples (2 o 3) gitlab-runner para todos mis repositorios en un servidor?Necesito un corredor específico o compartido y cuál es exactamente la diferencia? ¿Por qué todos los tutoriales usan instancias de gitlab autohospedadas en lugar de solo usar repositorios de gitlab (¿No es posible usar gitlab-runner con repositorios de gitlab.com?)Es posible usar docker-compose en una tubería de gitlab-runner y simplemente construir todo de una vez?

o siento por el tipo de redacción no estructurada, pero tengo muchas preguntas sobre estas tecnologías.

Gracias por adelantad