본문 바로가기

PRODUCT/OS

컨테이너=리눅스' 쉽게 풀어 보는 컨테이너의 개념

컨테이너가 곧 리눅스다! 이 말에는 많은 뜻이 함축되어 있습니다. 소프트웨어 정의 데이터센터와 클라우드 컴퓨팅 환경의 기술 혁신을 주도하는 컨테이너(Container)의 역사는 곧 리눅스의 역사이기도 합니다. 무슨 소리냐고요? 레드햇은 리눅스의 궁극적인 미래를 컨테이너로 봅니다. 컨테이너 기술은 십수 년 간 리눅스 운영체제의 한 부분으로 존재해왔습니다. 더 멀리 역사를 따지자면 유닉스까지 되짚어 볼 수 있습니다. 리눅스와 유닉스 프로세스 처리 관련 기술의 진화 결과 중 하나가 컨테이너란 소리입니다. FreeBSD에서 여러 서브 시스템을 분리하기 위해 제공한 Jail 기술과 리눅스에서 격리 환경 구성을 위해 추진되었던 VSever 프로젝트를 떠올려 보면 쉽게 이해가 될 것입니다. 이런 역사적 배경이 있기에 현재 데이터센터와 클라우드에 배포된 컨테이너 대부분이 리눅스이고 최근에서야 윈도우 컨테이너가 소개된 것입니다. 본론으로 돌아와 컨테이너가 곧 리눅스 그 자체인 이유를 살펴보겠습니다. 


Containers are Linux!


리눅스 컨테이너는 리눅스 상에서 실행되는 프로세스 그 이상도 이하도 아닙니다. 컨테이너들은 호스트 커널을 공유합니다. 그렇다면 다른 프로세스와 개념상 유사한 것을 왜 컨테이너라고 부를까요?



컨테이너화된 프로세스들은 같은 리눅스 호스트, 커널 네임스페이스를 쓰지만, 각각 격리되어 운영됩니다. 커널 네임스페이스는 컨테이너가 실행될 수 있는 가상의 환경을 제공합니다. 가령 프로세스를 식별하기 위해 부여하는 PID(Process Indentification Number)를 특정 컨테이너에 할당하면 동일 호스트 내에 있더라도 다른 컨테이너에서 이를 볼 수 없습니다. 커널 수준에서 제공되는 보안 기능도 완벽하게 격리됩니다. SELinux(Security-Enhanced Linix)에서 사용하는 파일 시스템 보안 역시 격리되어 제공됩니다. 간단히 생각하면 아파트를 생각하면 됩니다. 전기, 수도 등 인프라는 공유하지만 각 가정은 완벽하게 격리된 환경에서 공유 자원을 활용하죠. 옆집에서 뭘 얼마나, 어떻게 쓰는지 볼 수 없습니다. 

각 컨테이너 프로세스가 사용하는 메모리, CPU I/O 등에 대한 자원 소모 역시 cgqroups나 리눅스 컨트롤 그룹을 통해 각 환경에 맞추어 제약할 수 있습니다. 이렇게 하면 특정 컨테이너가 자원을 과도하게 많이 써서 이웃 컨테이너에 영향을 끼치지 못하게 할 수 있습니다. 컨테이너가 곧 리눅스다! 이해가 되죠. 완벽한 격리와 리소스 제한은 리눅스 프로세스를 컨테이너라는 특별한 개념이자 대상으로 만듭니다. 더 자세히 살펴보죠. 


컨테이너 보안은 곧 리눅스 보안이다!

컨테이너의 동작 원리를 이해했다면, 컨테이너 보안이 곧 리눅스 보안이란 말에 담긴 뜻을 헤아릴 수 있습니다. 공유 호스트 상에 있는 여러 컨테이너는 완벽한 격리를 통해 호스트 운영체제가 제공하는 보안 기능을 활용합니다. 앞서 언급한 리눅스 커널 네임스페이스와 파일 시스템 관련 보안 기능을 각 컨테이너가 쓰는 것을 떠 올리면 됩니다. 호스트 운영체제의 보안 기능 못지않게 중요한 요소가 하나 더 있습니다. 바로 컨테이너의 신뢰성입니다. 오픈 소스 프로젝트인 도커(Docker)가 계층화된 패키징 포맷을 제공하는 것도 이 때문입니다. 컨테이너 이미지를 악의적인 의도로 바꿀 수 없게 하는 것인데요, 이를 통해 컨테이너 이미지를 신뢰할 수 있습니다. 레드햇의 경우 레드햇 엔터프라이즈 리눅스 6, 7 그리고 다양한 종류의 미들웨어, 데이터베이스 등으로 계층화된 포맷의 이미지를 제공합니다. 이들 이미지는 사전에 인증된 컨테이너 레지스트리의 카탈로그를 통해 골라 쓸 수 있습니다.  

컨테이너 성능은 곧 리눅스 성능이다!


성능 역시 컨테이너는 호스트 리눅스 성능과 긴밀히 연계되어 있습니다. OverlayFS, Device Mapper, BTRFS, AUFS 등 어떤 리눅스 파일 시스템을 선택하느냐에 따라 컨테이너 이미지 빌드, 저장, 실행 관련 성능에 끼치는 영향이 달라집니다. 레드햇은 리눅스 성능과 확장 관련 고객의 고충을 해결하는 데 익숙한 숙련된 엔지니어링 팀을 보유하고 있습니다. 이 팀은 고객, 커뮤니티와 밀접하게 협력하며 대규모 환경에서 컨테이너들을 운영할 때 최적의 구성이 무엇인지 경험을 쌓고 있습니다. 


참고로 컨테이너 성능이 곧 리눅스 성능이다! 이 말은 레드햇이 성능 평가를 통해 직접 체감한 메시지입니다. 레드햇은 최근 100대의 물리적 서버와 2,048개의 가상 머신(VM)으로 구성된 클러스터 두 환경을 대상으로 성능 벤치마크를 했는데, 그 결과 컨테이너 성능과 리눅스 성능이 매우 밀접한 관계가 있음을 확인할 수 있었습니다. 


컨테이너의 안정성은 곧 리눅스의 안정이다!


실제 운영(Production) 환경에서 컨테이너를 돌릴 때 신경 써야 할 것 중 안정성을 빼놓을 수 없습니다. 보안, 성능 그리고 안정성까지 챙겨봐야 하는데 당연한 말이지만 컨테이너의 안정성도 리눅스의 안정성에 크게 영향을 받습니다. 컨테이너는 리눅스 환경에서 애플리케이션을 패키징하고 운영하는 새로운 방식을 제시하고 있습니다. 레드햇은 오랜 기간 미션크리티컬한 애플리케이션 운영 기반으로 리눅스를 제공하고 지원해왔습니다. 그 덕에 안정성은 레드햇 엔터프라이즈 리눅스를 상징하는 키워드로 통합니다. 컨테이너 운영 환경이 갖추어야 할 안전성 역시 레드햇은 엔터프라이즈의 눈높이에 맞는 수준을 제시하고 보장합니다. 

다음 포스팅에서는 "그렇다면 도커는 무엇인가?"란 주제를 논의해 보겠습니다.