티스토리 뷰

node express를 활용해서 간단한 웹 서버를 띄우는 테스트를 해보겠습니다.

Docker 설치는 되어있어야 합니다. 저는 Ubuntu 환경 에서 실습하였습니다.

 

File 준비

Docker image를 build 하기 위한 Dockerfile 과 node 서버 코드가 담긴 server.js를 작성합니다.

현재 환경

  • 현재 경로 : /root/nodetest
  • 필요 파일 : Dockerfile, server.js 

server.js

const express = require('express')
const app = express()

app.get("/", (req, res) => {
    res.send("안녕");
})

app.listen("3000",() => {
    console.log('server is started');
})

 

Dockerfile

FROM node:19-alpine
RUN mkdir /app 
WORKDIR /app
RUN npm init -y
RUN npm install express
COPY ./server.js /app # <host path> <container path> 
CMD ["node", "/app/server.js"]

분석

  • FROM : base image 지정, local repository에 없는 경우 image가 pull 됩니다.
  • RUN : image build 과정에서 수행되는 명령어 입니다.
  • WORKDIR : command가 실행 될 Working Direcotry를 지정합니다. 
  • COPY : 호스트에서 컨테이너로 파일을 복사합니다. 
  • CMD : Container 실행 시 수행되는 명령어입니다.

❗ RUN과 CMD 명령어를 수행한다는 점에서는 같지만, 실행 시점이 다른 것을 유의해주세요. 

 

Image Build

file이 준비되었으면 build를 하면 됩니다. Dockerfile을 기반으로 새로운 image가 생성됩니다.

docker build -t mynode . # 마지막 .은 Dockerfile 위치입니다. 현재 directory로 지정했습니다.

현재 경로 : /nodetest

확인

docker images

mynode image가 생성된 것을 확인할 수 있습니다.

 

container 실행

# -p : port forwarding, <host port>:<container port>
# -d : background 실행
docker run -dp 3000:3000 mynode

확인

 

container 내부 확인

일전에 image build시 내용을 기억하시나요? /app 폴더를 만들고 server.js를 해당 폴더에 복사를 했습니다.

실제로 만들어졌는지 확인해봅시다.

 

container id 확인

docker ps # 현재 실행 중인 컨테이너 목록

container terminal로 접속

docker exec -it fbcfb1a0df25 sh # 해당 컨테이너에 접속하여 sh(shell) 명령어를 실행

분석

RUN, COPY 명령어로 실행된 모든 것들이 만들어져 있는것을 확인할 수 있습니다.

  • /app : mkdir 
  • package.json, package-lock.json : npm init -y 
  • node_modules : npm install express
  • server.js : COPY 명령어를 통해 복사된 파일입니다.

이상입니다.

 

 

 

관련 링크

https://docs.docker.com/engine/reference/commandline/build/

댓글