능글맞은 구렁이

Docker - Volumes 실습[ 익명 볼륨, 명명 볼륨 생성] 본문

DevOps/Docker

Docker - Volumes 실습[ 익명 볼륨, 명명 볼륨 생성]

보라색츄르 2026. 2. 24. 22:29

1. 익명 볼륨 만들기

FROM node:20-alpine
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 80
VOLUME ["/app/feedback"] # 볼륨 생성 코드
CMD ["npm", "start"]

 

  • Dockerfile에 VOLUME ["/app/feedback"] 을 추가한다.
  • docker build -t feedback-node:volumes . 이미지 빌드
    • -t 이미지명:태크
  • docker run -d -p 3000:80 --rm --name feedback-app feedback-node:volumes 컨테이너 실행
    • -d : 백그라운드 실행
    • -p 3000:80 : 포트 매핑 호스트머신포트(외부):컨테이너포트(내부)
    • --rm : 컨테이너 종료 시 컨테이너 자동 삭제
    • --name feedback-app : 컨테이너 명
    • feedback-node:volumes : 이미지명:태크
  • http://localhost:3000 Title과 Document Text에  내용을 저장해서 save를 누른다.
  • http://localhost:3000/feedback/awesome.txt 을 통해 데이터 확인
  • docker stop feedback-app 컨테이너 중지
  • docker run -d -p 3000:80 --rm --name feedback-app feedback-node:volumes 컨테이너 재 실행
  • http://localhost:3000/feedback/awesome.txt 이동
  • 데이터를 찾을 수 없음

 

 

 

2. 명명 볼륨 만들기

FROM node:20-alpine
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 80
CMD ["npm", "start"]
  • 이미지 빌드 (docker build -t feedback-node:volumes .)
  • docker run -d -p 3000:80 --rm --name feedback-app -v feedback:/app/feedback feedback-node:volumes 실행
    • -d : 백그라운드 실행
    • -p 3000:80 : 포트 매핑 호스트머신포트(외부):컨테이너포트(내부)
    • --rm : 컨테이너 종료 시 컨테이너 자동 삭제
    • --name feedback-app : 컨테이너 명
    • -v feedback:/app/feedback :  볼륨명:컨테이너경로
    • feedback-node:volumes : 이미지명:태크

 

  • http://localhost:3000에 Title과 Document Text에  내용을 저장해서 save를 누른다.
  • http://localhost:3000/feedback/awesome.txt 통해 데이터 확인
  • docker stop feedback-app 컨테이너 중지
  • docker run -d -p 3000:80 --rm --name feedback-app -v feedback:/app/feedback feedback-node:volumes 재실행
  • 이번에는 바로 http://localhost:3000/feedback/awesome.txt 이동하여 데이터 확인
  • 데이터 유지됨
  • docker volume ls로 살펴 본 결과 볼륨은 feedback 하나만 존재
  • 이미 동일한 볼륨명이 있기 때문에 새로 생성되지 않고 기존 볼륨을 이용한것

정리하기

🤔 컨테이너를  stop하고 다시 run했을때 볼륨의 데이터는 유지가 될까?

  • 정답은 NO !
  • 그 이유는 ?
    • --rm이라는 옵션 때문에 컨테이너가 종료될 때 컨테이너는 삭제 된다.
    • 이때, 익명의 볼륨도 같이 삭제된다.

 

🤔 그렇다면 명명 볼륨도 컨테이너를 삭제하면 데이터도 삭제될까?

  • 정답은 NO!
  • 그 이유는?
    • 명명 볼륨은 컨테이너의 '부속품'이 아니라 독립적인 Docker 리소스이기 때문에 자동 삭제되지 않는다.

 

Comments