728x90
개요
저번 포스팅에서 익명 볼륨의 진짜 가치인 호스트에서 오는 파일로부터 보호하는 역할에 대해서 알아봤습니다.
이러한 보호가 가능한 이유는 Docker의 마운트 우선순위 때문입니다. 특히 Dockerfile의 VOLUME 지시어로 정의된 익명 볼륨은 바인드 마운트보다 우선순위가 높아 해당 경로가 덮어써지는 것을 방지할 수 있습니다.
본 글에서는 이러한 Docker의 마운트 우선순위 체계에 대해 자세히 알아보겠습니다.
Docker의 마운트 우선순위
- Bind Mount (명시적으로 호스트 경로 지정)
- Named Volume (이름이 있는 볼륨)
- Anonymous Volume (익명 볼륨)
하지만 Dockerfile에서 VOLUME으로 지정된 경로는 예외입니다.
- Dockerfile에서 VOLUME 지시어로 지정된 익명 볼륨은 특별 대우를 받아 Bind Mount보다 우선순위가 높아집니다.
FROM gradle:7.4.2-jdk17
WORKDIR /app
COPY build.gradle settings.gradle ./
VOLUME ["/app/.gradle"] # .gradle 캐시 디렉토리를 익명 볼륨으로 지정
VOLUME ["/app/build"] # build 디렉토리도 익명 볼륨으로 지정
COPY . .
docker run -v $(pwd):/app myapp
위와 같은 Dockerfile을 실행한다면,
VOLUME ["/app/.gradle"] # Dockerfile에서 지정된 익명 볼륨
이렇게 지정된 경로는 -v $(pwd):/app과 같은 바인드 마운트보다 우선순위가 높아져서 덮어쓰기가 방지됩니다.
- /app 전체는 호스트 디렉토리로 바인드 마운트
- 하지만 /app/.gradle은 Dockerfile에서 VOLUME으로 지정되어 있어서
- 이 특정 경로만큼은
호스트의 파일로 덮어쓰이지 않음
이것이 익명 볼륨을 통해 특정 경로를 "보호"할 수 있는 기술적인 이유입니다.
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2025.01.12 - ${PWD}와 $(pwd) 차이점 알아보기 (0) | 2025.01.12 |
---|---|
[TIL, 일일 회고] 2025.01.11 - Docker에서 ${PWD}를 활용한 경로 단순화 방법 (0) | 2025.01.11 |
[TIL, 일일 회고] 2025.01.09 - 익명 볼륨의 진짜 가치: 임시 저장소를 넘어선 특정 경로 보호 역할 (0) | 2025.01.09 |
[TIL, 일일 회고] 2025.01.07 - 헷갈리는 -v 옵션 정리하기: 바인드 마운트와 명명된 볼륨 (0) | 2025.01.07 |
[TIL, 일일 회고] 2025.01.06 - 익명 볼륨의 함정: --rm 옵션 없이 사용할 때 주의사항 (0) | 2025.01.06 |