컨테이너

Linux 컨테이너란?

Linux® 컨테이너는 시스템의 나머지 부분과 격리된 프로세스로, 이러한 프로세스를 지원하는 데 필요한 모든 파일을 제공하는 고유한 이미지에서 실행됩니다. 애플리케이션의 모든 종속 항목을 포함하는 이미지가 제공되므로 개발에서 테스트, 프로덕션에 이르기까지 프로세스 전반에서 이동성과 일관성을 유지할 수 있습니다.

컨테이너란

보다 구체적으로 살펴보기 위해 애플리케이션을 개발하고 있다고 가정해 봅시다. 귀하는 노트북으로 작업하며 특정하게 설정된 환경을 사용하고 있습니다. 이때 다른 개발자들의 환경 설정은 약간 다를 수 있습니다. 현재 개발 중인 애플리케이션 설정을 사용하며 특정 파일에 의존하고 있으며, 동시에 귀사는 자체 설정과 지원 파일 세트에 준하여 표준화된 테스트 및 프로덕션 환경을 갖추고 있습니다. 이때, 서버 환경을 재구축하는 부가적인 작업 없이 가능한 로컬에서 이러한 환경을 에뮬레이션하려고 합니다. 그렇다면 어떻게 이러한 환경 전체에서 애플리케이션이 작동되게 하고, 품질 검사를 통과하고, 큰 문제나 수정 없이 애플리케이션을 배포할 수 있을까요? 이에 대한 답은 바로 '컨테이너'를 사용하는 것입니다. 애플리케이션을 실행하는 컨테이너는 필수 설정과 파일을 사용하므로 문제없이 원활하게 애플리케이션을 개발에서 테스트를 거쳐 프로덕션으로 진행할 수 있습니다. 이는 위기가 될 수 있는 문제를 해결하고 모든 사람이 이점을 얻을 수 있게 합니다.

이는 간소화된 예에 불과하며, 우수한 이식성, 설정 가능성 및 격리가 필요한 경우 Linux 컨테이너를 다양한 방식으로 문제에 적용할 수 있습니다. 온프레미스, 클라우드, 하이브리드 중 인프라가 어떤 방식을 취하든, 컨테이너는 사용자의 요구 사항을 충족시킬 수 있습니다. 물론, 적절한 컨테이너 플랫폼을 선택하는 것은 컨테이너 자체만큼 중요합니다.

단순한 가상화일 뿐이라고요?

그럴 수도 있고, 아닐 수도 있습니다. 두 개념을 간단하게 비교해 봅시다.

  • 가상화는 단일 시스템에서 여러 운영 체제가 동시에 실행될 수 있도록 합니다.
  • 컨테이너는 동일한 운영 체제 커널을 공유하고 시스템의 나머지 부분으로부터 애플리케이션 프로세스를 격리합니다.

가상화와 컨테이너 비교

이것이 무슨 의미일까요? 먼저, 가상화를 작동하게 만드는 소프트웨어인 하이퍼바이저에서 여러 운영 체제를 실행하면 컨테이너를 사용하는 것만큼 경량화되지 않습니다. 리소스와 기능이 제한되어 있을 때는 집중적으로 배포할 수 있는 경량화된 애플리케이션이 필요합니다. Linux 컨테이너는 단일 운영 체제에서 실행되고 모든 컨테이너 전체에서 운영 체제를 공유하므로 애플리케이션과 서비스를 가볍게 유지할 수 있으며 빠른 속도로 동시에 실행할 수 있습니다.


컨테이너에 대한 간략한 역사

컨테이너의 진화 다운로드 버튼

우리가 컨테이너 기술이라고 부르는 아이디어는 2000년에 처음 등장한  FreeBSD jail이라는 기술로  FreeBSD  시스템을 여러 하위 시스템 또는 Jail로 분할할 수 있도록 하는 기술입니다. Jail은 시스템 관리자가 조직 내부 또는 외부의 여러 사용자와 공유할 수 있는 안전한 환경으로 개발되었습니다. Jail을 개발한 목적은 파일 시스템, 네트워크, 사용자에 대한 액세스가 가상화되어 전체 시스템을 손상시키지 않고 수정된 chrooted 환경에서 프로세스가 생성되도록 하는 것이었습니다. Jail의 구현 한계에도 불구하고 마침내 Jail 환경을 벗어날 방법이 발견되었습니다.

이 개념은 매우 설득력 있었습니다.

2001년, Jacques Gélinas의 VServer 프로젝트를 통해 Linux에 격리된 환경이 구현되었습니다. Gélinas는  개선 프로젝트를 통해 '고도의 독립성과 보안을 갖춘 단일 시스템에서 여러 대의 범용 Linux 서버[sic]'를 실행하고자 했습니다. Linux에서 다수의 통제된 사용자 공간에 이러한 기반을 마련한 후에 오늘날의 Linux 컨테이너가 형태를 갖추기 시작했습니다.

컨테이너의 실용화

더 많은 기술이 매우 빠르게 결합되면서 이러한 격리된 접근 방식이 실제화되고 있습니다. 제어 그룹(cgroups)은 프로세스 또는 프로세스 그룹의 리소스 사용을 제어하고 제한하는 커널 기능입니다. 또한 cgroups는 사용자 공간을 설정하고 해당 프로세스를 관리하는 초기화 시스템인 systemd를 사용하여 이러한 격리된 프로세스를 더 효과적으로 제어할 수 있게 합니다. 이러한 기술은 모두 Linux에 대한 전반적인 관리성을 향상시키면서 환경을 분리된 상태로 유지할 방법을 제시하는 프레임워크가 되었습니다.

