IaaS: 리눅스 컨테이너 기술 분석

지니박박구리·2021년 7월 1일
1

IaaS 스터디

목록 보기
3/4

하이퍼바이저 VS 리눅스 컨테이너


하이퍼바이저

  • 하나의 물리적인 서버에 여러개의 운영체제를 독립적으로 동시에 실행가능하도록 도와줌
  • 서버 전체를 가상화할 때 유리
  • 어플리케이션을 실행할때 걸리는 부담이 큼

리눅스 컨테이너

  • 하나의 운영체제에 여러개의 컨테이너를 실행 가능하도록 도와줌
  • 어플리케이션을 실행할때 걸리는 부담이 작음(가볍고 빠르다)
  • 하나의 운영체제에 컨테이너 여러대를 두는 것이기 때문에 컨테이너에 올라가는 어플리케이션은 동일한 운영체제용(리눅스 기반) 어플리케이션이여야 한다.(종속적이라는 단점)

서비스를 제공하는 입장에서는
하나의 서버가 여러개의 서버가 있는 것 같은 기능이 있는 것이 유리하다!(가용성)
이때 사용되는 기술이 하이퍼바이저이다.

이번 시간엔 하나의 운영체제에서 서로 다른 어플리케이션 환경을 격리시킬 수 있는 리눅스 컨테이너에 대해 알아본다.



OS 가상화에서 App가상화로


  • OS 전체를 가상화 하면 어플리케이션까지 가는 소프트웨어 스택 레이어가 굉장히 많아져서 무겁고 느리다.

  • OS의 일부를 가상화하는 KVM, Xen 등이 있다.
    이들은 OS일부를 가상화하지만(가벼워짐), 전체를 가상화하는 효과를 주기 때문에 클라우드 컴퓨팅에 기반이되었다.(openstack 등)

  • 여기서 한단계 더 나아가
    어짜피 클라우드 컴퓨팅은 거의 리눅스를 쓰니 리눅스 기반에 위에올라가는 App의 커널기술들과 기능들을 직접적으로 지원받을 수 있도록 한 것이 컨테이너이다.
    컨테이너는 앱가상화, 즉 프로세스를 격리켜서 더 빠르고 가볍게 운영할 수 있다.

  • 이와같이 최근에는 어플리케이션 가상화로 옮겨가는 중이다.



리눅스 컨테이너


왜 요즘 뜨는 기술인가?

리눅스 커널 레벨에서 컨테이너 기능을 지원하기 시작했기 때문이다.

커널 모드에서 작동한다는건?
운영체제에 프리빌리지드 모드라는 것이 있다.

일반 어플리케이션이 실행될 때 : 유저모드
커널이 실행될 때 : 프리빌리지드 모드(특권모드)

프리빌리지 모드로 실행하면 일반 유저모드에서는 접근할 수 없는 특정 메모리에 접근가능하다.

Cgroups

컨테이너에 사용할 자원들이 할당되는 기능

Name Spaces

컨테이너를 다른 컨테이너와 완전히 분리시키는 isolation 기능

왜 Isolation이 중요할까?

시스템 커널에서 문제가 생기면 시스템이 다운된다.
리눅스 컨테이너는 커널 서비스를 제공받기 때문에 컨테이너가 잘못되면 시스템이 영향을 받을 수 있다.
때문에 해당되는 영역, 자원을 "격리"시켜주는 것이 가장 중요하다.

이 격리를 지원해주는 것이 Name Spaces이다.




LXC & Docker


LXC

컨테이너를 관리하는 명령어 툴

LXD

LXC를 보다 더 편리하게 관리하는 일종의 manager

  • LXC는 무조건 프리빌리지 컨테이너만 제공하는데, 보안을 위해 언프리빌리지 모드가 필요할때가 있다. LXD는 언프리빌리지 모드를 제공한다.
  • 각각의 리소스를 보다 더 편리하게 관리한다.

Docker

  • 도커는 이미지 기반이다.
  • 이미지는 컨테이너 실행에 필요한 파일과 설정 값등을 고정화 시킨 것(변경할 수 없음)
  • 컨테이너에서 추가되고 변경된 값들은 컨테이너에 저장
  • 컨테이너가 삭제되더라도 이미지는 그대로

LXC vs Docker


LXC는 하나의 컨테이너에 여러가지 App을 넣을 수 있지만.
도커는 하나의 컨테이너에 하나의 App만 가능!

profile
킹왕짱 DevOps Engineer가 되고 싶습니다

0개의 댓글