Docker로 Node.js 서버 컨테이너 만들기

Atmosphere·2025년 7월 14일

docker

목록 보기
2/5

🎯 목표

Dockerfile을 이해하고 직접 만들 수 있다
docker build, docker run을 실행해 서버를 띄울 수 있다

🧩 실습 세부내용

  1. node-docker-test라는 폴더 생성

  2. 아래 구조로 파일 구성:

node-docker-test/
├── app.js
├── package.json
├── Dockerfile

  1. app.js 내용
const express = require('express');
const app = express();
const PORT = 3000;
app.get('/', (req, res) => res.send('Hello Docker!'));
app.listen(PORT, () => console.log(`Server on ${PORT}`));
  1. package.json 만들기(터미널에서)
npm init -y
npm install express
  1. Dockerfile 내용
FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]

여기서 Dockerfile의 각 명령어들을 간단 정리하자면
FROM: 생성할 이미지의 베이스가 될 이미지를 결정하는 명령어,
이 명령어를 시작으로 Dockerfile을 작성한다.

WORKDIR: 명령어를 실행할 디렉토리를 지정하는 명령어(= linux cd명령어)

EXPOSE: Dockerfile의 빌드로 생성된 이미지에서 노출할 포트를 지정하는 명령어,
그러나 EXPOSE를 설정한 이미지를 기반으로 컨테이너를 생성한다고해서 이 포트가 호스트의 포트와 바인딩하는 것은 아니며, 단지 해당 이미지를 사용하는 사용자에게 해당 포트를 사용한다고 문서화하는 목적을 가지는 것 뿐이다.

Q.만약 publish하고 싶으면?
docker run 명령어에 -p 옵션으로 포트를 지정

COPY: 현재 디렉토리 경로의 모든 파일과 디렉토리를 해당 디렉토리의 디렉토리에다가 모두 복사하는 명령어,
COPY <src> <dest>
src는 호스트 운영체제 경로, dest는 이미지 상에서 경로

RUN: 이미지를 만들기 위해 컨테이너 내부에서 명령어를 실행한다.

  1. 이미지 빌드
docker build -t node-test .
  1. 실행
docker run -p 3000:3000 node-test

-p옵션으로 포트바인딩한다
3000:3000
[호스트의 포트] : [컨테이너의 포트]

  1. 브라우저 접속: http://localhost:3000 → “Hello Docker!” 나오면 성공

profile
작게, 빠르게, 지속가능하게

0개의 댓글