How to properly run an application with docker compose using docker hub

Viewed 28

As far as I understand, only images can be uploaded to the docker hub, which then need to be spooled, and can be launched via docker run. But what if I have several images that I run through docker compose? I have a site on next.js and nginx. There is such 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

If I do a git clone of the repository on the server, and do docker-compose up --build -d, then everything works. I want to automate everything via gitlab ci/cd. I found an article that describes the procedure for installing a runner on a server + a description of the .gitlab-ci.yml file that creates an image, uploads it to the docker hub, and then downloads it on the server and launches it using docker run. Here I see this approach: in gitlab-ci.yml I make several images that I upload to the hub. Next, I upload a file from the docker-compose.yml repository to the server, which will have the following structure:

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

How correct is this approach? Maybe there is a more reliable and better way? Advanced stack (kubernetes, etc.) not yet considered, I want to learn all the basics first before moving on.

0 Answers
Related