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에서 아무리 요청을 보내도 작동하는 것이 없다.