1. 필요성
- 컨테이너가 실행되었다가 중단되면, 데이터들은 어떻게 될까?
- 모두 사라져버림...
- 이때 사용할 수 있는게 Docker Volume
2. 정의
- host 파일 시스템 폴더를 Docker container의 파일 시스템 폴더로 마운트하는 것
- host에서 파일 내용을 바꾸면, 바로 Docker container에 반영됨
- 반대도 가능하지만, Volume의 속성을 어떻게 두냐에 따라 다름
- 이를 통해 Docker Container의 상태와 관계없이 데이터를 영구적으로 보관함
- 파일 시스템에서의 마운트
- 디스크와 같은 물리적인 장치를 파일 시스템의 특정 위치(폴더)에 연결해주는 것을 말함
- (예시) 윈도우에서 USB를 꽂으면 내 컴퓨터에 새로운 :D or :E의 폴더가 생기는 것이 바로 마운트
3. 종류
- Host Volumes
- docker run -v 실행시 페어로 지정
- docker run -v {host 파일 시스템 경로}:{Docker Container 파일 시스템 경로}
- Anonymous Volumes
- docker run -v {Docker Container 파일 시스템 경로}
- Dockerfile에서 사용되는 방식으로, host 쪽에 액세스되지는 않지만 재시작시에도 유지됨
매번 ID를 찾아서 관리해줘야해 자주 안쓰임
- Named Volumes
- docker run -v name:{Docker Container 파일 시스템 경로}
- 가장 선호되는 방식으로, 하나의 Volume을 다수의 컨테이너에서 공유할 수 있음
- docker compose에서도 사용됨
+) Volume을 readonly로 지정하고 싶다면? 뒤에 :ro를 붙이면 됨
4. 예시
- nginx를 실행해보자
- docker run -p 8081:80 -d --name nginx_demo -v /Users/jobox/Downloads/grepp/kdt/nginx/html:/usr/share/nginx/html nginx
- 포트로 접속 - http://localhost:8081/
- index.html 내용 수정하고, 브라우저에서 재방문
- nginx 재시작하고 내용이 유지되는지 확인
[출처] 생활코딩, 데이터 엔지니어링 데브코스
'data engineering > docker' 카테고리의 다른 글
[Docker] network (0) | 2024.05.30 |
---|---|
[Docker] Clean up (0) | 2024.05.30 |
[Docker] 명령어 사전 (0) | 2024.05.29 |
[Docker] Docker & Github (0) | 2024.05.29 |
[Docker] Port forwarding(=Port mapping) (0) | 2024.05.29 |