Infra/CI-CD

배포 - Multi App을 만들기 위한 Docker Compose 파일 작성하기

Surge100 2023. 1. 6. 15:30

docker-compose.yml 작성

nginx,프론트엔드, 백엔드, MySQL 각각을 컨테이너를 위한 도커파일을 작성했다. 하지만 그들 컨테이너들을 다 작동 시킨다고 생도 컨테이너 환경 특성사 서로 독립적으로 존재하기 때문에 별도의 설정을 하지 않으면 독립된 컨테이너 끼리 서로 통신을 할 수 없다. 그래서 이번 게시물에서는 컨테이너들을 서로 연결시켜주기 위해서 Docker Compose를 작성한다.

 

docker-compose.yml

 

verion: "3"
services:
  frontend:
    build:
      dockerfile: Dockerfile.dev
      context: ./frontend
    volumes:
      - /app/node_modules
      - ./frontend:/app
    stdin_open: true

  nginx:
    restart: always
    build:
      dockerfile: Dockerfile
      context: ./nginx
    ports:
      - "3000:80"

  backend:
    build:
      dockerfile: Dockerfile.dev
      context: ./backend
    container_name: app_backend
    volumes:
      - /app/node_modules
      - ./backend:/app

  MySQL:
    build: ./MySQL
    restart: unless-stopped
    container_name: app_mysql
    ports:
      - "3309:3306"
    volumes:
      - ./MySQL/mysql_data:/varlib/mysql_data
      - ./MySQL/sqls/:/docker-entrypoint-initdb.d/
    environment:
      MYSQL_ROOT_PASSWORD: 1234
      MYSQL_DATABASE: multiapp

 

 

 

 

Nginx

  version: "3"
  services:
      nginx:
        restart: always
        build:
          dockerfile: Dockerfile
          context: ./nginx
        ports:
          - "3000:80"

 

재시작 정책

 restart: always

서버가 켜지던 도중 갑자기 꺼는지 경우가 종종 발생 ex) 크래시

그럴 경우 어떻게 서버를 재시작할 것인지 정하는 정책

  • restart: "no" - 어떠한 상황에서도 재시작을 하지 않는다.
  • restart: always - 항상 재시작을 한다.
  • restart: on-faliure  - on-failure 에러코드와 함께 컨테이너가 멈추었을때만 재시작을 한다.
  • restart: unless-stopped - 임의로 멈추려고 할때 빼고는 항상 재시작한다.

프록시 역활을 하는 Nginx같은 경우 굉장히 중요한 역할로 해당 Nginx의 기능이 멈추면 Client에서 아무리 요청을 보내도 작동하는 것이 없다.

 

 

 

[출처 -  https://www.inflearn.com/course/%EB%94%B0%EB%9D%BC%ED%95%98%EB%A9%B0-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EB%8F%84%EC%BB%A4-ci/dashboard]