강좌 & 팁
지난 글에서 docker 팁을 썼는데, 그 중 volume container에 대해서 너무 가볍게 다루고 넘어간 듯 하여 이 글에서 좀 더 상세하게 다뤄보도록 하겠습니다.
Docker의 container가 실행중에 파일을 저장할 수 있는 곳은 3군데입니다.
1. 실행중인 container 내부 directory
2. -v 옵션으로 연결된 host의 directory
3. --volumes-from 옵션으로 연결된 다른 container의 VOLUME 설정이 되어있는 directory
이전 글에서도 언급했듯이, 1번은 임시파일을 저장하는 용도로 사용하는 것이 좋습니다.
Docker의 container는 원칙적으로는 하나의 process를 실행합니다.
따라서 실행중인 container에 있는 파일을 host로 빼내는 것은 쉬운일이 아닙니다.
가능한 방법은 docker export 명령으로 container에 있는 모든 파일들을 tar로 뽑아낼 수 있습니다.
그렇게 뽑아낸 tar에서 원하는 파일만 추출해내는 방법이 있습니다.
하지만 반대로 host에 있는 파일을 실행 중인 container로 넣는 것은 제가 아는 바로는 방법이 없습니다.
즉, 백업은 가능하지만 복구가 불가능합니다.
두번째 방법은 작업의 편의성에서 본다면 최고의 옵션입니다.
호스트의 특정 폴더를 container로 mount하여 작업을 하면 여러모로 편한 점이 많습니다.
하지만, docker는 호스트에서 독립된, 고립된 환경을 갖추고자 사용하는 툴인데, 이렇게 호스트와 다시 의존성이 생긴다면 모순이라고 생각합니다. 물론 저도 image를 완성해나갈 때는 이 방법을 사용합니다만, 실제 서비스를 돌릴 때는 세번째 방법을 사용합니다.
세번째 방법이 가장 추천되는 방법입니다.
이전 글에서도 언급을 했다시피 --volumes-from으로 volume container를 연결해서 사용하게 되면 현재 실행중인 container는 그대로 둔 상태에서 또 다른 container를 수행하여 volume container를 연결할 수 있습니다.
보통은 busybox를 사용하여 volume container를 --volumes-from 옵션으로 연결하고, -v 옵션으로 host의 특정 폴더를 mount해서 tar로 필요한 파일들을 추출합니다. 반대로 복구할 때는 host의 특정 폴더에 있는 tar를 volume container에 있는 특정 폴더로 압축을 풀 수 있습니다.
즉, 백업과 복구 모두 쉽게 가능하다는 것이죠. 게다가 이런식의 구성은 호스트와의 관련성도 전혀 없는 상태가 됩니다.