Docker Volume 왜 그리고 어떻게 쓰나요?
데이터의 지속성을 위해서 도커 볼륨을 쓰고 싶어합니다.
하지만 컨테이너
를 stop
할 때마다 데이터가 사라진다고, 항상 컨테이너를
Running
상태로 두는 건 너무 비효율적 입니다. 갑자기 전원이 나가서 컨테이너
가 꺼지면 모든 데이터가 없어지는 상태가 발생할 수도 있기 때문에 문제 해결이 필요해졌습니다.
저희는 컨테이너
의 가상 파일 시스템
을 Host 컴퓨터
의 파일 시스템
(실제 파일시스템) 과 연결을 하는게 어떨까라는 생각을 하게 됩니다. 이 아이디어로 등장한 것이 도커 볼륨 입니다.
컨테이너에서 사용하던 데이터를 저장하기 위해서 Docker Volume
이 필요합니다.
일반적으로 볼륨을 만드는 명령은 docker run -v
옵션을 줘서 사용합니다.
3가지 타입의 도커볼륨
1. 호스트 볼륨
docker run -v 호스트_디렉토리: 컨테이너_디렉토리
호스트 파일 시스템을 컨테이너에 마운트 하는 방식입니다.
2. Anonymous Volumes
docker run -v 컨테이너_디렉토리
자동으로 생성된 폴더에 대한 참조가 없기 때문에 익명 볼륨이라고 불립니다.
- 익명 볼륨은 컨테이너의 생명주기 동안 유지되며, 컨테이너를 재시작할 때도 유지됩니다.
- 익명 볼륨은 주로 임시 데이터나 캐시 데이터를 저장하는 용도로 사용됩니다.
- 익명 볼륨은 볼륨 이름을 지정하지 않기 때문에 컨테이너의 설정 파일이나 Compose 파일에서 볼륨 이름을 관리할 필요가 없습니다.
3. Named Volumes
docker run -v 이름:컨테이너_디렉토리
세번째는 익명 볼륨을 개선한 것으로 호스트 파일시스템에서 해당 폴더의 이름을 지정하며, 이름을 사용자가 결정합니다. 가장 많이 사용되는 방식입니다.
Named Volumes
은 주로 데이터베이스 파일, 설정 파일, 로그 등 영속적인 데이터를 저장하는 용도로 사용됩니다.
도커 컴포즈 파일 예시
volumes :
-db-data:/var/lib/mysql/data
여기서는 Named Volumes
을 의미하고 앞에 db-data
같은 경우 볼륨의 이름이 되고, /var/lib/mysql/data
는 컴테이너 내부의 경로입니다.
만약 다른 컨테이너 볼륨을 마운트 하고싶더라도, 그렇게 밑에 적어주면 마운트가 됩니다.
이는 호스트의 하나의 볼륨에 여러개의 컨테이너 타입을 지정할 수 있다는 장점이 있습니다. 이런 특징은 컨테이너끼리 데이터를 공유해야하는 경우 상당히 유용합니다!
각자 볼륨을 저장하는 위치
- 윈도우 :
C:\ProgramData\docker\volumes
- 리눅스 :
/var/lib/docker/volumes
- mac : /
var/lib/docker/volumes
다만 맥에서 실제로 이렇게 폴더를 찾아보면 없는 것을 볼 수가 있습니다. 그 이유는 어플리케이션용 도커가 실제로 백그라운드에서 리눅스vm
을 생성하기 때문에 그렇습니다.
따라서 vm에 접속해서 물리 주소를 확인 할 수 있습니다.
그리고 ls /var/lib/docker/volumes/
를 해보면 다음과 볼륨의 실제 저장된 것을 볼 수 있습니다.
Uploaded by N2T
'42Seoul > Inception' 카테고리의 다른 글
best practices for writing Dockerfiles (과제 요구사항) [42 inception 과제 개념12] (2) | 2023.06.24 |
---|---|
컨테이너 빌드에 대한 권장사항 [PID 1] [42 inception 과제 개념11] (0) | 2023.06.24 |
Dockerfiles이란? [42 inception 과제 개념 9] (0) | 2023.06.24 |
docker compose를 사용한 네트워크 [42 inception 과제 개념 8] (0) | 2023.06.24 |
docker compose 명령어 [42 inception 과제 개념 7] (0) | 2023.06.24 |