Как правильно размещать и запускать приложение с помощью docker compose, используя docker hub
Насколько я понимаю в docker hub можно заливать только образы, которые затем необходимо спулить, и можно запускать через docker run. А что делать, если у меня несколько образов, которые я запускаю через docker compose? У меня есть сайт на next.js и nginx. Есть такой docker-compose.yml
version: '3'
services:
nextjs:
build: ./
networks:
- site_network
nginx:
build: ./.docker/nginx
ports:
- 80:80
- 443:443
networks:
- site_network
volumes:
- /etc/ssl/certs:/etc/ssl/certs:ro
depends_on:
- nextjs
networks:
site_network:
driver: bridge
Если я на сервере сделаю git clone репозитория, и сделаю docker-compose up --build -d, то всё работает. Я хочу автоматизировать всё через gitlab ci/cd. Нашёл статью, в которой описана процедура установки раннера на сервер + описание файла .gitlab-ci.yml, который создает образ, заливает его в docker hub, а затем на сервере его выкачивает и запускает с помощью docker run. Тут я вижу такой подход: в gitlab-ci.yml я делаю несколько образов, которые заливаю в хаб. Далее на сервер заливаю файл из репозитория docker-compose.yml, который будет иметь следующую структуру:
version: '3'
services:
nextjs:
image: registry.gitlab.com/path_to_project/next:latest
networks:
- site_network
nginx:
image: registry.gitlab.com/path_to_project/nginx:latest
ports:
- 80:80
- 443:443
networks:
- site_network
volumes:
- /etc/ssl/certs:/etc/ssl/certs:ro
depends_on:
- nextjs
networks:
site_network:
driver: bridge
Насколько это правильный подход? Может быть есть более надёжный и лучший способ? Продвинутый стек (kubernetes и др.) пока не рассматриваю , хочу сначала выучить все основы, прежде чем двигаться дальше.