사용자 네임스페이스의 개선은 컨테이너가 다음 단계로 발전할 수 있는 길을 열었습니다. 사용자 네임스페이스를 사용하면 "사용자와 그룹 ID를 네임스페이스별로 매핑할 수 있습니다. 컨테이너의 측면에서 이는 사용자와 그룹이 컨테이너 밖에서 특정 작업을 수행할 권한이 없어도 컨테이너 내에서 그러한 권한을 가질 수 있음을 의미합니다." 이는 Jail의 개념과 비슷하지만 프로세스를 추가로 격리하고 보안을 강화한다는 점에서 Jail의 수정된 환경의 개념과 다릅니다.

이러한 개선에 더해 LXC(Linux 컨테이너 프로젝트)를 통해 매우 중요한 툴, 템플릿, 라이브러리 및 언어 바인딩이 추가되어 컨테이너 사용 시 사용자 환경이 개선되었습니다.

Docker 개요

2008년에 dotCloud를 통해 동명의 컨테이너 기술과 함께 Docker가 등장했습니다. Docker 기술은 LXC 작업과 개선된 개발자 툴을 결합해 컨테이너의 사용자 친화성을 높였습니다. 오픈소스 기술인 Docker는 현재 Linux 컨테이너 배포 및 관리를 위한 프로젝트이자 방법으로 가장 잘 알려져 있습니다.

오늘날, Red Hat과 Docker는 컨테이너 기술의 오픈 산업 표준화를 위해 노력하고 있는 OCI(Open Container Initiative)의 멤버입니다.


표준화와 Open Container Initiative

Linux Foundation에 소속된 OCI(Open Container Initiative)는 2015년에 "컨테이너 형식 및 런타임에 대한 오픈 산업 표준을 수립한다는 목적을 표방"하여 시작되었습니다. 이 프로젝트는 기술 사양(현재 런타임과 이미지의 두 가지 사양)을 확인하고 설정하는 데 초점을 맞춥니다.

런타임 사양을 컨테이너의 아티팩트와 지원 파일의 구조인 파일 시스템 번들에 관한 오픈 표준을 규정하며, 이를 준수하는 런타임에 의해 번들이 배포되는 방식을 정합니다. 기본적으로 사양은 컨테이너가 원래 의도대로 작동되고 모든 지원 자산이 올바른 장소에서 사용되도록 보장하는 역할을 합니다.

OCI의 이미지 사양은 컨테이너 이미지의 구축 방식을 정의합니다. 이미지 생성은 "이미지 매니페스트, 파일 시스템 직렬화, 이미지 설정"으로 이어집니다.

이러한 사양이 결합되어 이미지를 올바르게 실행하는 데 필요한 컨테이너 이미지와 종속 항목, 환경, 매개 변수 등을 정의합니다.


컨테이너의 추상화

Linux 컨테이너는 애플리케이션 개발, 배포, 관리 방식을 혁신적으로 발전시켰습니다. Linux 컨테이너 이미지는 이식성과 버전 관리 기능을 제공하여 개발자의 노트북에서 수행하는 작업을 프로덕션에서도 수행할 수 있게 합니다.

실행 중인 Linux 컨테이너는 VM(가상 머신)보다 리소스를 적게 사용하지만 애플리케이션 격리를 상당 부분 유지하므로 대규모 애플리케이션의 일부로 더 쉽게 관리할 수 있습니다.

Linux 컨테이너의 핵심은 작업을 수행하는 데 사용하는 소프트웨어가 아니라 신속한 개발과 비즈니스 요구 사항에 신속하게 대응하는 것입니다. 컨테이너를 단일 애플리케이션을 실행하는 수단으로만 생각하지 마시기 바랍니다. 컨테이너를 사용해 애플리케이션 또는 서비스의 일부를 실행할 수 있습니다. 따라서 Kubernetes 등의 기타 기술을 사용하여 컨테이너화된 애플리케이션을 자동화하고 오케스트레이션할 수 있습니다. 컨테이너는 애플리케이션 논리, 런타임 및 종속 항목을 호스팅하므로 컨테이너에 모든 요소를 포함하거나 마이크로서비스로 작동하는 여러 개의 컨테이너로 이루어진 애플리케이션을 구성할 수 있습니다.


프로덕션 환경에서의 컨테이너

컨테이너는 소프트웨어와 애플리케이션을 고객에게 보다 신속하게 제공하기 위한 매우 효과적인 방법입니다. 즉, 프로덕션 환경에서 컨테이너를 활용할 수 있으며 컨테이너에서 실행되는 프로세스에 크게 의존합니다.

여기서 Red Hat이 도움을 드립니다. Red Hat은 안전하고 안정적이며 신뢰할 수 있는 컨테이너와 같은 기술을 개발하기 위해 오픈소스 커뮤니티에서 오랫동안 활발하게 활동해 왔습니다. Red Hat은 이 분야에서 기여를 하고 있으며 이에 따라 해당 기술을 지원하고 있습니다. 지원이나 도움이 필요할 때 Red Hat이 있습니다.

Red Hat의 기술은 추측이 아닌 확실성을 바탕으로 컨테이너를 적절하게 구축할 수 있도록 합니다. 컨테이너를 위해 구축된 플랫폼에서 개발팀이 작업하든, 뛰어난 운영 체제에서 컨테이너 인프라를 실행하든, 컨테이너에서 생성된 대용량 데이터에 대한 스토리지 솔루션을 제공하든, Red Hat의 솔루션이 모두 해결해 드릴 수 있습니다.

컨테이너의 더 큰 가능성을 살펴보세요