Docker

도커로 Node.js 사용해보기

개발자 김상복 2024. 1. 28. 18:17

[ 이전 포스팅 ] 

 

https://sangbok-diary.tistory.com/23

 

도커 사용자 정의 이미지

[ 이전 게시글 ] https://sangbok-diary.tistory.com/22 도커 기본 사용방법에 대해서 알아보자 도커 사용법에 대해서 조금 더 알아보도록 하자 [ 이전 포스트 ] https://sangbok-diary.tistory.com/21 도커(docker) 란 무

sangbok-diary.tistory.com

 

 

 


 

 

1. Node를 사용하기 위해서

 

 

이전 게시글에서 Dockerfile에 대해서 알아보았다.

 

Dockerfile에서 docker 의 이미지중하나인 alpine을 사용해서 redis를 실행시키는걸 볼 수 있었다

 

그렇다면 Node도 alpine에서 설치가 가능할까 ?

 

그것은 불가능하다.

 

그렇기에 우리는 Node를 사용할 수 있는 이미지를 찾아야한다.

 

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

Build and Ship any Application Anywhere Docker Hub is the world's easiest way to create, manage, and deliver your team's container applications. Create your account Signing up for Docker is fast and free. Continue with GoogleContinue with GitHubContinue wi

hub.docker.com

 

위 사이트에서 이미지 검색이 가능하다

 

우리는 그중 node:14-alpine 이라는 베이스 이미지를 사용하기로하자

 

 

 

 

2. Node - Dockerfile 설정

 

 

 

Dockerfile을 확인해보자

 

형태는 이전과 동일하지만 미세하게 다른 점이 존재한다

 

 

(1) 베이스이미지

 

베이스이미지는 위에서 설명하였듯 node:14-alpine을 사용한다

 

해당 베이스 이미지에서는 node의 설치가 가능한 npm을 사용할 수 있다

 

 

(2) 작업 디렉토리 전환

 

해당 이미지의 /usr/app이라는 폴더로 전환한다

 

 

(3) 종속성 주입

 

npm install을 통해 node를 설치한다

 

그렇다면 COPY는 무엇일까 ?

 

COPY는 말그대로 복사이다

 

COPY [복사 파일] [복사 위치]

# ./는 현재 폴더를 의미

 

위의 문법처럼 사용이 가능하다

 

package.json 파일은 무엇일까?

 

Node에서 필수로 설정해야하는 설정파일이다

 

해당 파일을 살펴보자

 

 

package.json

 

해당 파일을 보면 현재는 별 내용이 없는 설정 파일이다

 

하지만 최종적으로 index.js를 시작한다는 것을 확인할 수 있다

 

 

index.js

 

index.js는 첫화면이라고 볼 수 있다

 

이제 위의 COPY를 살펴보자

 

package.json 파일을 복사를 하는 이유는 도커의 특징에 있다.

 

RUN을 실행할 때는 반드시 실행하게 된다.

 

하지만, 2번째 부터는 복사된 소스코드 파일 중 변경된 것이 있을시에만 실행한다.

 

해당 Dockerfile을 살펴보면 RUN 위에 COPY ./package.json ./ 라는 명령어가 존재한다.

 

우리는 package.json 이라는 설정 파일이 변경되지 않았을 시, 또다시 npm install을 수행할 필요가 없다.

 

허나 다른 파일에 변동이 있다면, 해당 명령어가 강제되면서 모든 모듈을 다시받는 문제가 생길 수 있다.

 

이를 해결하기 위해서, RUN을 실행하기 이전 package.json만 COPY를 진행하여, RUN 이후에 나머지 다른 소스코드 파일을 COPY 함으로써 모듈 전체를 다시 받는 문제를 해결한 것이라 할 수 있다.

 

 

(4) 실제 실행 확인 

 

docker run -p [request port]:[response port] [이미지태그이름]

# -p 는 포트를 지정하는 방법이다
# 앞의 포트는 실제 조회하는 포트, 뒤의 포트는 출력 포트이다

 

 

화면 확인

 

 

위와 같이 Node.js 를 기반으로 한 웹 서비스 구동 화면을 확인할 수 있다