Study & Project ✏️/Docker

[Docker] - Node.js Dockerfile example, Dockerfile 예제

JM 2023. 9. 10. 23:05
반응형

Dockerfile을 이용해 도커 이미지 만드는 방법

  • Docker에서 구동할 Node.js 파일을 생성하기

Docker 컨테이너에서 구동할 index.js 파일을 생성하고, npm을 통해 express 모듈을 설치해줍니다.

touch index.js
npm init
npm i express

만들어진 pacakge.json에서 scripts에 start command를 추가해줍니다.

// 생략...
"scripts": {
    "start": "node index.js"
  },

이제 index.js을 웹 서버로 만들어 5001번으로 들어오는 요청에 대한 응답을 하는 코드를 만들어줍니다.

// index.js
const express = require('express');

const app = express();
const PORT = 5001;

// GET 요청이 들어오면 응답을 보냄
app.use('/', (req, res)=>{
    res.send("Server is running");
})

app.listen(PORT, ()=>{
    console.log(`Server is on ${PORT}`)
})

  • Dockerfile 작성하기
    Dockerfile 작성을 통해 스크립트 형식의 도커 이미지 생성을 해봅시다.
FROM node:18

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY ./ ./

EXPOSE 5001
CMD [ "node", "index.js" ]

해당 코드들을 순차적으로 설명하자면,

  1. baseImage는 node 18 버전을 사용한다.
  2. 컨테이너 안의 /usr/src/app 디렉토리를 초기 시작 디렉토리로 사용한다.
  3. package*.json 파일을 디렉토리에 복사한다.
  4. npm install을 실행한다.
  5. 5001번 포트를 외부에 오픈한다.
  6. 컨테이너의 기본 시작값을 node index.js로 설정한다.

  • .dockerignore를 통해 build시 ignore 할 것들에 대해 명세하기
    git의 gitignore처럼, docker도 dockerignore가 있습니다.
    docker build시 node_modules처럼 불필요한 부분은 build에 포함시키지 않기 위함입니다.
# .dockerignore
node_modules
npm-debug.log
Dockerfile
  • 해당 작업을 완료하면 다음과 같은 디렉토리 구조를 사용하게 됩니다.


  • Dockerfile을 이용한 docker build하기
    Dockerfile을 사용하기 위해 Dockerfile이 있는 디렉토리로 이동 후 다음 명령어를 입력합니다.
    docker build -t server-response ./

Docker image의 이름은 server-response로 이미지를 만들게 됩니다.

성공적이라면 아래와 같은 상태를 볼 수 있습니다.


다음 포스팅을 통해 Docker 이미지를 run 시키는 방법, Docker 컨테이너 내부에 접근하는 방법, docker-compose를 통해 컨테이너간 통신하는 방법을 포스팅해보겠습니다.