(도커) 도커 볼륨
개발자를 위한 쉬운 도커 (데브위키)
`
컨테이너의 상태
Stateless
- 컨테이너는 상태가 없다는 것이 징이다.
- 하나의 이미지로 컨테이너가 2개 생성되고, 각 읽기/쓰기 레이어가 생성된다.
- 컨테이너2가 삭제되면 컨테이너2의 읽기/쓰기 레이어도 삭제된다.
- 컨테이너1을 업데이트하면 컨테이너1의 읽기/쓰기 레이어가 삭제된 후에 새로운 컨테이너1의 읽기/쓰기 레이어가 생성한다. 이렇게 컨테이너는 stateless 특징을 유지한다.
- 컨테이너가 실행된 후 발생하는 모든 변경 사항은 컨테이너 레이어에 존재하고, 컨테이너가 종료 되면 변경 사항이 모두 삭제된다.
- Stateless 특징으로 인해 컨테이너의 개수를 쉽게 증가시킬 수 있고, 다른 환경에 빠른 배포가 가능하다.
- 컨테이너의 상태 변경이 필요한 경우에는 새로운 버전의 이미지를 새로 만들어서 배포한다.
- 기존 이미지는 변경하지 않고, 변경 사항을 적용한 새로운 버전의 이미지를 재작하여 재배포한다.
- 컨테이너는 상태가 없기 때문에 같은 상태의 컨테이너를 여러 곳에 빠르게 배포할 수 있다.
- 위 그림과 같이 개발 환경, 테스트 환경, 운영환경에 같은 상태의 컨테이너를 배포할 수 있다.
Pet & Cattle
- Pet 방식 : 전통적인 서버 방법론으로 서버 한대를 중요하게 생각하고, 서버에 장애가 발생시 서버를 복구 시도하고, 문제 해결하려 한다.
- Cattle 방식 : 현대의 서버 방법론으로 컨테이너를 활용한다. 서버를 빠르게 교체할 수 있고, 서버의 상태를 최대한 제거한다. 만약 컨테이너에 장애가 발생 시 삭제 후 새로 생성한다.
컨테이너의 Stateless 특징 및 제약
- 특징
- 컨테이너의 이미지는 한번 만들어지면 변경되지 않는다.
- 컨테이너는 언제든지 새로운 컨테이너로 대체할 수 있다.
- 컨테이너는 어떤 호스트에서든 컨테이너를 실행할 수 있다.
- 컨테이너는 동일한 컨테이너를 여러개 쉽게 생성해서 트래픽에 대응할 수 있다.
- 장애가 발생한 경우 새로운 컨테이너를 빠르게 시작할 수 있다.
- 제약
- 컨테이너는 상태가 없기 때문에 저장 및 공유가 필요한 데이터는 반드시 외부에 저장해야한다.
- 사용자 정보는 파일이나 메모리가 아닌 캐시 서버나 쿠키를 통해 관리해야한다.
- 동일한 요청은 항상 동일한 결과를 제공해야한다.
- 환경 변수, 구성 파일을 통해 설정을 외부에서 주입하여 다양한 환경에서 컨테이너 이미지를 활용할 수 있어야한다.
스토리지
컨테이너의 영속성
- 컨테이너가 삭제되거나 업데이트될 경우 컨테이너 레이어는 초기화된다.
- 컨테이너 환경에서는 여러 서버가 여러 컨테이너로 관리되어 트래픽 증가에 대비할 수 있다.
- 마운트 : 외부 저장 공간을 특정 경로에 연결할 수 있도록 해준다. 외부 저장 공간은 물리적으로 연결하거나, 네트워크에 연결할 수 있다.
- 컨테이너의 특정 디렉토리에 볼륨을 마운트해서 사용한다.
도커 볼륨
- 컨테이너를 여러 개 두어 여러 서버를 관리하고 로드 밸런싱을 통해 트래픽을 관리한다.
- 마운트를 통해 도커 볼륨에 데이터를 저장한다.
dorker run -v volume1:/var/lib/postgresql/data
: 컨테이너 실행(run) 시 볼륨(volume)을 컨테이너의 내부 경로(/var/lib/postgresql/data)에 마운트할 수 있다.- 컨테이너가 삭제되어도 볼륨은 남아있다.
- 컨테이너 실행 시 다시 마운트 할 수 있다.
- 하나의 컨테이너는 여러 개의 볼륨을 사용할 수 있다. 또한, 여러 개의 컨테이너가 하나의 볼륨을 공유할 수 있다. (다대다 관계)
도커 볼륨 관련 명령어
docker volume ls
: 볼륨 리스트 조회docker volume inspect 볼륨명
: 볼륨 상세 정보 조회docker volume create 볼륨명
: 볼륨 생성docker volume rm 볼륨명
: 볼륨 삭제dorker run -v 볼륨명:컨테이너의 내부 경로
: 컨테이너 생성 및 볼륨 연결