참고 :
https://www.dltlabs.com/blog/bind-mounts-volumes-indocker-133067
Bind Mounts & Volumes in Docker
We share the fundamentals of Docker and tell you how Bind Mounts and Volumes work.
www.dltlabs.com
볼륨 마운트 가 뭐냐 라고 하면
도커 컨테이너중 하나의 저장 공간을 HOST와 공유 하는 것이다.
그럼 왜쓰냐 ?
1. 도커 컨테이너간에 data 통신 ( HOST에 마운트된 하나의 볼륨 공간을 여러 컨테이너가 바라보고, 저장되는 데이터로 통신 )
2. 도커 컨테이너의 생명 주기랑 관계 없이 데이터를 영구적으로 저장 하고 싶을 때
3. 도커 내부에서 일어나는 log 기록들을 보려면 명령어 치고~ 뭐하고~ 해야 되는데 그럴 때 마운트된 볼륨공간에 저장하면 log 체크하기 편하다.
4. 역으로 HOST에서 data(or code)를 수정하고 마운트된 볼륨공간에 넣은 다음, 그 수정된 data를 도커 컨테이너에 반영 하려고 쓰기도 함. ( 이유 : 코드나 data를 바꿀 때마다 컨테이너지우고~ 이미지지우고~ 이미지굽고~ 컨테이너띄우고~ 디버깅하기 시간이 엄청 오래걸림 불편함 ) <-- 바인드 마운트
도커 볼륨 VS 도커 바인드 마운트
도커 호스트 = 도커 컨테이너를 띄우는 host 를 의미
도커 컨테이너 = 말그대로 host에 띄우는 도커 컨테이너를 의미
|
도커 볼륨 |
도커 바인드 마운트 |
공통점 | 1. 도커 컨테이너의 data 를 저장하기 위한 목적 2. 도커 컨테이너 간의 data 송수신이 가능해짐 |
|
사용 목적성 | Docker 컨테이너나 Docker CLI를 통해서만 액세스 가능한 볼륨이 필요할 때 | 1. Docker 저장소에 대한 추가적인 제어가 필요할 때 2. Docker 이외의 다른 프로세스(또는 도커Host)가 저장소 계층에 액세스 하거나 수정하도록 허용하려는 경우 |
동작 (내느낌) |
1. data 백업용임. ex) A라는 컨테이너를 만들고 'myVolume'이라는 볼륨을 연동 시킨 뒤 "/etc/back_up/abc.py"을 만들어놓고, B라는 컨테이너를 만들고 'myVolume' 을 연동 하면 "/etc/back_up/abc.py" 라는 파일이 로딩됨 |
1. 디렉토리 연동용임. ex) A라는 컨테이너를 만들고 도커Host 의 "/etc/shared_files" 라는 디렉토리에 바인드 마운트를 하고, 도커Host의 "/etc/shared_files" 라는 디렉토리에 파일을 생성 수정 삭제 등등 작업을 하면 A컨테이너에 그대로 업로드가 된다. 반대로 A컨테이너나 컨테이너CLI, 또는 다른 연동된 컨테이너에서 "/etc/shared_files" 디렉토리에 작업을 하면 도커 Host에서도 동일하게 확인할 수 있다. |
이럴 때 사용 |
도커 컨테이너 데이터 보존을 목적으로할 때 도커 컨테이너에 대한 백업본이 필요할 때 도커 컨테이너 끼리 data를 share해야 할 때 |
도커 컨테이너 저장소를 도커 HOST에서 직접 제어해야 할 때 |
Docker 스토리지 확인하는 방법 | 1. "cd /var/lib/docker/volumes/" 내부에서 확인 2. "docker volume ls" 명령어로 확인 |
바인딩된 도커 HOST or Docker 컨테이너 의 디렉토리를 확인하면 된다. |
ps | 나는 바인드 마운트가 좋아 보이는데 볼륨을 쓸 수 있으면 볼륨쓰는 걸 권장한다고 한다. 장점 으로 백업이나 이미그레이션 하기 쉽고, docker API로 볼륨 관리가 가능하고, 리눅스 윈도우 컨테이너 둘다 잘 작동하고, data공유가 더 안전하고, 훨씬 성능이 좋고 이러저러 많다고 함. |
도커 바인드 마운트
1. 도커 HOST 디렉토리랑 도커 컨테이너 디렉토리 끼리 연동 및 생성
docker run -d --name bind-mount -v /home/liam/testroom/docker/binding_mount_ex_1:/app/example nginx:1.16.0
docker run -d --name [이름 ] -v [ 바인딩할 도커 host 디렉토리 경로 ]:[컨테이너 경로] [도커이미지]
하고
2. 작동하는지 확인
도커 HOST 의 "/home/liam/testroom/docker/binding_mount_ex_1" 경로에서 아무 파일이나 만들고
3. 작동하는지 확인
docker exec -it bind-mount /bin/bash
명령어로 들어가서 "/app/example" 경로에 보면 도커 host에서 생성한 파일들이 고대로 들어간거 확인 가능.
4. 작동하는지 확인
반대로 docker CLI 에서 "/app/example" 경로에 파일 만들면,
도커 HOST의 "/home/liam/testroom/docker/binding_mount_ex_1" 경로에 생김
도커 볼륨
1. 도커 볼륨 생성
docker volume create test_volume
2. 도커 볼륨에 컨테이너 연동 및 생성
docker run -d --name volume-container -v test_volume:/app/example nginx:1.16.0
docker run -d --name [컨테이너 이름 ] -v [host경로 ]:[컨테이너경로] [이미지 이름]
3. 작동하는지 확인
docker exec -it volume-container /bin/bash
로 docker CLI 창 들어가서 아무 디렉토리나 들어간다음 touch mkdir 등등 파일 생성하고
4. 작동하는지 확인
docker run -d --name volume-container-2 -v test_volume:/app/example nginx:1.16.0
다른이름의 컨테이너 생성 하면서 같은 Volume 을 연동시켜준다
5. 작동하는지 확인
docker exec -it volume-container-2 /bin/bash
로 docker CLI 창 들어가서 "volume-container" 에서 생성했던 파일들이 똑같이 있는지 확인하면 똑같이 있씀.
ps> 컨테이너를 지워도 volume이 살아 있으면 data는 유지 됨.
'협업툴,가상환경 정리 > docker_정리' 카테고리의 다른 글
docker-compose 예제 정리 (0) | 2022.09.30 |
---|---|
docker compose 설명 (1) | 2022.09.23 |
7_docker 명령어 정리 (전체적으로) (0) | 2022.07.08 |
5_docker 기본 명령어 정리 (이미지 삭제,종료,빌드, 런, 접속까지 + docker network 생성 + 로그확인) (0) | 2022.06.02 |
6_Dockerfile 코드 읽기~ 씡씡씡 (0) | 2022.06.02 |
댓글