Base
- Docker Compose를 활용
- Container <==> Host
- Container
/work/test
에 필요한 파일들이 존재함. - 호스트에는 파일이 없음.
문제
Docker 컨테이너가 실행되면서, 컨테이너 안에있는 특정 폴더의 파일들을 호스트와 공유해야한다.
volume:
- /work/test:/work/test
위 같이 볼륨 바인딩을 해주니, 컨테이너 안의 test
폴더가 빈폴더로 바뀌었다.
해결
Docker Volume 바인딩을 할 때, 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 |