docker 사용하기 (with nodejs)

jay·2022년 3월 10일
1

Docker

목록 보기
1/4
post-thumbnail

Docker를 알게 된 이후

docker를 모르고 개발할 당시 크게 불편한 점은 없었던 것 같지만 docker를 경험한 이후 api 서버를 개발할 때면 가장 먼저 infra를 어떻게 구축할지 생각하게 됩니다. 깊이 있게 Docker를 알지는 못하지만 사용하면서 가장 편리했던 점은 django nodejs reactjs 등 여러개의 서버를 nginx로 묶어서 사용할 수 있고 os에 관계없이 동일한 환경으로 구성해서 개발하거나 배포할 수 있다는게 가장 큰 장점이었습니다.

예를 들어,
reactjs => localhost:3000
nodejs => localhost:3333
django => localhost:8000

세가지 서버를 사용한다고 가정했을 떄 docker를 사용한다면

reactjs => localhost/reactjs
nodejs => localhost/nodejs
django => localhost/django

위와 같이 80포트로 묶어서 서버를 구동할 수 있다는게 가장 큰 장점으로 다가왔습니다.

(이번 글에서는 nginx는 사용하지 않습니다.)

자세한 내용은 Docker overview를 확인하셨으면 좋겠습니다.

Docker 설치하기

Download and install Docker
우선 위 링크에서 Docker를 설치합니다.

nodejs 서버 만들기

nodejs 설치

nodejs 설치 후

특정 폴더

npm init -y (package.json 생성)
npm install express (installation express module)
touch server.js

커맨드를 입력 후 server.js에 아래 내용을 입력합니다.

const express = require('express')
const app = express()
const port = 3000;

app.get('/', (req, res) => {
  res.send('Docker with nodejs')
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

package.json을 열어서 script 하위 depth에
"start" : "node server.js" 를 입력합니다.

terminal에 npm run start 입력 후

localhost:3000에 접속하게 되면 Docker with nodejs가 보이실 겁니다.

Docker 사용해서 nodejs 서버 구동

이제 docker를 사용해서 서버에 띄워보도록 하겠습니다.

root 경로의 터미널에 touch Dockerfile 커맨드로 Dockerfile 생성 후 아래와 같이 작성합니다.

# image
FROM node:14-alpine

# WORKDIR은 명력을 실행하기 위한 디렉토리를 설정합니다.
WORKDIR /usr/src/node

# root 폴더에 있는 package-lock.json를 /usr/src/node 복제합니다
COPY package-lock.json /usr/src/node
# root 폴더에 있는 package.json를 /usr/src/node 복제합니다
COPY package.json /usr/src/node
# package.json에 있는 module을 install합니다
RUN npm install

# node_modules가 설치 된 이후 root(.) directory전체를 복제합니다.
COPY . /usr/src/node

# script를 실행합니다.
CMD ["npm","run","start"]

terminal에 docker image를 build 합니다
docker build . --tag docker_nodejs

build 후 docker container를 실행합니다.
docker run -p 3000:3000 docker_nodejs

nodejs 서버만 구동했을 때와 같이 서버가 실행됩니다.

이렇게 불편한데 굳이 쓰는 이유가 뭔가요?

위처럼 사용한다면 여전히 docker를 왜 사용해야 하는지 도저히 알 수 없습니다.. os에 관계없이 동일한 환경을 구성할 수 있다지만 너무 불편해 보이는건 사실입니다. 매번 npm run start보다 긴 command를 입력해야 되니까 번거롭게 느껴지시겠지만.. 다음 글에서는 docker-compose를 사용해서 서버를 구동시키는 방법에 대해서 글을 적도록 하겠습니다. 감사합니다.

profile
Generalist

0개의 댓글