서비스를 제공하는 입장에서는
하나의 서버가 여러개의 서버가 있는 것 같은 기능이 있는 것이 유리하다!(가용성)
이때 사용되는 기술이 하이퍼바이저이다.
이번 시간엔 하나의 운영체제에서 서로 다른 어플리케이션 환경을 격리시킬 수 있는 리눅스 컨테이너에 대해 알아본다.
OS 전체를 가상화 하면 어플리케이션까지 가는 소프트웨어 스택 레이어가 굉장히 많아져서 무겁고 느리다.
OS의 일부를 가상화하는 KVM, Xen 등이 있다.
이들은 OS일부를 가상화하지만(가벼워짐), 전체를 가상화하는 효과를 주기 때문에 클라우드 컴퓨팅에 기반이되었다.(openstack 등)
여기서 한단계 더 나아가
어짜피 클라우드 컴퓨팅은 거의 리눅스를 쓰니 리눅스 기반에 위에올라가는 App의 커널기술들과 기능들을 직접적으로 지원받을 수 있도록 한 것이 컨테이너이다.
컨테이너는 앱가상화, 즉 프로세스를 격리켜서 더 빠르고 가볍게 운영할 수 있다.
이와같이 최근에는 어플리케이션 가상화로 옮겨가는 중이다.
리눅스 커널 레벨에서 컨테이너 기능을 지원하기 시작했기 때문이다.
커널 모드에서 작동한다는건?
운영체제에 프리빌리지드 모드라는 것이 있다.
일반 어플리케이션이 실행될 때 : 유저모드
커널이 실행될 때 : 프리빌리지드 모드(특권모드)
프리빌리지 모드로 실행하면 일반 유저모드에서는 접근할 수 없는 특정 메모리에 접근가능하다.
컨테이너에 사용할 자원들이 할당되는 기능
컨테이너를 다른 컨테이너와 완전히 분리시키는 isolation 기능
시스템 커널에서 문제가 생기면 시스템이 다운된다.
리눅스 컨테이너는 커널 서비스를 제공받기 때문에 컨테이너가 잘못되면 시스템이 영향을 받을 수 있다.
때문에 해당되는 영역, 자원을 "격리"시켜주는 것이 가장 중요하다.
이 격리를 지원해주는 것이 Name Spaces이다.
컨테이너를 관리하는 명령어 툴
LXC를 보다 더 편리하게 관리하는 일종의 manager
LXC는 하나의 컨테이너에 여러가지 App을 넣을 수 있지만.
도커는 하나의 컨테이너에 하나의 App만 가능!