티스토리 뷰

리눅스 컨테이너에 대해 공부할 수 있는 기회가 생겨 기대가 되지만 학부 수준에서 그저 커널 레벨 코딩을 통해 스케줄링을 구현하거나 페이징 기법을 구현해보는 정도에 그쳐 걱정이 되기도 합니다.. 리눅스 컨테이너에 대해 조금씩 친해져야 될 것 같습니다 😅 

백엔드를 전공하는 개발자나, 클라우드 및 서버 개발자분들은 도커라는 단어를 필연적으로 들어봤을 것입니다! 현재 도커는 서비스를 배포하고 관리하는데 보편적인 기술입니다. 도커는 리눅스 컨테이너(LXC)라는 기술을 기반으로 만들어진 상위레벨의 컨테이너 기술입니다.

 

리눅스 컨테이너란?

단일 리눅스 시스템에 동작하고 있는 프로세스를 격리시켜 각 프로세스 마다 독자적인 리눅스 시스템 환경을 구축하는 것을 리눅스 컨테이너라 합니다. 이를 가르켜 OS 수준에서의 가상화라고도 말합니다. 일반적으로 가상화는 HYPERVISOR라는 논리적 플랫폼을 이용해, 하나의 HOST(원래 본체에 설치된 운영체제)위에 여러개의 Guest OS(추가로 구동하고자 하는 운영체제)를 구동하는 기술입니다.

 

이와 달리 리눅스 컨테이너는 하나의 리눅스 시스템에서 프로세스들을 격리(분리)시켜 독자적인 시스템 환경을 구축합니다.

LXC(LinuX Containers)는 단일 컨트롤 호스트 상에서 여러 개의 고립된 리눅스 시스템 (컨테이너)들을 실행하기 위한 운영 시스템 레벨 가상화 방법입니다. 리눅스 커널은 cgroups를 절충하여 가상화 머신을 시작할 필요 없이 자원(CPU, 메모리, 블록I/O, Network)을 할당합니다. Cgroups는 또한 애플리케이션 입장에서 프로세스 트리, 네트워크, 사용자 ID, 마운트된 파일 시스템 등의 운영 환경을 완전히 고립시키기 위해 namespace isolation을 제공합니다.

 

LXC는 cgroupsnamespace를 결합하여 애플리케이션을 위한 고립된 환경을 제공합니다.

 

 

 

 

리눅스 컨테이너의 장점

일반적으로 하나의 호스트위에 가상머신을 설치하여 사용하는 것과 비교해 리눅스 컨테이너의 장점으로는 몇 가지가 있습니다.

 

1. 전체 운영체제를 설치하는 것이 아닌, 특정 어플리케이션 환경만 따로 간편하게 구축할 수 있습니다.

2. 그러므로 구축에 필요한 전체적인 메모리도 줄어듭니다.

3. 리눅스 컨테이너는 프로세스가 동작에 필요한 자원만큼을 사용하기 때문에 오버헤드가 상대적으로 적습니다.

그렇기 때문에 우리는 실제 개발환경에서 무겁고 느린 가상화를 사용하지 않아도 손쉽고 빠르게 개발 및 배포를 진행할 수 있습니다 !

 

 

 

리눅스 컨테이너가 사용하는 기술

'컨테이너' 라는 기능이 탄생할 수 있었던 이유는 리눅스 커널에서 제공하는 기능덕분이었습니다. 리눅스 컨테이너 공식문서에서는 다음과 같이 서술하고 있습니다. 

 

  • Kernel namespace
  • Apparmor와 SELinux profiles
  • Seccomp
  • chroots
  • kernel capabilities
  • cgroups

여기서 주된 기능이 namespace와 chroots, cgroups라고 합니다. 다 처음들어 보는 용어라 굉장히 생소한 것 같습니다..

  • Chroots : 프로세스의 루트 디렉토리를 변경하는 것입니다. 이를 통해 우리는 다른 프로세스가 액세스 할 수있는 디렉토리를 제한할 수 있습니다.
  • namespace: 직역하면 이름공간, 의역하면 소속이라 해석할 수 있습니다. 커널 자원들을 구분해서 이를 프로세스에 제공해 그 프로세서의 소속된 자원처럼 가상화합니다. 프로세스 테이블(PIDs), ipc, 네트워크(IP주소, 방화벽 등), User ID, 마운트 포인트 등을 가상화할 수 있습니다.
  • Cgroups : 프로세스의 리소스를 격리하고 사용을 제어하는 기능입니다. Cgroups의 역할은 다음과 같습니다
    • 자원 제한: 특정 프로세스의 메모리 사용량을 제한합니다.
    • 우선 순위: 특정 프로세스에 더 많은 CPU와 디스크I/O 처리량을 할당합니다.
    • 기록: 프로세스가 자원을 얼마나 사용하고 있는지 측정합니다.
    • 제어: 프로세스를 멈추거나, 프로세스의 체크포인트를 설정해주거나 재시작이 가능합니다.

 

 

 

 

 

 

 

댓글