Docker Volume (호스트 볼륨 공유)
- 컨테이너 데이터를 호스트 디스크에 저장하기
· Version : Docker
Docker 이미지로 컨테이너를 생성하면 이미지는 읽기 전용이 되며 컨테이너의 변경된 부분만 별도로 저장해서 컨테이너의 정보를 보존한다. 컨테이너에 저장된 데이터는 컨테이너가 삭제되면 데이터가 함께 삭제된다. 이러한 문제를 해결하기 위해서 데이터를 영속적(Persistent)로 저장하는 방법에는 몇 가지가 있으며 이번 포스트에서는 볼륨(Volume)에 대해서 살펴본다.
볼륨은 Docker 컨테이너에 의해 생성되고 Docker컨테이너에 의해 사용되는 데이터를 유지하는 기본 메커니즘이다. 바인드 마운트는 호스트 시스템의 디렉터리 구조에 따라 다르지만 Volume은 Docker에 의해 완벽하게 관리된다. 볼륨에는 바인드 마운트에 비해 몇 가지 장점이 있다.
· 바인드 마운트보다 볼륨을 백업하거나 마이그레이션 하는 것이 더 쉽다.
· Docker CLI 명령 또는 Docker API를 사용하여 볼륨을 관리할 수 있다.
· 볼륨은 Linux 및 Windows컨테이너에서 작동한다.
· 볼륨은 여러 컨테이너간에 안전하게 공유할 수 있다.
· 볼륨 드라이버를 사용하면 원격 호스트 또는 클라우드 공급자에 볼륨을 저장하고 볼륨 내용을 암호화하거나 다른 기능을 추가할 수 있다.
· 새 볼륨은 컨테이너에 의해 미리 채워진 내용을 가질 수 있다.
호스트 볼륨을 공유하는 방법은 컨테이너를 생성할 때 -v 옵션을 사용하여 호스트의 디렉터리와 컨테이너 디렉터리를 공유한다. 아래 예제는 호스트의 myvol2볼륨을 컨테이너의 /app에 마운트 한다.
docker run -d --name devtest -v myvol2:/app nginx:latest |
만약 마운트 하려는 볼륨이 호스트에 존재하지 않으면 호스트에 해당 디렉터리가 생성되면서 컨테이너와 공유 된다(컨테이너의 파일이 호스트로 복사됨). 이렇게 -v 옵션으로 공유된 디렉터리는 컨테이너가 삭제되더라도 호스트의 디렉터리는 삭제되지 않기 때문에 데이터를 보전할 수 있다. 볼륨 공유는 디렉터리 단위 뿐만 아니라 파일 단위의 공유도 가능하며 여러 개의 -v 옵션을 사용하여 동시에 여러 볼륨 공유도 가능하다.
만약 호스트에 이미 디렉터리가 존재하고 컨테이너에도 존재할 때 두 디렉터리를 공유하면 어떻게 될까? 결과적으로는 컨테이너의 파일이 삭제되고 호스트의 파일이 공유된다. 즉, 컨테이너의 디렉터리 자체가 덮어 써지는 것이다. (호스트의 디렉터리가 컨테이너의 디렉터리에 마운트 되는 방식이다.)
아래 실습은 MAC에 설치된 Docker 환경에서 Volume을 공유하는 예시이다. 우선 볼륨을 공유하기 전에 Docker 속성에서 호스트(MAC)의 디렉터리가 공유되어 있는지 확인한다. 호스트의 디렉터리가 아래 Docker 환경에 공유되어 있지 않으면 사용할 수 없다.
필자의 경우 이미 다운로드 받은 이미지를 컨테이너로 실행하면서 볼륨을 공유하였다.
docker run --name friendlyhello -v /tmp/sharetest:/var/sharetest sqlmvp/get-started:part2 |
호스트(MAC)의 /tmp 하위에는 sharetest라는 디레겉리가 존재하지 않았지만 컨테이너가 실행되면서 해당 디렉터리가 생성되었다.
컨테이너의 디렉터리를 조회하면 호스트의 sharetest 디렉터리가 공유된 것을 확인할 수 있으며 호스트의 파일이 조회되는 것을 확인할 수 있다.
호스트에서 볼륨을 확인하려면 아래 명령을 실행한다. 볼륨 이름을 지정하지 않으면 무작위의 16진수 형태로 생성된다.
docker volume ls |
위에서도 언급하였지만 컨테이너를 삭제한다고 해서 호스트의 볼륨이 삭제되지는 않는다. 따라서 불필요한 볼룸은 호스트에서 수동으로 삭제해주어야 한다. 아래 스크립트는 특정 볼룸을 삭제 한다.
docker volume rm myvol2 |
아래 스크립트는 모든 볼륨을 삭제 한다.
docker volume prune |
[참고자료]
https://docs.docker.com/storage/volumes/
2019-01-23 / Sungwook Kang / http://sqlmvp.kr
Docker, docker volume, 도커 볼륨, 도커 명령어, 도커 파일 공유, 도커 호스트 디렉터리 공유
'SW Engineering > DevOps, SRE' 카테고리의 다른 글
Docker Volume (도커 볼륨)-도커 볼륨을 이용해서 데이터 공유하기 (0) | 2019.03.26 |
---|---|
Docker Volume (컨테이너 볼륨 공유)-컨테이너 볼륨을 다른 컨테이너와 공유하기 (0) | 2019.03.26 |
Docker Command Basic (도커 기본 명령어) (0) | 2019.03.26 |
Docker Deploy (0) | 2019.03.26 |
Docker Stack (0) | 2019.03.26 |