Storage in Docker
쿠버네티스의 스토리지 구조를 알아보기 전, 그 기초를 이루는 도커의 스토리지 구조에 대해 먼저 학습한다.
도커의 스토리지는 2가지로 나뉜다.
Storage Drivers / Volume Drivers
강의에서는 Storage Driver를 다룬다.
docker를 처음 설치하면 설치된 경로는 /var/lib/docker 에 저장된다. 해당 경로 하위 폴더들에 도커의 모든 데이터가 저장된다.
도커는 이미지를 구축할 때, Layered architecture로 구축한다.
dockerfile 내 각 명령어들은 docker이미지에 새 레이어를 생성한다. (FROM Ubuntu = Layer 1)
각 레이어들은 이전 레이어에서의 변경 사항을 저장해나간다. 이러한 구조로 인해, 비슷한 이미지를 다시 구축하게 될 경우에는 이전에 사용했던 레이어를 불러오기 때문에 변경되지 않은 레이어에 대해서는 빌드를 다시 할 필요가 없다.
이러한 방식으로 도커는 이미지 빌드를 더 빠르게 처리하고, 저장 공간을 절약한다.
위 과정을 수행하는 "빌드" 과정은 docker build 명령어를 사용한다. 빌드가 완료되면 레이어의 내용을 수정할 수 없기 때문에 변경하기 위해서는 재빌드(re-build) 과정을 거쳐야 한다.
빌드가 완료된 이미지를 컨테이너에서 실행하는 명령어는 docker run 이다.
명령을 실행하면 도커는 레이어를 기반으로 컨테이너를 생성하고, 이미지 레이어 상단에 Read/Write가 가능한 컨테이너 레이어를 생성한다.
컨테이너 레이어는 컨테이너에 의해 생성된 데이터를 저장한다. ex) 컨테이너 내 app에 의해 생성된 데이터, temp, log 등
해당 컨테이너 레이어는 컨테이너가 살아있는 동안만 유지되며, 컨테이너가 종료되면 데이터와 함께 삭제된다.
도커의 Layered architecture에서 가장 중요한 점은, 동일한 명령줄로 생성된 레이어는 모든 컨테이너가 공유한다는 점이다.
컨테이너를 실행한 뒤, 이미지 레이어의 소스코드를 수정하면 컨테이너는 수정된 소스 파일을 저장하기 전에 컨테이너 레이어에 파일 복사본(temp.txt)를 생성하고 파일을 수정한다.
이미지 레이어는 Read Only로, 읽어올 수만 있고 쓰기는 불가능하기 때문에 위와같이 컨테이너 레이어에서 진행하게 된다. 따라서 이미지는 이미지 재구축을 진행하지 않는 한 내용물이 바뀌지 않는다.
컨테이너를 삭제하면 컨테이너 레이어의 데이터도 모두 삭제되므로, 데이터를 영구적으로 저장하고 싶다면 영구 볼륨을 별도로 추가하면 된다.
docker volume create #볼륨 생성 명령어
위 명령어 실행 시 /var/lib/docker/volumes 폴더에 볼륨을 생성한다.
docker run -v [볼륨명]:[컨테이너 경로]
이어서 위 명령어를 통해 생성한 볼륨과 컨테이너를 마운트한다.
만일, 기본 경로가 아닌 외부 저장소에 데이터를 저장하고 싶다면 [외부 저장소 경로]:[컨테이너 경로] 로 지정하면 가능하다.
마운트 방식은 두 종류로 나뉜다.
바인드 마운팅 : 컨테이너를 생성하고 컨테이너에 폴더 마운트
볼륨 마운팅 : 볼륨 디렉토리에서 볼륨 마운트
자세한 설명은 외부 다른 블로그의 링크를 첨부
Docker 컨테이너에 데이터 저장 (볼륨/바인드 마운트) | Engineering Blog by Dale Seo
스토리지 드라이버는 Layered Architecture를 유지하고 레이어를 생성하며, 파일 복사 및 쓰기를 가능하게 한다.
스토리지 드라이버는 다양한 방식이 있으며, OS 를 따라간다. ex) Ubuntu - AUFS
여기서 도커는 OS에 맞춰 스토리지 드라이버를 자동으로 선택한다.
Volume Driver Plugins in Docker
스토리지 드라이버는 이미지, 컨테이너 저장소의 관리를 위한 드라이버다. 이 스토리지를 유지하려면 볼륨을 생성해야 한다.
하지만, 볼륨은 스토리지 드라이버가 처리하지 않는다. 볼륨은 볼륨 드라이버 Plugin으로 처리된다. default Plugin은 Local이다.
default Plugin은 데이터를 기본 경로인 /var/lib/docker/volumes 에 저장한다.
또한, 다른 솔루션들이 볼륨을 활용할 수 있도록 다양한 볼륨 드라이버 플러그인을 제공한다.
위와 같은 상황에서 docker run 명령어를 실행하면 AWS EBS(Block Storage) 에서 볼륨을 생성하기 위해 특정 볼륨 드라이버를 선택할 수 있도록 지정할 수 있다. 이렇게 진행하면 컨테이너 생성 후 AWS EBS의 볼륨 드라이버를 지원하기 때문에 추가 스토리지를 할당할 수 있다. 따라서 컨테이너가 파괴되어도 데이터는 EBS에 저장된다.
'IT > CKA' 카테고리의 다른 글
CKA 준비과정 - Storage (3) / Storage Class (0) | 2023.07.05 |
---|---|
CKA 준비과정 - Storage (2) / CSI, Volume (0) | 2023.07.02 |
CKA 준비과정 - Security (9) / Network Policy (0) | 2023.06.27 |
CKA 준비과정 - Security (8) / Security in Docker, Security Contexts (0) | 2023.06.27 |
CKA 준비과정 - Security (7) / Service Accounts, Image Security (0) | 2023.06.26 |