Server/Docker
[도커(docker)] Dockerfile를 이용하여 nodejs & express 서버 설치 및 개발 환경 구성하기
너무 궁금해
2025. 2. 12. 16:52
[도커(docker)] Dockerfile를 이용하여 nodejs & express 서버 설치 및 개발 환경 구성하기
📢 작성순서
📌 Node.js Express 서버 코드 작성
📌 Docker 설정 파일 작성
📌 Docker 컨테이너 실행 |
📌 Node.js Express 서버 코드 작성
📝 프로젝트 디렉토리 생성
✔ 터미널에서 아래 명령어를 실행하여 프로젝트 디렉토리를 만든다
mkdir docker-nodejs
cd docker-nodejs
📝 Node.js 프로젝트 초기화
✔ 아래 명령어를 실행하여 package.json 파일을 생성한다.
npm init -y
📝 Express 설치
✔ 아래 명령어를 실행하여 Express 프레임워크를 설치한다.
npm install express
🛠 package.json 파일 내용을 확인합니다.
📝 Express 서버 코드 작성
✔ server.js 파일을 생성하고 아래 코드를 입력한다.
const express = require('express');
const PORT = 8080;
const HOST = '0.0.0.0';
const app = express();
app.get('/', (req, res) => {
res.send('Hello World');
});
app.listen(PORT, HOST);
console.log(`Server running at http://${HOST}:${PORT}/`);
📝 Express 서버 실행
✔ 터미널에서 아래 명령어를 입력하여 서버를 실행합니다.
node server.js
결과 > Server running at http://0.0.0.0:8080/
🛠 브라우저를 이용해 실행 화면을 확인합니다.
✔ 터미널에서 확인 후 종료한다(Ctrl + C)
📌 Docker 설정 파일 작성
📝 Dockerfile 파일 생성
✔ Dockerfile의 이름으로 파일을 만들고 다음 내용을 추가한다.
FROM node
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY ./ ./
EXPOSE 8080
CMD ["node", "server.js"]
🛠 Dockerfile 작성에 사용된 명령어 설명
# 1. Node.js 베이스 이미지 사용
FROM node:18
# 2. 작업 디렉토리 생성
WORKDIR /usr/src/app
# 3. package.json과 package-lock.json 복사
# 3, 4, 5번 순서 주의!!!
# 불필요한 npm install 작업을 줄여준다.
COPY package*.json ./
# 4. npm 패키지 설치
RUN npm install
# 5. 애플리케이션 소스 코드 복사
COPY . .
# 6. 컨테이너에서 사용할 포트 지정
EXPOSE 3000
# 7. 서버 실행
CMD ["node", "server.js"]
📌 Docker 컨테이너 실행
📝 Docker 이미지 빌드
✔ 아래 명령어를 실행하여 도커 이미지를 빌드한다.
docker build -t my-express-app .
📝 컨테이너 실행
✔ 이미지를 빌드한 후 컨테이너를 실행한다.
docker run -p 3000:8080 my-express-app
🛠 이제 http://localhost:3000에 접속하면 Docker 컨테이너에서 Express 서버가 실행된다.
📝 volume 설정
✔ volume를 설정하면 이미지를 재생성하지 않아도 프로그램 소스를 변경할 수 있습니다.
docker run -p 3000:8080 -v /usr/src/app/node_modules -v %cd%:/usr/src/app my-express-app
🛠 명령에 대한 설명입니다.
docker run \
-p 3000:8080 \
# 로컬 호스트의 3000번 포트를 컨테이너의 8080 포트에 매핑
# 로컬 호스트의 3000번 포트로 접속하면 컨테이너 내부의 8080 포트로 요청이 전달됨.
-v /usr/src/app/node_modules \
# 컨테이너 내부의 'node_modules' 디렉토리를 호스트와 공유하지 않음 (빈 볼륨 마운트)
# 이렇게 하면 node_modules가 호스트의 영향을 받지 않고 컨테이너 내에서만 유지됨.
-v %cd%:/usr/src/app \
# 현재 디렉터리 (%cd%)를 컨테이너의 '/usr/src/app' 디렉터리에 마운트 (윈도우 기준)
# 이를 통해 로컬에서 파일을 수정하면 컨테이너 내부에서도 반영됨.
# %cd%는 Windows cmd에서 현재 디렉토리를 의미함.
# Linux/macOS에서는 $PWD를 사용하여 대체
my-express-app
# 'my-express-app'이라는 이름의 도커 이미지로 컨테이너 실행
# 사전에 docker build -t my-express-app . 같은 명령어로 빌드되었어야 함.
✔ 소스 수정후 컨테이너를 재시작하면 변경사항이 적용됩니다.
docker restart 컨테이너-이름