Docker Volume의 필요성
- Docker Container가 실행되었다가 중단되면 데이터들은 어떻게 될까? -> 유실됨..
- 특정 소프트웨어가 Docker Container를 통해 일회성으로 동작하는 것이 아니라 지속적으로 동작해야 한다면 데이터가 영구적으로 보관되어야 함
- ex. 데이터베이스가 docker container안에서 동작한다면?
- 이를 보장하는 기능이 Docker Volumes -> Data Persistence
- Docker Container내의 가상 파일 시스템과 호스트 시스템의 파일 시스템을 매핑
- ex. 호스트 파일 시스템의 /home/hyangsso/logs를 Docker Container의 /var/lib/airflow/logs로 매핑
- 이 경우 Docker Container가 중단되더라도 모든 airflow logs는 기록이 남게 됨
쌓여있는 데이터를 영구적으로 보관하고 싶어 -> docker volume 사용
Docker Volume
- 호스트 파일 시스템 폴더를 Docker Container 파일 시스템의 폴더로 마운트하는 것
- 호스트 쪽에서 내용을 바꾸면 바로 Docker Container쪽에도 반영됨
- 반대도 사실이지만 Volume의 속성을잡기 나름임 (ex. 읽기 전용)
- 하나의 폴더를 다수의 container와 공유 가능
- 반대도 사실이지만 Volume의 속성을잡기 나름임 (ex. 읽기 전용)
- 이를 통해 Docker Container의 상태와 관계없이 데이터를 영구적으로 보관
- 호스트 쪽에서 내용을 바꾸면 바로 Docker Container쪽에도 반영됨
- 파일 시스템에서 마운트란?
- 원래 마운트란, 디스크와 같은 물리적인 장치를 파일 시스템의 특정 위치(폴더)에 연결해주는 것을 말함
- ex. 윈도우에서 USB를 꼽으면 내 컴퓨터에 새로운 :D 혹은 :E와 같은 식으로 새로운 폴더가 생김
- 원래 마운트란, 디스크와 같은 물리적인 장치를 파일 시스템의 특정 위치(폴더)에 연결해주는 것을 말함
Docker Volume 타입
- Host Volumes: docker run -v를 실행할 때 페어로 지정
- docker run -v /home/hyangsso/logs:/var/lib/airflow/logs
- :앞이 호스트 파일 시스템 패스고, 뒤가 컨테이너 파일 시스템 패스
- Anonymous Volumes: docker run -v를 실행할 때 컨테이너 패스만 지정 (잘 안 쓰는 방식)
- docker run -v /var/lib/mysql/data
- 호스트 파일 시스템으로 직접 볼 일은 없을 때, docker volume이 알아서 만듦
- 이 방식이 Dockerfile에서 사용되는 방식으로 호스트쪽에서 액세스되지는 않지만 재시작해도 유지됨
- Named Volumes: docker run -v를 실행할 때 이름과 컨테이너 패스를 지정
- docker run -v name:/var/lib/mysql/data
- 호스트 파일 시스템으로 직접 볼 일은 없을 때
- 가장 선호되는 방식, 이 방식이 하나의 Volume을 다수의 컨테이너에서 공유하는 것도 가능하게 해줌
- 이 포맷으로 뒤에서 살펴볼 docker-compose에서도 사용됨
- Volume을 Readonly로 지정하고 싶다면?
- name:/var/lib/mysql/data:ro
이미지 생성시 docker volume 사용법
- Dockerfile
- volume 명령을 통해 anonymous volume만 지정 가능
- docker run할 때 -v를 통해 진행
- docker-compose
- Host Volume이나 Named Volume을 사용하는 것이 일반적
반응형