도커에서 왜 데이터 관리가 필요한가?
- 도커는 이미지로 생성된 레이어에 컨테이너 생성시 read-write 레이어가 추가됨
- 도커는 컨테이너를 삭제하면 생성한 데이터가 삭제됨
- 컨테이너간에 데이터 교환이 필요한 경우가 있다
- 도커는 코드의 수정이 생기면 다시 빌드해야함!
데이터의 종류
Application
- Code + Environment
- 변경이 불가능
- Image에 포함 시키는 것이 일반적
- Read-Only
Temporary App Data(임시 데이터)
- 실행하면서 생성하는 파일
- 삭제하여도 무방함
- 컨테이너 종료 시 삭제
- Read-write
Permanent App Data(영구 데이터)
- 사용자 정보와 같은 저장해야 하는 데이터
- DB등의 데이터
- 컨테이너 종료 시 유지해야 함!
- Read-write
도커는 이미지는 변경하지 않으며 컨테이너에서 Read-write를 수행함
Volumes
Anonymous
- 컨테이너가 존재하는 순간에만 존재
- 컨테이너 삭제시 삭제됨
- 성능에서 이득
- 추후 바인드 마운트와 함께 사용
Dockerfile
# 볼륨 생성(Anonymous)
VOLUME ["/app/feedback"]
Named
- 컨테이너 삭제 시 유지
- 여러 컨테이너에서 공유가 가능
# 사용
docker run -v [name]:[내부경로]
# 확인
docker volume ls
Binde Mounts
- 호스트의 위치와 컨테이너의 저장소를 연결
- 영구적이고 편집이 가능
- 소스 코드에 사용
- 도커는 host의 파일을 컨테이너에 덮어쓴다
-> 이미지 생성 시 만든 폴더가 사라짐
-> (pip, npm install)등의 의존성이 사라짐
- 이를 익명 볼륨으로 만들어서 해결
# [절대경로:폴더명]
docker run -v "/Users~:/app"
docker run -v $(pwd):/app
# 익명볼륨 생성
docker run -v /app/node_modules