Linux 컨테이너란?
Linux® container는 시스템의 나머지 부분과 분리된 1개 이상의 프로세스 세트입니다. 이를 실행하는 데 필요한 모든 파일은 별개의 이미지에서 제공됩니다. 즉, Linux 컨테이너는 개발 단계에서 테스트 단계와 프로덕션 단계를 거치는 동안 뛰어난 이식성과 일관성을 유지합니다. 따라서 Linux 컨테이너는 전통적인 테스트 환경을 복제해야 하는 개발 파이프라인보다 훨씬 더 빨리 사용할 수 있습니다. 컨테이너 파이프라인에 보안을 포함하고 인프라를 보호함으로써 컨테이너는 안정성, 확장성, 신뢰성을 유지합니다. 또한 일관된 행동과 기능을 유지하면서 퍼블릭, 프라이빗, 온프레미스, 하이브리드 클라우드 환경과 데이터센터 간에 컨테이너화된 애플리케이션을 손쉽게 이동할 수 있습니다.
Linux 컨테이너의 장점
애플리케이션을 개발한다고 가정해 보세요. 노트북에서 작업 중이고 환경은 특정한 구성을 갖추고 있습니다. 다른 개발자들의 구성은 약간 다를 수도 있지만, 개발 중인 애플리케이션은 해당 구성과 그 구성에 포함된 특정 라이브러리, 종속성, 파일을 이용합니다. 한편 소속된 기업에는 자체 구성과 자체 지원 파일 세트로 표준화된 개발 환경과 프로덕션 환경이 있습니다. 개발자로서 여러분은 그러한 환경을 되도록 빨리 로컬에서 에뮬레이션하고 싶지만 서버 환경을 재생성하는 데 따르는 모든 오버헤드는 피하고자 합니다. 이러한 환경 전반에서 애플리케이션을 실행하고, 품질 보증을 통과하며, 큰 문제점과 재작성, 그리고 시간이 많이 소요되는 재해 복구 없이 배포할 수 있는 한 가지 방법은 컨테이너를 사용하는 것입니다.
컨테이너를 활용하면 담당 영역을 분리하여 개발 팀과 운영 팀 간의 충돌을 줄일 수 있습니다. 개발자는 애플리케이션에 집중할 수 있고 운영 팀은 인프라에 주력할 수 있습니다. 또한 컨테이너는 오픈소스 기술을 기반으로 하기 때문에 최신 기술을 최대한 빠르게 활용할 수 있습니다. Podman, Skopeo, Buildah, CRI-O, 쿠버네티스, Docker 등 컨테이너 기술은 애플리케이션 개발 및 배포를 간소화 및 가속화하고 빠르게 확장하며 오케스트레이션하는 데 도움을 줍니다.
Red Hat 리소스
LXC란?
Linux 컨테이너(Linux Containers, LXC) 프로젝트는 일련의 툴, 템플릿, 라이브러리 및 언어 바인딩을 제공하는 오픈소스 컨테이너 플랫폼입니다. LXC에는 컨테이너를 시작할 때 사용자 환경을 개선하는 간단한 커맨드라인 인터페이스가 있습니다.
LXC는 여러 Linux 기반 시스템에 설치할 수 있는 운영 체제 수준의 가상화 환경을 제공합니다. Linux 배포판의 패키지 리포지토리를 통해 LXC를 사용할 수도 있습니다.
컨테이너 표준, 역사 및 산업 동향
현재 컨테이너 기술이라고 불리는 기술은 2000년에 처음 등장할 당시, FreeBSD 시스템을 여러 하위 시스템, 즉 감옥으로 파티셔닝할 수 있는 FreeBSD 감옥 기술에서 착안되었습니다. 감옥은 시스템 관리자가 조직 내외부의 여러 사용자들과 공유할 수 있는 안전한 환경으로 사용하도록 개발되었습니다.
2001년에는 Jackques Gélinas의 VServer 프로젝트를 통해 격리된 환경이 Linux에도 구현되었습니다. 이를 기반으로 Linux에 여러 제어된 유저스페이스가 마련되었고, 이게 바로 오늘날의 Linux 컨테이너가 되었습니다.
이후 아주 빠르게 더 많은 기술들이 결합되면서 이 격리된 접근 방식이 실현되었습니다. 컨트롤 그룹(cgroups)은 프로세스 또는 프로세스 그룹의 리소스 사용을 제어하고 제한하는 커널 기능입니다. 그리고 유저스페이스를 설정하고 해당 프로세스를 관리하는 초기화 시스템인 systemd는 cgroups에서 이러한 격리된 프로세스에 대해 강화된 제어권을 제공하기 위해 사용합니다. 이 두 기술은 모두 Linux의 전체적인 제어권을 강화하는 동시에 환경이 격리된 상태를 유지하는 방법에 대한 프레임워크 역할을 했습니다.
Docker의 시작
Docker는 2008년, dotCloud를 통해 동명의 컨테이너 기술과 함께 등장했습니다. Docker 기술은 새로운 계층화된 이미지를 실행하고 빌드하기 위한 간단한 커맨드라인 인터페이스, 서버 데몬, 사전 빌드된 컨테이너 이미지의 라이브러리, 레지스트리 서버의 개념 등 새로운 개념과 툴을 추가했습니다. 이러한 기술들이 결합되면서 사용자는 계층화된 새로운 컨테이너를 빠르게 구축하고 다른 사용자들과 쉽게 공유할 수 있게 되었습니다.
컨테이너 기술의 상호 운용성을 보장하기 위한 3가지 주요 기준은 OCI 이미지 사양, 배포 사양, 런타임 사양입니다. 이러한 사양들이 결합되어 커뮤니티 프로젝트, 상용 제품 및 클라우드 공급업체가 상호 운용 가능한 컨테이너 기술을 구축할 수 있게 됩니다(사용자 정의로 빌드된 이미지를 클라우드 공급업체의 레지스트리 서버로 푸시하는 것과 같음). 현재 Red Hat과 Docker는 다른 기업들과 함께 컨테이너 형식, 이미지 사양, 런타임의 개방형 산업 표준을 만드는 개방형 거버넌스 구조인 Open Container Initiative(OCI)에 참여하고 있습니다.
컨테이너 오케스트레이션 및 관리
컨테이너는 동일한 운영 체제 커널을 공유하고 애플리케이션 프로세스를 시스템의 나머지 영역으로부터 격리하므로 개발, 테스트, 프로덕션 구성에서 전체를 마이그레이션하고, 열고, 사용할 수 있습니다. 또한 경량화되고 이식 가능하기 때문에 더욱 신속하게 애플리케이션을 개발하고 비즈니스 요구가 발생할 때 이를 충족할 수 있습니다. 컨테이너 오케스트레이션은 이러한 배포를 전사적으로 관리하는 방법입니다.
쿠버네티스는 Linux 컨테이너 운영을 자동화하는 오픈소스 플랫폼입니다. 쿠버네티스에서는 컨테이너화된 애플리케이션의 배포 및 확장과 상태 모니터링에 따른 수동 프로세스가 대부분 필요하지 않습니다. 쿠버네티스를 사용하면 수요에 따라 리소스를 신속하게 할당할 수 있으므로 성능을 개선하고 오버프로비저닝을 방지할 수 있습니다. 쿠버네티스는 실제 또는 가상 머신의 클러스터에서 컨테이너를 스케줄링하고 실행하는 플랫폼을 제공합니다. 쿠버네티스 아키텍처는 클러스터의 정의된 상태를 유지하기 위해 연동하는 구성 요소들로 클러스터를 나눕니다. Red Hat® OpenShift®는 클라우드 네이티브 컴퓨팅 재단(CNCF)에서 인증받은 쿠버네티스 오퍼링으로, 하이브리드 클라우드 환경 전반에서 일관된 방식으로 클라우드 네이티브 애플리케이션을 제공하기 위한 완전한 플랫폼의 기반으로 쿠버네티스를 사용합니다.
컨테이너와 가상 머신 비교
가상화는 하이퍼바이저에서 관리하는 컴퓨터 하드웨어 요소를 여러 가상 컴퓨터로 나눌 수 있는 추상화 계층을 소프트웨어를 통해 생성합니다. 이러한 가상 머신(VM) 환경에서는 컨테이너를 실행할 수 있으나 컨테이너가 가상 환경에 연결되어 있지는 않습니다. 컨테이너는 가상화를 다루는 방식으로, 컨테이너에는 하이퍼바이저가 필요 없으므로 리소스를 더 빠르게 프로비저닝하고 신규 애플리케이션을 더 신속하게 제공할 수 있습니다. Red Hat® OpenShift® Virtualization과 같은 일부 소프트웨어는 컨테이너를 오케스트레이션하고 가상 머신을 관리할 수 있지만 컨테이너와 가상 머신은 상호 보완적인 반면 다음과 같이 접근 방식이 서로 다릅니다.
- 가상화의 경우 하나의 물리 하드웨어 시스템에서 여러 개의 시뮬레이션된 환경이나 전용 리소스를 생성할 수 있습니다.
- 컨테이너는 동일한 운영 체제 커널을 공유하고 애플리케이션 프로세스를 시스템의 나머지 영역에서 분리합니다. 예를 들어 ARM Linux 시스템은 ARM Linux 컨테이너를, x86 Linux 시스템은 x86 Linux 컨테이너를, x86 Windows 시스템은 x86 Windows 컨테이너를 실행합니다. Linux 컨테이너는 이식성이 매우 뛰어나지만 기반 시스템과 호환이 가능해야 합니다.
VM을 생성하는 하이퍼바이저가 실제 머신의 리소스에 연결되어 있으므로 VM의 기능은 제한적입니다. 반면 컨테이너는 동일한 운영 체제 커널과 패키지 애플리케이션을 공유합니다. 컨테이너는 하드웨어 대신 운영 체제를 가상화하므로 컨테이너와 VM은 리소스 격리 및 할당 기능이 유사해도 서로 다르게 기능합니다.
또한 컨테이너와 가상 머신은 IT 인프라 내에서 함께 사용할 수 있습니다. 하이브리드 환경에서는 컨테이너화된 애플리케이션과 VM 기반 애플리케이션이 같은 인프라에서 실행될 수 있으므로 유연한 접근 방식으로 다양한 요구 사항을 충족할 수 있습니다. 이를 컨테이너 네이티브 가상화라고 합니다. 조직은 기존 VM 인프라를 사용하여 컨테이너화된 애플리케이션을 호스팅하거나, 전체 IT를 완전히 재구성할 필요 없이 워크로드를 컨테이너로 점차적으로 마이그레이션할 수 있습니다.
컨테이너 보안 및 거버넌스
원래부터 안전한 것은 아무것도 없습니다. 컨테이너 보안에는 유동적인 부분이 많습니다. 따라서 컨테이너 파이프라인과 애플리케이션은 물론, 배포 환경과 인프라를 보호해야 하고, 엔터프라이즈 보안 툴 및 정책과 통합하기 위한 계획이 필요합니다. 정적인 보안 정책과 체크리스트는 기업의 컨테이너에 맞게 확장되지 않습니다. 따라서 컨테이너 파이프라인에 더 강력한 보안을 구축하는 방법을 알아야 합니다.
DevSecOps 접근 방식에서는 문화, 자동화, 플랫폼 설계가 보안과 통합되고 팀들이 보안을 공동의 책임으로 취급합니다. 컨테이너 보안 정책은 커뮤니케이션 경로와 액세스 제어 전반의 격리와 신뢰를 다루고, 컨테이너가 동작 중일 때 발생할 수 있는 잠재적 취약점을 해결하기 위한 맬웨어 검사 및 이미지 서명을 위한 툴을 사용해야 합니다. DevSecOps 접근 방식을 사용하면 전체 IT 라이프사이클에서 일관된 보안을 유지할 수 있습니다.
서버리스 아키텍처와 컨테이너
서버리스란 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있는 클라우드 네이티브 개발 모델입니다. '서버리스'라고 해서 서버가 없다는 의미가 아닙니다. 서버가 애플리케이션 개발로부터 추상화되었다는 뜻입니다. 클라우드 공급업체가 서버 인프라에 대한 프로비저닝, 유지 관리, 스케일링 등의 일상적인 작업을 처리합니다.
서버리스를 사용하면 개발자는 배포를 위해 코드를 컨테이너에 패키징하기만 하면 됩니다. 서버리스 애플리케이션은 배포되고 나면 수요에 대응하여 필요에 따라 자동으로 스케일 업되거나 스케일 다운됩니다. 퍼블릭 클라우드 공급업체의 서버리스 오퍼링은 일반적으로 이벤트 기반 실행 모델을 통해 온디맨드로 미터링됩니다. 그러므로 서버리스 기능이 유휴 상태일 때는 아무런 비용도 들지 않습니다.
활용 사례와 애플리케이션
다양한 워크로드와 활용 사례에 대해 컨테이너를 배포할 수 있습니다. 컨테이너는 클라우드 네이티브 개발 방식에 필요한 기반 기술을 제공하므로 DevOps와 CI/CD(지속적 통합 및 지속적 배포)를 시작하고 서버리스로 전환할 수 있습니다.
컨테이너 기반 애플리케이션은 고도로 분산된 클라우드 아키텍처 전반에서 작동할 수 있습니다. 애플리케이션 런타임은 개발, 제공, 통합, 자동화를 위한 통합 환경을 지원하는 툴을 제공합니다.
또한 컨테이너에는 통합 기술을 배포할 수 있으므로 Apache Kafka를 통한 실시간 데이터 스트리밍과 같이 애플리케이션과 데이터를 연결하는 방법을 쉽게 확장할 수 있습니다. 마이크로서비스 아키텍처를 구축하고 있는 경우 컨테이너는 각 마이크로서비스의 이상적인 배포 단위이자 마이크로서비스를 연결하는 서비스 메쉬 네트워크입니다.
Red Hat 컨테이너를 선택해야 하는 이유
Red Hat은 오랫동안 오픈소스 커뮤니티에서 컨테이너에 대한 보안, 안정성, 신뢰성 및 지원을 확보하기 위해 노력해 왔습니다. 또한 Red Hat은 두 번째로 큰 Docker 및 쿠버네티스 코드베이스 기여자이며, OCI, 클라우드 컴퓨팅 재단 등과 협력하여 컨테이너 기능, 신뢰성, 보안을 개선하고 있습니다. 모든 오픈소스 프로젝트와 마찬가지로 Red Hat은 코드를 개발하고 개선 사항을 업스트림 코드베이스에 다시 제공하며, 기술 발전을 공유합니다.
Red Hat의 컨테이너 중심 솔루션과 교육 서비스는 컨테이너의 모든 기능을 충분히 활용할 수 있는 인프라 플랫폼, 제어권, 지식을 제공합니다. 컨테이너를 염두에 두고 구축한 플랫폼에 개발 팀을 투입하든, 효율적이고 효과적인 운영 체제에서 컨테이너 인프라를 실행하든, 컨테이너에서 생성된 대규모 데이터를 위한 스토리지 솔루션을 제공하든 Red Hat 솔루션이 무엇이든지 도와드리겠습니다.
Red Hat OpenShift는 컨테이너와 중요 애플리케이션의 보안과 신뢰성에 대해 확장 가능한 접근 방식을 제공합니다. Red Hat OpenShift는 통합 툴/서비스 세트를 제공하여 빌드 및 배포부터 실행 및 관리에 이르는 애플리케이션 개발의 전체 라이프사이클을 간소화합니다. 그리고 멀티클라우드 및 하이브리드 환경에서 AI로 애플리케이션을 빌드하고 현대화하는 등 애플리케이션 현대화의 복잡성을 간소화하여 개발자와 IT 운영 팀의 효율성과 생산성을 높여줍니다.
Red Hat Enterprise Linux는 클라우드로의 마이그레이션부터 엣지 및 컨테이너 활용과 AI 워크로드 실험에 이르는 IT 여정에서 다음 단계로 진행할 수 있는 안정적인 기반의 역할을 합니다. 개발자는 컨테이너 툴, 데이터베이스, 프로그래밍 언어, 런타임에 액세스하여 애플리케이션 개발을 간소화하는 동시에 풋프린트 전반에서 일관된 환경을 경험할 수 있습니다. 컨테이너 툴을 사용하면 복잡성을 줄이고 이식성과 표준성을 높이는 동시에 커스터마이징되고 강화된 Red Hat Enterprise Linux 운영 체제 이미지들을 결합할 수 있습니다.
Red Hat Enterprise Linux 이미지 모드는 컨테이너 기술을 사용하여 OS를 구축, 배포, 관리하는 간편하고 일관된 접근 방식입니다. 사용자는 애플리케이션과 동일한 컨테이너 툴과 워크플로우를 통해 OS를 관리해 팀들 간 일관된 경험과 공통 언어를 생성할 수 있습니다. 이미지 모드는 서버의 구성을 동일하게 유지하게 함으로써 시스템 불안정과 보안 리스크로 이어질 수 있는 편차를 제거해 드리프트 문제를 해결합니다. 또한 변경 불가능한 시스템 이미지로 공격 표면을 줄이고 각 이미지의 콘텐츠를 정확히 파악할 수 있으므로 보안을 강화하는 데 도움이 됩니다.
레드햇 공식 블로그
레드햇 공식 블로그에서 고객, 파트너, 커뮤니티 에코시스템 등 현재 화제가 되는 최신 정보를 살펴 보세요.