일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- amazon ecs
- 도커 주의사항
- ssh
- MAPF
- 청첩장 모임
- 신혼 여행
- study
- leetcode
- 생성 패턴
- DevOps
- AWS 비용 절감
- terraform
- 실용주의 프로그래머
- 지표
- PostgreSQL
- 구조 패턴
- docker
- 논문 정리
- AWS
- 오블완
- Rust
- 디자인 패턴
- github
- 경로 계획 알고리즘
- Monthly Checklist
- Go-lang
- Playwright
- 티스토리챌린지
- Til
- 14일 공부
- Today
- Total
밤 늦게까지 여는 카페
도커 Storage 공부하기 - Storage Driver, Volume, Bind mount 본문
1. Storage Driver
도커 컨테이너 내에서 생성되는 파일들은 기본적으로 storage driver에 의해서 관리되며 컨테이너가 삭제되면 함께 삭제됩니다.
linux를 사용하고 있고 storage driver를 따로 지정해주지 않았다면 높은 확률로 overlay2 드라이버를 사용하게 됩니다.
- 도커 사용하시다보면 /var/lib/docker/overlay2 디렉토리가 생성되었던 이유입니다.
- 참고
컨테이너 데이터가 실제로 저장되는 위치
/var/lib/docker/overlay2 디렉토리 내부에 있는 데이터들은 컨테이너들의 데이터입니다.
- 사용자가 직접적으로 /var/lib/docker/overlay2 내부의 파일을 수정하는 것을 권장하지 않고 있습니다.
docker inspect 명령어를 이용해서 컨테이너의 데이터가 어떤 디렉토리에 저장되고 있는지도 확인할 수 있습니다.
2. Volume
도커 volume은 컨테이너의 데이터를 영속적으로 저장할 때 사용합니다.
- 영속적이라고 설명했는데 간단하게 컨테이너가 삭제되도 컨테이너 데이터를 남기고 싶을 때 사용하는 것입니다.
도커에서 관리하는 스토리지로 1)도커 컨테이너를 다양한 플랫폼에서 실행해야 할때, 2)도커 컨테이너 간 파일 공유가 필요할 때 사용하기 좋습니다.
2.1. 도커 Volume 사용 예시
1. docker volume을 생성하고, 도커 컨테이너를 실행할 때 docker volume을 마운트합니다.
- docker run 명령어에 --rm 옵션을 추가하면 컨테이너가 종료될 때 자동으로 삭제됩니다.
2. 컨테이너 데이터를 docker volume을 mount 한 곳에 저장하면 1에서 생성한 docker volume에 저장됩니다.
3. 다른 컨테이너를 실행할 때 1에서 생성한 docker volume을 마운트하면 2에서 생성된 파일을 공유할 수 있습니다.
2.2. bind mount
사실 저는 volume 보다는 bind mount를 많이 사용했습니다.
bind mount도 volume과 사용법이 거의 동일하지만 호스트 머신에서 데이터에 직접 접근할 수 있다는 점에서 더 편리합니다.
1. 도커 컨테이너를 실행할 때 volume을 마운트하면 호스트 머신에도 디렉토리가 생성됩니다.
2. 컨테이너 데이터를 bind mount 한 곳에 저장하면 호스트 머신에서도 해당 데이터에 접근이 가능합니다.
3. 호스트 머신에서도 해당 데이터에 접근이 가능하고 컨테이너가 삭제된 다음에도 데이터가 남아 있습니다.
P.S. 도커 컨테이너에 데이터가 추가되면 용량이 2배로 늘어난다?
도커 컨테이너에 1GB짜리 디렉토리를 추가했는데
du 명령어로 확인해보니 /var/lib/docker/overlay2에서 용량이 2배로 증가했습니다.
이게 어떻게 된 것일까요?
문제는 du가 overlayFS의 특성을 고려하지 않고 용량을 계산하기 때문에 발생한 것이었습니다.
merged 디렉토리의 경우 데이터베이스의 뷰처럼 실제로 디스크의 용량을 차지하고 있지 않은데도 불구하고
du가 merged 디렉토리의 용량을 upperdir, lowerdir의 용량의 합계로 계산하고 있던 것입니다.
아쉬운 점은 /var/lib/docker 디렉토리의 용량 계산이 잘못 되고 있었던 원인은 알아냈지만 정확히 계산하는 방법은 알아내지 못했다는 것입니다.
혹시 방법을 아시는 분은 공유 부탁드립니다!
'유용한 툴 > docker' 카테고리의 다른 글
[도커 사용 시 주의사항 #2] 도커 dangling image 관리 (2) | 2025.03.30 |
---|---|
[도커 사용 시 주의사항 #1] 로그 드라이버 설정하기 - 로그 용량이 터지지 않도록 주의하세요! (0) | 2025.03.29 |
도커 이미지 태그에는 '/'가 못 들어간다는 것 알고 있으셨나요? (2) | 2025.01.14 |
도커 이미지 멀티 스테이지 빌드 - 도커 이미지 용량 최적화가 필요하신가요? (0) | 2024.10.13 |
도커 명령어 실행 에러 - Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? (2) | 2023.01.12 |