Docker + Node.js + Nginx 3

2023. 12. 11. 03:40·BACK END

이번엔 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  (1) 2023.12.11
Docker + Node.js + Nginx 1  (2) 2023.12.10
Node.js Multer  (2) 2023.12.10
'BACK END' 카테고리의 다른 글
  • Error: Connect econnrefused
  • Docker + Node.js + Nginx 4
  • Docker + Node.js + Nginx 2
  • Docker + Node.js + Nginx 1
빨주노초잠만보
빨주노초잠만보
  • 빨주노초잠만보
    과거의 나를 통해 미래의 나를 성장시키자
    빨주노초잠만보
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • TEKHIT ANDROID SCHOOL (4)
      • Android Architecture (7)
      • Android (40)
      • PROJECT (5)
      • KOTLIN (10)
        • 코루틴의 정석 (3)
      • BACK END (12)
      • CS (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    kotlin interface
    kotlin array
    interface vs abstract
    kotlin 타입 소거
    orbit
    flow
    kotlin abstract class
    의존성 주입
    STATEFLOW
    코틀린 코루틴의 정석
    Throttle
    Clean Architecture
    callbackflow
    kotlin interface abstract 차이
    saeled class enum class 차이
    MVI
    android Room
    sealed class
    repository
    Repository Pattern
    kotlin interface vs abstract
    Room
    ThrottleFirst
    리사이클러뷰 풀
    Livedata
    DI
    DataSource
    sealed class vs enum class
    value class
    android clean architecture
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
빨주노초잠만보
Docker + Node.js + Nginx 3
상단으로

티스토리툴바