이번엔 docker-compose를 사용해서 nginx , nodejs multi container 환경을 만들어 보겠습니다.
docker-compose란?
단일 서버에서 여러개의 컨테이너를 하나의 서비스로 정의해 컨테이너의 묶음으로 관리할 수 있는 작업 환경을 제공하는 관리 도구입니다.
docker-compose를 사용하는 이유
docker-compose를 사용하지 않으면 웹 어플리케이션을 테스트할 때 웹 서버 컨테이너, 데이터베이스 컨테이너 두 개의 컨테이너를 각각 생성해야합니다. 매번 run 명령어에 옵션을 설정해 CLI로 컨테이너를 생성하기보다는 여러 개의 컨테이너를 하나의 서비스로 정리해 컨테이너 묶음으로 관리할 수 있다면 좀 더 편리할 것입니다.
프로젝트 루트 경로에 nginX의 root 경로가 될 폴더를 하나 생성해 주고 Dockerfile과 nginx.conf 파일을 하나 생성해줍니다.
Nginx 이미지를 다운받고 default.conf 파일을 삭제합니다.
# nginx image
FROM nginx:latest
# default.conf 삭제
RUN rm /etc/nginx/conf.d/default.conf
# 작성한 nginx.conf 복제
COPY nginx.conf /etc/nginx/conf.d/
루트 경로에 docker-compose.yml을 생성하고 다음 코드를 작성해줍니다.
docker-compose.yml
version: "3"
services:
nginx:
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- "80:80"
depends_on:
- node
- mysql
networks:
- db-net
node:
build:
context: ./node_server
dockerfile: Dockerfile
ports:
- "3000:3000"
depends_on:
- mysql
networks:
- db-net
volumes:
- ./node_server/uploads:/store_images_volume
mysql:
image: mysql:latest
restart: always
environment:
MYSQL_HOST: mysql
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: chanho
MYSQL_PASSWORD: 1234
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/config:/etc/mysql/conf.d
- ./mysql/init:/docker-entrypoint-initdb.d
ports:
- "3307:3306"
networks:
- db-net
networks:
db-net:
서비스 정의
서비스는 도커 컴포즈로 생성할 컨테이너 옵션을 정의합니다. 각 서비스는 컨테이너로 구현되고 하나의 프로젝트로 도커 컴포즈에 의해 관리됩니다.
- services -> 생성될 컨테이너들을 묶어놓은 단위로 서비스 항목 아래에 각 컨테이너에 적용될 생성 옵션을 지정
- image -> 이미지의 이름을 설정합니다. 이미지 이름 포맷은 docker run과 같으며 이미지가 도커에 존재하지 않으면 도커 허브에서 자동으로 내려받습니다.
- build ->build 항목에 정의된 도커 파일에서 이미지를 빌드해 서비스의 컨테이너를 생성합니다.
- ports -> docker run 명령어의 -p와 같으며 서비스 컨테이너를 개방할 포트를 설정합니다.
services:
container1:
image: ...
container2:
image: ...
docker-compose up --build command를 입력하면 docker build . --tag docker_nodejs , docker run -p 3000:3000 docker_nodejs 같은 command로 번거롭게 docker를 실행하지 않아도 됩니다.
'BACK END' 카테고리의 다른 글
Error: Connect econnrefused (2) | 2023.12.12 |
---|---|
Docker + Node.js + Nginx 4 (0) | 2023.12.11 |
Docker + Node.js + Nginx 2 (0) | 2023.12.11 |
Docker + Node.js + Nginx 1 (0) | 2023.12.10 |
Node.js Multer (2) | 2023.12.10 |