`

컨테이너의 상태

Stateless

  • 컨테이너는 상태가 없다는 것이 징이다. image
  1. 하나의 이미지로 컨테이너가 2개 생성되고, 각 읽기/쓰기 레이어가 생성된다.
  2. 컨테이너2가 삭제되면 컨테이너2의 읽기/쓰기 레이어도 삭제된다.
  3. 컨테이너1을 업데이트하면 컨테이너1의 읽기/쓰기 레이어가 삭제된 후에 새로운 컨테이너1의 읽기/쓰기 레이어가 생성한다. 이렇게 컨테이너는 stateless 특징을 유지한다.
  • 컨테이너가 실행된 후 발생하는 모든 변경 사항은 컨테이너 레이어에 존재하고, 컨테이너가 종료 되면 변경 사항이 모두 삭제된다.
  • Stateless 특징으로 인해 컨테이너의 개수를 쉽게 증가시킬 수 있고, 다른 환경에 빠른 배포가 가능하다.

image

  • 컨테이너의 상태 변경이 필요한 경우에는 새로운 버전의 이미지를 새로 만들어서 배포한다.
  • 기존 이미지는 변경하지 않고, 변경 사항을 적용한 새로운 버전의 이미지를 재작하여 재배포한다.

image

  • 컨테이너는 상태가 없기 때문에 같은 상태의 컨테이너를 여러 곳에 빠르게 배포할 수 있다.
  • 위 그림과 같이 개발 환경, 테스트 환경, 운영환경에 같은 상태의 컨테이너를 배포할 수 있다.

Pet & Cattle

  • Pet 방식 : 전통적인 서버 방법론으로 서버 한대를 중요하게 생각하고, 서버에 장애가 발생시 서버를 복구 시도하고, 문제 해결하려 한다.
  • Cattle 방식 : 현대의 서버 방법론으로 컨테이너를 활용한다. 서버를 빠르게 교체할 수 있고, 서버의 상태를 최대한 제거한다. 만약 컨테이너에 장애가 발생 시 삭제 후 새로 생성한다. image

컨테이너의 Stateless 특징 및 제약

  • 특징
    • 컨테이너의 이미지는 한번 만들어지면 변경되지 않는다.
    • 컨테이너는 언제든지 새로운 컨테이너로 대체할 수 있다.
    • 컨테이너는 어떤 호스트에서든 컨테이너를 실행할 수 있다.
    • 컨테이너는 동일한 컨테이너를 여러개 쉽게 생성해서 트래픽에 대응할 수 있다.
    • 장애가 발생한 경우 새로운 컨테이너를 빠르게 시작할 수 있다.
  • 제약
    • 컨테이너는 상태가 없기 때문에 저장 및 공유가 필요한 데이터는 반드시 외부에 저장해야한다.
    • 사용자 정보는 파일이나 메모리가 아닌 캐시 서버나 쿠키를 통해 관리해야한다.
    • 동일한 요청은 항상 동일한 결과를 제공해야한다.
    • 환경 변수, 구성 파일을 통해 설정을 외부에서 주입하여 다양한 환경에서 컨테이너 이미지를 활용할 수 있어야한다.



스토리지

컨테이너의 영속성

  • 컨테이너가 삭제되거나 업데이트될 경우 컨테이너 레이어는 초기화된다.
  • 컨테이너 환경에서는 여러 서버가 여러 컨테이너로 관리되어 트래픽 증가에 대비할 수 있다.
  • 마운트 : 외부 저장 공간을 특정 경로에 연결할 수 있도록 해준다. 외부 저장 공간은 물리적으로 연결하거나, 네트워크에 연결할 수 있다.
  • 컨테이너의 특정 디렉토리에 볼륨을 마운트해서 사용한다.

도커 볼륨

  • image
  • 컨테이너를 여러 개 두어 여러 서버를 관리하고 로드 밸런싱을 통해 트래픽을 관리한다.
  • 마운트를 통해 도커 볼륨에 데이터를 저장한다.
  • dorker run -v volume1:/var/lib/postgresql/data: 컨테이너 실행(run) 시 볼륨(volume)을 컨테이너의 내부 경로(/var/lib/postgresql/data)에 마운트할 수 있다.
  • 컨테이너가 삭제되어도 볼륨은 남아있다.
  • 컨테이너 실행 시 다시 마운트 할 수 있다.
  • 하나의 컨테이너는 여러 개의 볼륨을 사용할 수 있다. 또한, 여러 개의 컨테이너가 하나의 볼륨을 공유할 수 있다. (다대다 관계) image

도커 볼륨 관련 명령어

  • docker volume ls : 볼륨 리스트 조회
  • docker volume inspect 볼륨명 : 볼륨 상세 정보 조회
  • docker volume create 볼륨명 : 볼륨 생성
  • docker volume rm 볼륨명 : 볼륨 삭제
  • dorker run -v 볼륨명:컨테이너의 내부 경로 : 컨테이너 생성 및 볼륨 연결