본문 바로가기

Tech/Docker

docker volume 파일 우선순위

Base

  • Docker Compose를 활용
  • Container <==> Host
  • Container /work/test에 필요한 파일들이 존재함.
  • 호스트에는 파일이 없음.

문제

Docker 컨테이너가 실행되면서, 컨테이너 안에있는 특정 폴더의 파일들을 호스트와 공유해야한다.

volume:
    - /work/test:/work/test

위 같이 볼륨 바인딩을 해주니, 컨테이너 안의 test폴더가 빈폴더로 바뀌었다.


해결

Docker Volume 바인딩을 할 때, 2가지의 방법

  1. 호스트의 폴더에 바로 매핑하는 방법
  2. docker volume을 생성해 놓은 후, 매핑하는 방법

 

1번의 경우는 문제에서 사용했던 방식이다.

<호스트에서 볼륨 매핑에 사용할 디렉토리>: <컨테이너 내 파일이 존재하는 디렉토리>

이렇게 했을 때, 볼륨 매핑되면서 덮어씌우는 디렉토리는 기준은 <호스트...>가 우선권을 가진다.

즉, 호스트의 디렉토리는 빈 디렉토리임으로, 컨테이너의 매핑 대상 디렉토리가 빈 디렉토리로 덮어씌워진다는 것이다.

 

 

 

2번의 경우

container01:
  ...
  volume:
    - test-volume:/work/test

volumes:
  test-volume:
    driver: local

위 같은 방법으로 docker 내 볼륨 매핑에 사용할 볼륨을 미리 생성해놓고 컨테이너와 매핑하는 방법이다.

이렇게 볼륨을 생성했을 시, test-volume의 경로는 호스트의 /var/lib/docker/volumes에 생성된다.

이 방법은 1번과 다른 특징을 가진다.

1번의 경우 호스트가 빈 폴더일 경우, 컨테이너도 빈 폴더로 매핑되는 현상이 있었다.

하지만 2번의 경우 호스트의 test-volume이 비어있고, 컨테이너 내 매핑 대상 디렉토리에 파일들이 존재할 때,

볼륨을 매핑하게 되면, 호스트, 컨테이너 둘다 컨테이너에 있던 파일들이 존재하는 것을 확인 할 수 있다.

다만 주의해야할 점은, 호스트, 컨테이너 둘다 파일이 존재하는 상태에서 볼륨 매핑을 하게 되면,

1번, 2번 둘다 호스트를 우선적으로 파일을 덮어씌우게 된다.

반응형

'Tech > Docker' 카테고리의 다른 글

[Docker]docker compose Extension fields  (0) 2022.03.08
docker 정의 정리  (0) 2021.02.18