Study/Docker&Kubernetes
[Docker] Volume
by kimdaepa
2026. 3. 3.
Data
다양한 종류의 Data가 존재
- Application
- Code + Environment
- Read Only(Image 저장)
- Temporary App Data
- Application이 실행되면서 생성된 데이터
- 컨테이너(변수, 메모리, 파일 등)에 저장
- Read + Write(Container 저장)
- Permanent App Data
- 영구적으로 존재해야 하는 데이터
- 파일 또는 DB에 저장
- Read-Write(Container&Volumes 저장)
Volume(Managed By Docker)
호스트 머신의 폴더
- 이미지, 컨테이너에 있는 것이 아닌 호스트 컴퓨터에 장착된 하드 드라이버에 존재하여 사용 가능하거나, 컨테이너에 매핑되는 것
컨테이너가 제거 되어도 아래 경우와 같으면 데이터가 유지
- 로컬 폴더 연결
- 명명(named)된 Volume
- 영구적이어야 하거나, 편집하거나 직접 보지 않아도 되는 데이터를 저장
- 익명 Volume은 컨테이너 1개와 연결 되어 있음
- 명명된 Volume은 컨테이너 여러개와 연결할 수 있음
- 컨테이너는 이 Volume에 있는 데이터를 Read-Write 가능
- Dockerfile
FROM node:14
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 80
# 컨테이너 밖 레이어에 저장될 위치
~~VOLUME [ "/app/feedback"]~~
# 하지만 이렇게만 하면 호스트의 특정 디렉터리를 지정할 수 없고,
# Docker가 관리하는 볼륨 위치(익명 볼륨)가 자동 할당.
# 익명 볼륨으로 가기 떄문에 사실상 데이터는 날라감.
# 그래서 이 명령어를 붙이지 않고 밑의 명령어를 써서 명명해야 함.
CMD [ "node", "server.js" ]
- 명령어
- Volume List
- Named Volume
- Volume 삭제
- Volume 생성
- Volume 점검
-
docker volume inspect <"Volume 이름">
# 결과
[
{
"CreatedAt": "2026-02-16T09:03:57Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "HostPath",
"Name": "VolumeName",
"Options": null, # ro/rw 확인 가능
"Scope": "local"
}
]
Bind Mounts(Managed By Me)
- 호스트 머신 상에 매핑될 컨테이너의 경로를 설정
- 영구적이고 편집 가능한 데이터에 적합
- 명령어
- 확인해야 하는 점
- 도커가 마운트 한 폴더(또는 파일)에 액세스 할 수 있는 지
- 이는 도커의 Preferences에 액세스 하여 설정할 수 있음
- 설정 → Resources → File Sharing
- 공유 중인 폴더 또는 상위 폴더의 표시가 있어야 함.
- 마운트한 경로의 로컬 폴더(또는 파일)는 도커의 마운트 된 경로에 있는 폴더(또는 파일)를 덮어 씌움.
- 그렇기에 특정 폴더는 덮어 씌우면 안된다고 설정 해야 함 ⇒ 그게 바로 -v
정리