개념
Linux® 컨테이너는 시스템의 나머지 부분과 분리된 1개 이상의 프로세스 세트입니다. 이러한 프로세스를 실행하는 데 필요한 모든 파일은 개별 이미지에서 제공되므로, Linux 컨테이너는 개발 단계에서 테스트, 프로덕션에 이르기까지 이식성과 일관성을 유지할 수 있습니다. 따라서 전통적인 테스트 환경을 복제해야 하는 개발 파이프라인보다 사용 시점을 훨씬 더 앞당길 수 있습니다. 대중성과 사용의 편의성 때문에 컨테이너 역시 IT 보안의 중요한 부분입니다.
Linux 컨테이너를 사용해야 하는 이유
애플리케이션을 개발하고 있다고 가정해 봅시다. 특정 구성이 있는 환경에서 노트북으로 작업하는 상황입니다. 다른 개발자들의 구성은 약간 다를 수 있습니다. 현재 개발 중인 애플리케이션은 이 구성을 기반으로 특정 라이브러리, 종속성 및 파일에 종속되어 있습니다. 동시에 회사는 자체 구성과 지원 파일 세트로 표준화된 개발 및 프로덕션 환경을 갖추고 있습니다. 이때, 서버 환경을 재구축하는 부가적인 작업 없이 가능한 한 로컬에서 이러한 환경을 에뮬레이션하려고 합니다. 그렇다면 어떻게 이러한 환경 전체에서 애플리케이션을 구동을 지원하고, 품질 검사를 통과하고, 큰 문제나 수정 없이 애플리케이션을 배포할 수 있을까요? 컨테이너'를 사용하면 가능합니다.
애플리케이션이 포함된 컨테이너는 필수 라이브러리, 종속성과 파일을 사용하므로 문제없이 원활하게 애플리케이션을 프로덕션으로 진행할 수 있습니다. 사실, Buildah와 같은 오픈소스 툴을 사용하여 생성된 컨테이너 이미지 콘텐츠는 RPM 패키지, 구성 파일 등으로 구성되어 있으므로 Linux 배포판 설치로 볼 수도 있습니다. 그러나 컨테이너 이미지 배포가 새로운 운영 체제를 설치하는 것보다 훨씬 간편하기 때문에 위험을 방지할 수 있습니다.
이러한 일반적인 예시 외에도, 이식성, 구성 가능성 및 격리가 필요한 경우 Linux 컨테이너를 다양한 문제에 적용할 수 있습니다. Linux 컨테이너의 핵심은 신속하게 개발하고 새로운 비즈니스 요구 사항을 충족할 수 있다는 점입니다. Apache Kafka를 통한 실시간 데이터 스트리밍과 같은 일부 경우, 컨테이너는 애플리케이션에 필요한 확장성을 제공하는 유일한 방법으로서 매우 중요합니다. 온프레미스, 클라우드, 하이브리드 등 인프라 유형에 관계없이, 컨테이너는 사용자의 요구 사항을 충족합니다. 물론, 적절한 컨테이너 플랫폼을 선택하는 것은 컨테이너 자체만큼이나 중요합니다.
Red Hat® OpenShift®는 하이브리드 클라우드, 엔터프라이즈 컨테이너, 쿠버네티스 개발 및 배포에 필요한 모든 사항을 포함합니다.
가상화와 컨테이너 기술
그보다는 상호 보완적인 관계에 가깝습니다. 두 개념을 간단히 비교해 봅시다.
- 가상화는 단일 하드웨어 시스템에서 여러 운영 체제(Windows 또는 Linux)가 동시에 실행될 수 있도록 합니다.
- 컨테이너는 동일한 운영 체제 커널을 공유하고 시스템의 나머지 부분으로부터 애플리케이션 프로세스를 격리합니다. 예를 들어, ARM Linux 시스템은 ARM Linux 컨테이너를 실행하고, x86 Linux 시스템은 x86 Linux 컨테이너를 실행하고, x86 Windows 시스템은 x86 Windows 컨테이너를 실행합니다. Linux 컨테이너는 이식성이 매우 뛰어나지만 기본 시스템과 호환되어야 합니다.
이것은 무슨 의미일까요? 먼저 가상화는 하이퍼바이저를 사용하여 하드웨어를 에뮬레이션하고 이를 통해 여러 운영 체제를 병렬로 실행하는데, 이 경우 컨테이너를 사용할 때만큼 경량화할 수는 없습니다. 리소스와 기능이 제한되어 있을 때는 고밀도로 배포할 수 있는 경량화된 애플리케이션이 필요합니다. Linux 컨테이너는 운영 체제에서 기본으로 실행되고 모든 컨테이너 전체에서 운영 체제를 공유하므로 애플리케이션과 서비스를 가볍게 유지할 수 있으며 빠른 속도로 동시에 실행할 수 있습니다.
Linux 컨테이너는 애플리케이션 개발, 배포, 관리 방식을 혁신적으로 발전시켰습니다. Linux 컨테이너 이미지는 이식성과 버전 관리 기능을 제공하여 개발자의 노트북에서 수행하는 작업을 프로덕션에서도 수행할 수 있게 합니다. 골든 이미지라고 하는 특별한 유형의 컨테이너 이미지는 시스템 구성을 위한 일관되고 안정적인 기준을 만듭니다. 실행 중인 Linux 컨테이너는 가상 머신보다 리소스를 적게 사용하고 표준 인터페이스(시작, 중지, 환경 변수 등)가 갖춰져 있으며 애플리케이션 격리를 유지할 뿐 아니라 대규모 애플리케이션(여러 컨테이너)의 일부로 더 쉽게 관리할 수 있습니다. 또한 이러한 멀티컨테이너 애플리케이션은 여러 클라우드에 걸쳐 오케스트레이션할 수 있습니다.
컨테이너 오케스트레이션과 가상 머신 관리를 결합하는 툴도 있습니다. Red Hat Summit 2020 트랙에서 자세한 내용을 알아보세요. 이 트랙에는 그러한 툴을 소개하는 브레이크아웃 세션이 포함되어 있습니다.
LXC란?
LXC(Linux 컨테이너) 프로젝트는 툴, 템플릿, 라이브러리, 언어 바인딩 세트를 제공하는 오픈소스 컨테이너 플랫폼입니다. LXC에는 컨테이너를 시작할 때 사용자 환경을 개선하는 간단한 커맨드라인 인터페이스가 있습니다.
LXC는 대부분의 Linux 기반 시스템에 설치할 수 있는 운영 체제 수준의 가상화 환경을 제공합니다. 사용 중인 Linux 배포판에서 패키지 리포지토리를 통해 제공할 수도 있습니다.
컨테이너의 간략한 역사
우리가 컨테이너 기술이라고 부르는 개념은 2000년에 처음 등장한 FreeBSD Jail이며, FreeBSD 시스템을 여러 하위 시스템 또는 Jail로 분할할 수 있도록 하는 기술입니다. Jail은 시스템 관리자가 조직 내외부의 여러 사용자와 공유할 수 있는 안전한 환경으로 개발되었습니다.
2001년, Jacques Gélinas의 VServer 프로젝트를 통해 Linux에 격리된 환경이 구현되었습니다. Linux에서 다수의 통제된 사용자 공간에 이러한 기반을 마련한 후에 오늘날의 Linux 컨테이너가 형태를 갖추기 시작했습니다.
더 많은 기술이 매우 빠르게 결합되면서 이러한 격리된 접근 방식이 실제화되고 있습니다. 제어 그룹(cgroups)은 프로세스 또는 프로세스 그룹의 리소스 사용을 제어하고 제한하는 커널 기능입니다. 또한 cgroups는 사용자 공간을 설정하고 해당 프로세스를 관리하는 초기화 시스템인 systemd를 사용하여 이처럼 격리된 프로세스를 더 효과적으로 제어합니다. 이러한 기술은 모두 Linux에 대한 전반적인 제어 기능을 추가하면서 환경을 분리된 상태로 유지할 방법을 제시하는 프레임워크가 되었습니다.
Docker 개요
2008년에 dotCloud를 통해 동명의 컨테이너 기술과 함께 Docker가 등장했습니다. Docker 기술은 새로운 계층화된 이미지를 실행하고 구축하는 간편한 CLI와 서버 데몬, 사전 구축된 컨테이너 이미지 라이브러리 및 레지스트리 서버의 개념 등 여러 가지의 새로운 개념과 툴을 선보였습니다. 이러한 기술을 결합해 새로운 계층화된 컨테이너를 신속하게 구축하고 다른 사용자들과 간편하게 공유할 수 있었습니다.
여기에는 컨테이너 기술의 상호운용성을 보장하기 위한 세 가지 주요 표준인 OCI 이미지, 배포 및 런타임 사양이 있습니다. 커뮤니티 프로젝트, 상용 제품, 클라우드 공급업체는 이러한 사양들을 결합하여 상호 운용 가능한 컨테이너 기술을 구축할 수 있습니다(사용자 정의 방식으로 구축한 이미지를 클라우드 제공업체의 레지스트리 서버로 푸시하는 경우를 생각해 보시기 바랍니다). 오늘날, Red Hat과 Docker는 컨테이너 기술의 개방형 산업 표준화를 위해 노력하고 있는 OCI의 멤버입니다.
컨테이너 보안이란?
컨테이너를 사용하는 곳이 많은데, 과연 안전성은 어떨까요? 컨테이너 보안에는 유동적인 부분이 많습니다. 컨테이너 파이프라인과 애플리케이션, 배포 환경과 인프라를 보호해야 하고, 엔터프라이즈 보안 툴 및 정책과 통합하기 위한 계획도 수립해야 합니다. 체계적인 계획이 필요한 고객을 위해 Red Hat이 도와드리겠습니다.
Red Hat Linux 컨테이너를 선택해야 하는 이유
Red Hat은 안전하고 안정적이며 신뢰할 수 있는 컨테이너와 같은 기술을 개발하기 위해 오픈소스 커뮤니티에서 오랫동안 활발하게 활동해 왔습니다. Red Hat은 이런 활동을 통해 해당 기술을 지원하고 있습니다. 도움이 필요하시면 Red Hat이 도와드리겠습니다.
Red Hat의 기술은 검증된 결과를 바탕으로, 컨테이너를 올바로 사용하도록 도와드립니다. 컨테이너를 고려해 구축한 플랫폼에서 개발 팀이 작업하든, 뛰어난 운영 체제에서 컨테이너 인프라를 실행하든, 컨테이너에서 생성된 대용량 데이터에 대한 스토리지 솔루션을 제공하든, Red Hat의 솔루션이 모두 해결해 드릴 수 있습니다.