컨테이너

Linux 컨테이너란?

Linux® 컨테이너는 시스템의 나머지 부분과 격리된 프로세스 세트입니다. 이러한 프로세스를 실행하는 데 필요한 모든 파일은 고유한 이미지에서 실행되므로, Linux 컨테이너는 개발 단계에서 테스트, 프로덕션에 이르기까지 이식성과 일관성을 유지할 수 있습니다. 따라서 전통적인 테스트 환경을 복제하는 개발 파이프라인보다 훨씬 더 빠른 배포를 실현할 수 있습니다.

컨테이너란

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

애플리케이션을 실행하는 컨테이너는 필수 라이브러리, 종속성과 파일을 사용하므로 문제없이 원활하게 애플리케이션을 프로덕션으로 이행할 수 있습니다. 사실, 컨테이너 이미지 콘텐츠는 RPM 패키지 구성 파일 등으로 구성되어 있으므로 Linux 배포 설치로 볼 수도 있습니다. 그러나 컨테이너 이미지 배포가 새로운 운영 체제를 설치하는 것보다 훨씬 간편합니다. 위험을 회피하고 모두가 이점을 얻을 수 있습니다.

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

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

그렇지 않습니다. 가상화의 보완적인 역할이라고 생각하십시오. 두 개념을 간단하게 비교해 봅시다.

  • 가상화는 단일 시스템에서 여러 운영 체제(Windows 또는 Linux)가 동시에 실행될 수 있도록 합니다.
  • 컨테이너는 동일한 운영 체제 커널을 공유하고 시스템의 나머지 부분으로부터 애플리케이션 프로세스를 격리합니다. 예를 들어, ARM Linux 시스템은 ARM Linux 컨테이너를 실행하고, x86 Linux 시스템은 x86 Linux 컨테이너를 실행하고, x86 Windows 시스템은 x86 Windows 컨테이너를 실행합니다. Linux 컨테이너는 이식성이 매우 뛰어나지만 기본 시스템과 호환되어야 합니다.

가상화와 컨테이너 비교

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

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에서 네트워크 이름에 이르기까지 모든 것을 Linux 커널 내에서 가상화할 수 있었습니다. 이보다 새로운 방법 중 하나로, 사용자 네임스페이스를 사용하면 "사용자와 그룹 ID를 네임스페이스별로 매핑할 수 있습니다. 컨테이너의 측면에서 이는 사용자와 그룹이 컨테이너 밖에서 특정 작업을 수행할 권한이 없어도 컨테이너 내에서 그러한 권한을 가질 수 있음을 의미합니다." 이러한 개선에 더해, LXC(Linux 컨테이너 프로젝트)를 통해 매우 중요한 툴, 템플릿, 라이브러리 및 언어 바인딩이 추가되어 컨테이너 사용 시의 사용자 환경이 개선되었습니다. LXC를 활용하면 간편한 CLI(command line interface)를 사용하여 컨테이너를 시작할 수 있습니다.

Docker 개요

2008년에 dotCloud를 통해 동명의 컨테이너 기술과 함께 Docker가 등장했습니다. Docker 기술은 새로운 레이어 이미지를 실행하고 구축하는 간편한 CLI와 서버 데몬, 사전 구축된 컨테이너 이미지 라이브러리 및 레지스트리 서버의 개념 등 여러 가지의 새로운 개념과 툴을 소개했습니다. 이러한 기술을 결합해 새로운 레이어 컨테이너를 신속하게 구축하고 다른 사용자들과 간편하게 공유할 수 있었습니다.

Red Hat은 이러한 새로운 에코시스템에서 협업이 가져오는 큰 이점을 인식하고 기본 기술을 OpenShift Container Platform에 적용했습니다. 중요 기술을 단일 벤더가 제어하면서 오는 불안을 해소하기 위해 Docker Inc.는 많은 기본 구성 요소를 커뮤니티가 주도하는 오픈소스 프로젝트에 기부했습니다(runC는 OCI(Open Containers Initiative)의 일환이며 containerd는 CNCF로 이전됨).

여기에는 컨테이너 기술의 상호운용성을 보장하기 위한 세 가지의 주요 표준인 OCI 이미지, 배포 및 런타임 사양이 있습니다. 이러한 사양들을 조합함으로써 커뮤니티 프로젝트, 상업용 제품, 클라우드 공급업체는 상호운용되는 컨테이너 기술을 구축할 수 있습니다 (맞춤 구축한 이미지를 레지스트리 서버의 클라우드 공급업체에 푸시하는 것을 생각해 보시기 바랍니다). 오늘날, Red Hat과 Docker는 컨테이너 기술의 오픈 산업 표준화를 위해 노력하고 있는 OCI의 멤버입니다.


컨테이너 보안

컨테이너를 사용하는 곳이 많은데, 과연 안전성은 어떨까요? 컨테이너 보안에는 유동적인 부분이 많습니다. 컨테이너 파이프라인과 애플리케이션, 개발 환경과 인프라를 보호해야 하고, 엔터프라이즈 보안 툴 및 정책과 통합하기 위한 계획도 수립해야 합니다. 이를 위한 체계적인 계획이 필요하시다면 걱정하지 마십시오. Red Hat이 도와드립니다.


Red Hat이 도와드립니다.

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

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

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