볼륨 마운트에서 해당 영역을 직접적으로 확인하려면 (1) 별개의 리눅스 컨테이너를 연결하여 파일 시스템을 확인, (2) 새로운 컨테이너에 연결하여 동기화되는지 확인 하는 방법이 있다.
볼륨 마운트는 컨테이너를 거치지 않으면 볼륨 안의 내용을 볼 수 없다. 따라서 앞서 실습에서는 docker inspect [컨테이너명]
으로 간접적으로 확인했다.
하지만 컨테이너에 볼륨이 제대로 연결되어 파일 읽기/쓰기가 되는지 확인하는 직접적인 방법이 존재한다. 여기에서는 볼륨 마운트를 확인하는 직접적인 두 가지 방법 을 소개한다.
볼륨을 마운트한 워드프레스 컨테이가 있다고 해보자. 워드프레스에서 데이터를 수정하면 볼륨에 새로운 이미지 파일이 저장 될 것이다. 해당 볼륨을 리눅스 컨테이너(가벼운 busybox)에 마운트 하면, 볼륨의 내용을 리눅스 파일 시스템에서 확인이 가능 하다.
기존에 볼륨과 연결된 컨테이너에서 작업을 수행하면 볼륨에 반영 될 것이다. 이후 컨테니어를 삭제하고 동일한 볼륨을 새로운 컨테이너에 마운트 하면 새로운 컨테이너도 기존 작업이 반영된 상태로 나타날 것 이다.
볼륨 백업은 별개의 리눅스 컨테이너에 볼륨 내용을 압축해 저장하는 방식 을 사용한다.
호스트의 폴더는 복사/붙여넣기로 간단히 백업이 가능하다. 이와 다르게 볼륨은 간단히 복사/붙여넣기가 불가 하다. 볼륨 백업 은 볼륨을 확인할 때처럼 별도의 리눅스 컨테이너를 연결해 볼륨의 내용을 압축해 저장하는 방식 으로 수행한다. 단, 주의할 점 은 컨테이너 생성과 함께 tar 명령어로 백업을 수행 한다는 점이다.
볼륨 백업은 다음의 명령어로 수행할 수 있다. 이 때 볼륨을 사용하는 주 컨테이너는 정지 또는 삭제된 상태여야 한다.
docker run --rm -v 볼륨명:/source -v 백업_저장_폴더명:/target busybox \
tar cvzf /sake/백업파일이름.tar.gz -C /source .
해당 명령어의 옵션은 하기의 기능을 수행한다.
옵션 | 설정값 | 역할 |
---|---|---|
--rm | 컨테이너를 수행한 후 바로 삭제 | |
-v | 볼륨명:/source | 백업할 볼륨을 busybox 컨테이너 "/source"에 마운트 |
-v | 백업_저장_폴더명:/target | 호스트의 폴더를 busybox 컨테이너 "/target"에 마운트 |
tar | cvzf /target/백업파일명.tar.gz -C /source . | "/source"를 압축하여 "/target/백업파일명.tar.gz"로 저장 (cvzf, -C는 압축 옵션) |
실제 apa000vol1 이름을 가진 볼륨을 호스트 경로에 저장하는 명령은 다음과 같다.
root@LAPTOP-3H85AI8N:/# docker run --rm -v apa000vol1:/source -v /home/jpark:/target busybox tar cvzf /target/backup_apa.tar.gz -C /source .
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
325d69979d33: Pull complete
Digest: sha256:560af6915bfc8d7630e50e212e08242d37b63bd5c1ccf9bd4acccf116e262d5b
Status: Downloaded newer image for busybox:latest
./
./index.html
root@LAPTOP-3H85AI8N:/# ls home/jpark/
backup_apa.tar.gz fast-venv fastapi-data-science
ls 명령어 로 확인하면 바인드 마운트한 호스트 경로에 압축한 파일이 생성된 것을 확인 할 수 있다. 실습한 후, 저장된 압축 파일과 볼륨을 제거하자.