-
Docker (6) - 도커 볼륨Infra/Docker 2024. 1. 25. 17:02
1. 볼륨의 기초 개념
- 컨테이너는 기본적으로 stateless (상태없음)이다. 컨테이너가 실행 된 후 발생하는 모든 변경 사항은 컨테이너 레이어에 만 있다 -> 컨테이너가 종료되면 변경 사항이 모두 사라진다.
- 컨테이너는 Stateless하기 때문에 쉽게 개수를 증가시킬 수 있으며, 다른 환경에서도 빠르게 배포할 수 있습니다.
- 소프트웨어의 버전 등 컨테이너의 상태 변경이 필요한 경우 새로운 버전의 이미지를 만들어서 배포합니다.
- 클라우드 네이트브 환경에서는 MSA 아키텍처에 따라 서버의 개수가 매우 많아집니다.
- 모던 애플리케이션의 요구사항을 충족시키기 위해 서버 관리 방법론이 변화했습니다.
- 전통적인 서버 방법론은 서버 한대를 중요하게 생각하는 Pet 방식입니다.
- 컨테이너를 활용한 서버 방법론은 Cattle 방식입니다. 서버를 빠르게 교체할 수 있으며, 서버의 상태를 최대한 제거합니다.
-> 컨테이너의 이미지는 한번 지정된 후 변경x -> 이러한 특징으로 새로운 컨테이너로 쉽게 대체됨
-> 데이터를 영구적으로 저장하기 위해서는 데이터베이스 서버 사용이 필수이다.
따라서 상태가 없는 컨테이너에 이러한 데이터를 저장해선 안되고, 저장 및 공유가 필요한 데이터는
반드시 외부에 저장해야한다.
-> 도커의 볼륨을 이용하면 위와 같은 중요 데이터를 컨테이너 외부에 저장할 수 있다.
* 사용자 세션 정보나 캐시 정보는 캐시 서버 혹은 쿠기를 통해 관리하자 (파일 메모리 저장x)
동일한 요청은 항상 동일한 결과를 제공해야한다 (컨테이너의 상태 없음으로 충족시킬 수 있다)
환경 변수나 구성 파일을 통해 설정을 외부에서 주입할 수 있어야한다. ( 컨테이너 실행시 -e 옵션을 통해 가능하다)
2. 도커 볼륨 사용
- 컨테이너 환경에서는 같은 서버의 대수가 여러 개존재한다.
- 각 컨테이너에는 저장 및 공유가 필요한 파일을 저장해선 안되니 외부 저장 공간을 컨테이너 특정 경로에 연결해서
사용할 수 있다 (이를 마운트 한다고 한다)
- 외부 저장 공간은 물리적으로 연결하거나, 네트워크에 연결할 수 있습니다.
- 컨테이너 실행 시 볼륨을 컨테이너의 내부 경로에 마운트 할 수 있습니다 (usb를 꽂는다고 생각해보십시오!)
docker run -v volume1:/var/lib/postgresql/data {볼륨명} {컨테이너 내부 경로}
- 컨테이너가 종료되어도 볼륨은 삭제되지 않습니다.
- 다른 컨테이너를 실행할 때 동일한 볼륨에 마운트하면, 똑같이 데이터를 받을 수 있습니다.
dorcker run -v volume1:/etc/postgresql -v volume2:/var/lib/postgresql/data
- 여러 개의 컨테이너가 하나의 볼륨을 공유할 수 있습니다.
- 실제로 호스트에 볼륨이 생성되는 경로는 윈도우에 경우 찾기 힘들지만, 리눅스에 경우 접근할 수 있습니다.
- 바인드 마운트를 통해 볼륨이 아닌, 외부 디렉토리를 지정할 수 있습니다.
참조자료:
'Infra > Docker' 카테고리의 다른 글
Docker (5) - 도커 네트워크 (0) 2024.01.25 Docker (3) - 이미지 빌드 (0) 2024.01.24 Docker(4) - 레지스트리 (0) 2024.01.24 Docker (2) - 이미지와 컨테이너 (0) 2024.01.24 Docker (1) - 가상화 기술 (0) 2024.01.24