출처

https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html 


가상 머신 → 리눅스 컨테이너 → 도커

가상 머신 Virtual Machine

  • 기존의 가상화 방식인 OS 가상화 (호스트 OS위에 게스트 OS전체를 가상화하여 사용하는 방식)
  • 예를들어 리눅스에서 윈도우를 쓸 수 있다
  • 무겁고 느려서 운영환경에선 사용할 수 없다
  • OS가상화를 개선하기 위해 CPU 가상화 기술인 HVM을 이용한 Kernel-Based virtual Machine과 반가상화 Paravirtualization 방식의 Xen이 등장
  • 이 기술들은 OpenStack이나 AWS, Rackspace 같은 클라우드 서비스에서 가상 컴퓨팅 기술의 기반이 되었다.

리눅스 컨테이너

  • 전가상화든 반가상화든 성능문제가 있어서 이를 개선한 프로세스를 격리하는 방식이 등장
  • CPU나 메모리 사용량을 제한할 수 있고 호스트의 특정 포트와 연결하거나 호스트의 특정 디렉토리를 내부 디렉토리인 것처럼 사용할 수도 있다.
  • 도커는 리눅스 컨테이너(LXC)를 기반으로 시작해서 0.9버전에서는 자체적인 libcontainer 기술을 사용하였고 추후 runC기술에 합쳐졌습니다.

도커 Docker: 컨테이너 기반의 오픈소스 가상화 플랫폼

이미지

  • 도커에서 가장 중요한 개념은 컨테이너와 이미지
  • 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것
  • 상태값을 가지지 않고 변하지 않는다 Immutable
  • 추가되거나 변하는 값은 컨테이너에 저장된다
  • 같은 이미지에서 여러개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 변하거나 삭제되어도 이미지는 그대로이다.
  • 새로운 서버가 추가되면 미리 만들어 놓은 이미지를 다운받고 컨테이너를 생성하면 된다 (한 서버에 여러개의 컨테이너 가능)

컨테이너 Container

  • 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 한다.
  • 백엔드 프로그램, 데이터 베이스 서버, 메세지 큐 등 어떤 프로그램도 컨테이너로 추상화 될 수 있다.
  • 시스템의 나머지 부분과 격리된 프로세스 세트
  • 소프트웨어 서비스를 실행하는 데 필요한 특정 버전의 프로그래밍 언어 런타임 및 라이브러리와 같은 종속 항목과 애플리케이션 코드를 함께 포함하는 경량 패키지
  • 컨테이너는 Linux, Windows, Mac 등의 운영체제를 가리지 않고, 가상 머신, 물리적 서버, 개발자 컴퓨터, 데이터 센터, 온프레미스 환경, 퍼블릭 클라우드 등 사실상 어느 환경에서나 구동되므로 개발 및 배포가 크게 쉬워집니다.
  • 컨테이너는 OS 수준에서 가상화되고 VM은 하드웨어 수준에서 가상화됩니다.
  • 이미지Image를 실행한 상태로 응용프로그램의 중속성과 함께 응용프로그램 자체를 패키지이 or 캡슐화하여 격리된 공간에서 프로세스를 동작시키는 기술이다.
  • 조립PC, AWS, Azure, Google cloud 등 모두 실행할 수 있다.

레이어

  • 도커는 유니온 파일 시스템을 이용하여 여러개의 레이어를 하나의 파일 시스템으로 사용할 수 있게 한다.
  • 이미지는 여러개의 읽기 전용read only 레이어로 구성되고 파일이 추가나 수정되면 새로운 레이어가 생성된다.
  • 컨테이너를 생성할 때도 기본의 이미지 레이어 위에 읽기-쓰기read-write 레이어를 추가한다. 컨테이너가 샐행중에 생성하는 파일이나 변경된 내용은 읽기-쓰기 레이어에 저장되므로 여러개의 컨텐이너를 생성해도 최소한의 용량만 사용한다

+ Recent posts