본문 바로가기

STUDY/Docker & Kubernetes: 실전 가이드 -2022년판

6. 도커 데이터 관리1: 데이터 종류와 볼륨

데이터의 종류

 

서비스를 운영할 때 사용하는 데이터는 3개로 구분할 수 있다. 먼저 어플리케이션 데이터는 어플리케이션의 소스파일이나 실행파일, 실행을 위해 필요한 패키지 파일, 환경 설정 파일 등 어플리케이션 실행에 필요한 데이터를 말한다. 이러한 데이터들은 빌드할 때 도커 이미지에 포함시키는 것이 일반적이다. 그리고 도커 이미지는 읽기전용이므로 빌드된 이후 변경되지 않는다. 즉 어플리케이션 데이터는 이미지에 읽기전용으로 저장된다.

 

다음으로 임시데이터는 어플리케이션이 실행되는동안만 사용되는 데이터를 말한다. 사용자의 요청을 처리하는 동안 만들어지는 임시 파일을 예로 들 수 있다. 이러한 데이터는 컨테이너의 메모리나 파일시스템에 저장되고 컨테이너가 종료되면 사라진다. 즉 임시데이터는 컨테이너에 저장되고 읽기/쓰기 가능한 데이터이다.

 

마지막으로 영구데이터는 서비스가 제공되는 동안 사용되는 데이터를 말한다. 사용자가 회원정보는 회원가입 요청으로 만들어지고 이는 서비스가 유지되는 동안 사라져서는 안된다. 도커 컨테이너와 상관없이 데이터가 유지되어야하기 때문에 컨테이너 외부의 파일시스템이나 데이터베이스에 저장한다. 즉 컨테이너 외부에 저장되고 유지되는 읽기/쓰기 가능한 데이터이다. 

 

 


 

컨테이너의 파일시스템

 

사용자로부터 피드백을 입력받아서 /temp 폴더에 저장하고, 중복여부를 검사한 후 최종적으로 /feedback 폴더에 저장하는 어플리케이션이 있다. 어플리케이션의 소스와 이를 실행하기 위한 파일들은 어플리케이션 데이터, /temp 폴더에 저장하는 파일은 임시데이터, /feedback 폴더에 저장하는 파일은 영구데이터이다.

 

> docker build -t feedback-app .
> docker run -d --name feedback-app -p 3000:80  --rm feedback-app

feedback-app 이미지를 빌드하고 컨테이너로 실행시킨후, 피드백을 제출한 후 /feedback/{title}.txt로 접속하면 제출했던 피드백을 다시 조회할 수 있다. 제출한 피드백을 /feedback 폴더에 저장했고 /feedback/{title}.txt 경로로 요청이 오면 해당 폴더에 파일을 반환하도록 만들어져있기 때문이다.

 

> docker stop feedback-app .
> docker run -d --name feedback-app -p 3000:80  --rm feedback-app

여기서 feedback-app 컨테이너를 삭제 후 다시 실행하고 동일 /feedback/{title}.txt로 접속하면 "Cannot GET /feedback/{title}.txt"라는 메시지가 나온다. 이전에 제출했던 피드백 파일이 컨테이너를 삭제하고 다시 시작하니까 사라진 것이다. 컨테이너는 자체 파일 시스템을 가지고 동작한다. 그리고 컨테이너가 사라지면 컨테이너의 파일 시스템도 함께 사라진다. 결론적으로 컨테이너에는 영구데이터를 저장하면 안된다. 그렇다면 영구데이터는 어디에 저장해야 할까? 이러한 상황에서는 도커의 볼륨 기능을 사용할 수 있다.

 

 


볼륨이란

 

볼륨은 로컬 환경에 있는 폴더와 도커 컨테이너 내부 폴더를 맵핑하는 기능이다. 즉 데이터는 이미지나 컨테이너가 아니라 도커를 실행하는 로컨 환경에 저장된다. 따라서 이미지나 컨테이너와 상관없이 데이터가 유지될 수 있다.

728x90