컨테이너 상태와 마운트
컨테이너는 Stateless다.
컨테이너는 상태를 가지지 않는 stateless 특성을 가진다.
즉, 모든 상태는 이미지에 저장되기 때문에 변경사항들은 전부 새로운 이미지로 생성해야 한다.서버를 관리하는 Pet & Cattle 방식
Pet방식(VM)은 서버 내부에 상태를 저장하며, 서버의 교체가 어려우므로 문제 발생 시 복구를 시도한다.
Cattle방식(컨테이너)은 서버 상태를 저장하지 않으며, 문제 발생 시 삭제 후 새로 생성한다.컨테이너의 Stateless 특징
- 컨테이너의 이미지는 한번 지정된 후 변경되지 않는다.(불변성)
- 컨테이너는 어떤 호스트에서든 컨테이너를 실행할 수 있다.
- 동일한 컨테이너를 여러개 쉽게 생성해서 트래픽에 대처할 수 있다.
- 컨테이너는 언제든지 새로운 컨테이너로 지정할 수 있다.
- 데이터를 영구적으로 저장하기 위해서는, 외부의 데이터베이스 서버를 사용해야 한다.
- 사용자 세션 정보나, 캐시같은 정보를 캐시 서버나 쿠키를 통해 관리해야 한다.
- 동일한 요청은 항상 동일한 결과를 제공해야 한다.
- 환경 변수나 구성 파일로 설정을 외부에서 주입할 수 있어야 한다.
도커의 볼륨
컨테이너의 영속성
컨테이너는 Stateless환경이기 때문에 재생성되면 데이터가 모두 삭제되므로, 영속성이 필요한 데이터를 로드밸런싱 해둔 컨테이너들끼리 공유하며, 저장할 공간이 필요하다.
이런 공유 공간에 데이터를 저장하는 것을, 컨테이너의 폴더를 볼륨에 마운트한다고 말한다.마운트란?
컴퓨터의 특정 디렉토리를 외부 저장소(볼륨)와 연결하는 것
즉, 한 이미지로 여러 컨테이너를 띄우고 한개의 볼륨에 마운트하면, 영속적인 데이터를 저장하고 불러올 수 있다.docker run -v {볼륨명}:{컨테이너 내부 경로}
볼륨은 여러 컨테이너에서 공유하는 한 경로를 마운트하여 사용할 수 있다.
docker volume ls docker volume inpect 볼륨명 docker volume create 볼륨명 docker volume rm 볼륨명