본문 바로가기
책책책을 읽자/따라하며 배우는 도커와 CI 환경

도커 파일 작성하기 / 도커 볼륨(volume)

by 해룸 2025. 2. 27.
FROM node:10

WORKDIR /usr/src/app

COPY package.json ./

RUN npm install

COPY ./ ./

CMD ["node","server.js"]

 

FROM alpine 베이스 이미지가 아닌 node 이미지를 사용하는 이유

베이스 이미지를 alpine 으로 변경한 다음 'docker build .' 명령어 이용해 빌드해 보면, 도커 이미지를 생성하는 중에 npm not found 라는 에러가 뜬다. 이는 alpine 이미지에 가장 최소한의 경량화된 파일만 들어가 있기 때문에 npm 을 사용하기 위한 파일이 들어있지 않기 때무니다.

따라서 npm을 사용하지 못하는 alpine 베이스 이미지 대신 npm을 사용할 수 있는 node 이미지를 사용한다.

 

COPY를 두번으로 나눈 이유

만약 코드가 

COPY ./ ./

RUN npm install 이면 전체 파일을 카피한 다음 npm install을 실행한다.

 

하지만 의존성 추가가 아닌 소스 코드만 변경한 경우 npm install을 한번 더 실행하는것은 매우 비효율적이다. 

도커 파일 코드를 npm install 을 기점으로 COPY package.json ./ 과 COPY ./ ./ 로 나눠 놓으면 종속성 부분은 캐시를 이용해 처리하게 된다.

이를 통해 불필요하게 종속성을 다시 내려받는 문제를 해결할 수 있다.

 

docker run -p <로컬 호스트 포트>:<컨테이너 속 포트> <이미지 이름>

docker run -p 5000:8080 <이미지 이름> 으로 실행중인 컨테이너에 접속할때 일어나는 일

http://localhost:5000으로 접속 => 로컬호스트 네트워크(5000) 을 node 서버 포트인 8000에 매핑한다.

 


도커 볼륨

프로그램에 기능이 추가되어 새로 이미지를 만들어 컨테이너를 띄워야 하는 상황 => 도커는 기존 컨테이너를 수정하는것이 아닌, 새로운 컨테이너를 만드는 방식으로 작동한다.

하지만 기존 컨테이너의 데이터가 필요할 수가 있다. (예를 들어 mySql을 컨테이너로 띄운 상황) 이런 경우 컨테이너의 영속성을 유지하기 위해 사용하는것이 도커 볼륨이다.

그래서 도커 볼륨이란, 컨테이너 내부에 데이터를 저장하는것이 아닌 호스트 내부에 데이터를 저장하는 방식

 

docker run -v <호스트의 디렉토리 절대경로>:<컨테이너 디렉토리 절대경로> <이미지 이름>:<태그명>