리눅스 컨테이너(linux containers, lxc)에 대해서 알아보자

feature-image

Play all audios:

Loading...

2014년, Docker가 발표되고 Google이 Docker를 채택해 개발자들의 주목을 끌었습니다. 2019년 현재, 이제 Docker의 존재에 대해서 모르는 사람들이 거의 없을 정도로 보편적인 기술이 되었습니다. Docker는 태초에 LXC라는 컨테이너 기술을 기반으로 만들어진 상위레벨의 컨테이너 기술입니다. 이 글에서는 Docker의


기반이 되었던(현재 Docker는 LXC에서 벗어나 runC라는 기술을 기반으로 하고 있습니다.) LXC에 대해 알아보고자 합니다. 리눅스 컨테이너란.. 단일 리눅스 시스템에 동작하고 있는 프로세스를 격리시켜 각 프로세스마다 독자적인 리눅스 시스템 환경을 구축하는 것을 리눅스 컨테이너라 합니다. 이를 가르켜 OS수준에서의 가상화라고도


일컫습니다. 일반적으로 가상화는 HYPERVISOR라는 논리적 플랫폼을 이용해, 하나의 Host OS( 본래 PC본체에 설치된 OS ) 위에 여러 Guest OS(추가로 구동하고자 목표로하는 OS)를 구동하는 기술입니다. 이와 달리 리눅스 컨테이너는 하나의 리눅스 시스템에서 프로세스들을 격리시켜 독자적인 시스템환경을 구축합니다. 즉,


리눅스 컨테이너에서 가상화된 프로세스들은 모두 리눅스 시스템을 호환해야 합니다. 리눅스 컨테이너의 장점 이렇게 컨테이너를 사용한다면 얻을 수 있는 장점으로는, * 전체 OS를 설치하는 것이아니기에, 특정 어플리케이션 환경만 따로 간편하게 구축을 할 수 있게됩니다. * 따라서, 구축에 필요한 전체적인 메모리도 줄어듭니다. * 리눅스


컨테이너는 상대적으로 가볍습니다. HYPERVISOR를 이용해 가상화를 하지 않기 때문에 오버헤드가 적게 발생합니다. 프로세스가 동작에 필요한 자원만큼을 사용합니다. 그렇기 때문에 우리는 실제 개발환경에서 무겁고 느린 가상화를 사용하지 않아도 손쉽고 빠르게 개발 및 배포를 진행할 수 있습니다. 컨테이너가 사용하는 기술 컨테이너라는 기능이


탄생할 수 있었던 이유는 리눅스 커널에서 제공하는 기능 덕분이었습니다. 리눅스 컨테이너 공식문서에서는 관련한 기능을 이렇게 나열합니다. · namespace · Apparmor와 SELinux 프로파일 · Seccomp 정책 · Chroots · kernel capability · CGroups 여기서 우리는 메이저한 기능인


namespace와 chroots, cgroups에 대해 알아보겠습니다. * CHROOTS : 프로세스의 루트 디렉토리를 변경하는 것입니다. 이를 통해 우리는 다른 프로세스가 액세스 할 수있는 디렉토리를 제한할 수 있습니다. * NAMESPACE: 직역하면 이름공간, 의역하면 소속이라 해석할 수 있습니다. 커널 자원들을 구분해서 이를


프로세스에 제공해 그 프로세서의 소속된 자원처럼 가상화합니다. 프로세스 테이블(PIDs), ipc, 네트워크(IP주소, 방화벽 등), User ID, 마운트 포인트 등을 가상화할 수 있습니다. * CGROUPS : 프로세스의 리소스를 격리하고 사용을 제어하는 기능입니다. Cgroups의 역할은, a. 자원 제한 : 특정 프로세스의 메모리


사용량을 제한. b. 우선 순위 : 특정 프로세스에 더 많은 CPU와 디스크 I/O 처리량을 할당. c. 기록 : 프로세스가 자원을 얼마나 사용하고 있는지 측정. d. 제어 : 프로세스를 멈추거나, 프로세스의 체크포인트를 설정해주거나 재시작 가능. 마치며.. 이로써 우리는 리눅스 컨테이너에 대해 대략적인 이해를 할 수 있게 되었습니다.


LXC가 도커의 기반기술이었던 만큼, 향후에 DOCKER를 이해하는데 있어 많은 도움이 될 것입니다. - 본 글은 엑스테일즈(Extales)의 jho2301에 의하여 작성되었습니다.