Web Analytics

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Nodejs 윈도우 Docker 설치 설정 방법
    개발 2026. 5. 11. 00:11

    목차

      Node.js 윈도우 Docker 설치 설정 방법
      Node.js 윈도우 Docker 설치 설정 방법



      윈도우에서 Node.js 개발을 위해 Node.js를 따로 설치하는 번거로움이 있습니다.
      Docker를 설치하면 내 컴퓨터를 깨끗하게 유지하면서도 독립된 상자 안에서 실행할 수 있습니다.
      Node.js를 Docker에 담아 실행하면 환경 충돌 없이 관리할 수 있습니다.
      윈도우에서 리눅스 환경을 지원하기 위해 WSL2를 켜야 합니다.

       


      Node.js

      Node.js는 크롬 V8 자바스크립트 엔진으로 만들어진 오픈소스 자바스크립트 런타임입니다.
      웹 브라우저 안에서만 실행되던 자바스크립트를 브라우저 밖에서도 실행할 수 있게 하였습니다.
      JavaScript로 백엔드 개발을 가능하게 하는 기술입니다.

       

      https://nodejs.org/ko

       

      Node.js — Run JavaScript Everywhere

      Node.js® is a free, open-source, cross-platform JavaScript runtime environment that lets developers create servers, web apps, command line tools and scripts.

      nodejs.org

       

      Node.js
      Node.js

       

       

      특징
      자바스크립트 단일 언어 프론트엔드와 백엔드를 모두 JavaScript로 개발할 수 있습니다.
      비동기 I/O ( Non-blocking I/O ) 파일 입출력, 네트워크 작업 시 요청을 기다리지 않고 다음 작업을 처리합니다.
      싱글 스레드 기반 단일 스레드 이벤트 루프 방식으로 동작하여 가볍습니다.
      NPM ( Node Package Manager ) 방대한 오픈소스 라이브러리 생태계를 활용하여 개발이 가능합니다.

       

       

      Node.js 다운로드
      Node.js 다운로드



      Node.js LTS(Long Term Support)은 장기간 지원받을 수 있는 버전을 의미합니다.
      보안 패치, 버그 수정 등 중요 업데이트를 최소 30개월간 보장됩니다.
      운영 서버처럼 높은 안정성이 요구되는 환경에서 가장 추천하는 버전입니다.

       


      Docker

      Docker는 애플리케이션을 컨테이너라는 환경에서 실행할 수 있게 해주는 도구입니다.
      윈도우에서 도커를 돌리려면 리눅스 기반 시설이 필요합니다.

      개발 중에는 로컬 폴더를 컨테이너와 연결하면 코드 수정 시 바로 반영됩니다.
      파일을 수정할 때마다 브라우저가 자동으로 새로고침됩니다.

       

      https://www.docker.com

       

      Docker: Accelerated Container Application Development

      Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.

      www.docker.com

       

       

      Docker
      Docker

       

      Docker
      처음 실행 docker compose up --build
      이후 실행 docker compose up
      백그라운드로 실행 docker compose up -d
      중지 docker compose down
      로그 보기 docker compose logs -f
      패키지 추가할 때 docker compose down
      docker compose up --build 

       

       


      설치


      1. 사이트에서 도커를 다운로드합니다.
      https://www.docker.com/products/docker-desktop

       

      Docker Desktop: The #1 Containerization Tool for Developers | Docker

      Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.

      www.docker.com

      반응형

       

      Docker 다운로드
      Docker 다운로드

       

       

      2. 설치한 후에 반드시 재부팅합니다.

       

      Docker 설치
      Docker 설치
      Docker 설치
      Docker 설치
      Docker 설치
      Docker 설치
      Docker 설치
      Docker 설치

       

       

      3. 로그인을 합니다.

       

      Docker 실행 로그인
      Docker 실행 로그인
      Docker 실행 로그인
      Docker 실행 로그인
      Docker 실행 로그인
      Docker 실행 로그인
      Docker 실행 로그인
      Docker 실행 로그인

       


      4. WSL을 설치해야 합니다.
      wsl --version 혹은 wsl --install
      설치할 모든 새로운 리눅스 배포판을 WSL 2 ( Windows Subsystem for Linux 2 ) 기반으로 설정합니다.
      wsl --set-default-version 2

       

      Docker 실행 WSL 미설치 경고
      Docker 실행 WSL 미설치 경고
      Docker 실행 Windows PowerShell
      Docker 실행 Windows PowerShell
      Docker 실행 Windows PowerShell
      Docker 실행 Windows PowerShell
      Docker 실행 Windows PowerShell
      Docker 실행 Windows PowerShell
      Docker 실행 Windows PowerShell
      Docker 실행 Windows PowerShell
      Docker 실행 Windows PowerShell
      Docker 실행 Windows PowerShell

       


      5. 설치 확인을 합니다.
      docker run hello-world
      hello-world가 정상 출력되면 설치가 완료되었습니다.

      Docker 버전 확인
      Docker 버전 확인
      Docker 실행
      Docker 실행
      Docker hello-world
      Docker hello-world
      Docker hello-world
      Docker hello-world

       


      사용

      프로젝트 디렉터리를 만들고 루트에 Docker용 설정 파일을 만듭니다.


      1. 프로젝트 디렉터리를 만듭니다.

       


      2. 프로젝트 루트에 Dockerfile을 만듭니다.
      베이스 이미지를 LTS로 지정합니다
      FROM node:22-alpine
      작업 폴더를 정합니다. 
      WORKDIR /app

       

      # ---- 빌드 단계 ----
      # 1. Node.js LTS 이미지 사용
      FROM node:22-alpine
      
      # 2. 작업 디렉토리 설정
      WORKDIR /app
      
      # 3. 패키지 파일 먼저 복사 ( 캐시 활용 )
      COPY package*.json ./
      
      # 4. 의존성 설치
      RUN npm install
      
      # 5. 소스 코드 복사
      COPY . .
      
      # 6. 포트 개방 ( 3000번 포트 )
      EXPOSE 3000
      
      # 7. 개발 서버 실행
      CMD ["npm", "run", "dev"]

       


      3. 루트에 docker-compose.yml을 만듭니다.

      version: '3.8'
      services:
        baobtree:
          build: .
          ports:
            - "3000:3000"
          volumes:
            - .:/app                        # 로컬 파일 변경이 컨테이너에 즉시 반영
            - /app/node_modules             # node_modules는 컨테이너 것 사용
          environment:
            - NODE_ENV=development
            - WATCHPACK_POLLING=true        # Windows에서 핫리로드 작동을 위해 필요



      4. 루트에서 실행합니다.
      docker compose up --build

      Docker Node.js 프로젝트 실행
      Docker Node.js 프로젝트 실행


      5. 브라우저에서 확인합니다.
      http://localhost:3000

      Docker Node.js 브라우저
      Docker Node.js 브라우저

       

       


      오류 > 포트 충돌

      Cannot start Docker Compose application. Reason: compose [start] exit status 1. Container baobtree-baobtree-1 Starting Error response from daemon: ports are not available: exposing port TCP 0.0.0.0:3000 -> 127.0.0.1:0: listen tcp 0.0.0.0:3000: bind: An attempt was made to access a socket in a way forbidden by its access permissions.



      포토 충돌로 인한 문제입니다.
      해결책은 도커 포트 변경하면 간단합니다.

      원인을 찾고자 한다면 우선 포트를 쓰고 있는 범인을 찾아봅니다.

      netstat -ano | findstr 3000



      명령어 결과 맨 오른쪽에 뜨는 숫자(예: 12345)가 범인의 PID입니다

      taskkill /f /pid 12345



      3000번 포트를 쓰는 프로그램이 없는데도 이 에러가 난다면
      윈도우 네트워크 서비스를 껐다 켜줍니다.

      net stop hns
      net start hns



      종료 후 docker-compose up을 다시 시도합니다


      요약

      1. 도커 https://www.docker.com/products/docker-desktop
      2. 프로젝트 루트 Dockerfile, docker-compose.yml
      3. 실행 docker compose up --build

      반응형
    Designed by Tistory.