컨테이너란?
클라우드 컴퓨팅에서 컨테이너가 갖는 중요성과 주요 장점, 그리고 Docker, Kubernetes, Istio, Knative 등의 관련 기술로 이루어진 최신 에코시스템에 대해 알아봅니다.
IBM 뉴스레터 구독하기
검은색과 파란색 배경, 그룹화된 기하학적 모양
컨테이너란?

컨테이너는 데스크탑, 기존 IT, 클라우드 등 어디서나 실행할 수 있도록 애플리케이션 코드를 해당 라이브러리 및 종속 항목과 함께 패키징한 소프트웨어 실행 유닛입니다.

이를 위해 컨테이너는 일종의 운영 체제(OS) 가상화를 활용합니다. 이러한 가상화를 수행할 경우 프로세스를 격리하고 이러한 프로세스가 액세스할 수 있는 CPU, 메모리, 디스크의 양을 제어하기 위해 OS 커널의 특성(예: Linux 네임스페이스 및 cgroup, Windows 사일로 및 작업 오브젝트)을 활용할 수 있습니다.

컨테이너는 작고 빠르며 이동이 가능합니다. 가상 머신과는 달리 컨테이너는 모든 인스턴스에 게스트 OS를 포함할 필요가 없기 때문입니다. 그 대신 호스트 OS의 기능과 리소스를 활용합니다.

컨테이너는 수십 년 전에 처음 등장했습니다. 당시는 FreeBSD Jail, AIX Workload Partition 등과 같은 버전이었지만, 현재 개발자들 대부분은 Docker가 첫선을 보인 2013년에 현대식 컨테이너의 시대가 시작되었다고 기억합니다.

컨테이너와 가상 머신 비교

컨테이너를 더 잘 이해하는 한 가지 방법은 기존의 가상 머신(VM)과의 차이점을 살펴보는 것입니다. 온프레미스 또는 클라우드의 기존 가상화 환경에서는 하이퍼바이저를 활용하여 물리적 하드웨어를 가상화합니다. 그리고 각각의 VM에는 게스트 OS, 이 OS가 실행되는 데 필요한 하드웨어의 가상 복제본, 그리고 애플리케이션과 그 라이브러리 및 종속 항목이 있습니다.

컨테이너는 기본 하드웨어를 가상화하지 않고 운영 체제(일반적으로 Linux)를 가상화합니다. 따라서 각각의 개별 컨테이너에는 오직 애플리케이션과 그 라이브러리 및 종속 항목만 포함되어 있습니다. 이렇게 게스트 OS가 없기 때문에 컨테이너는 가볍고 빠르며 이동이 가능합니다.

이 비교에 대해 자세히 실펴보려면 "컨테이너 및 VM: 차이점"을 참조하세요.

컨테이너의 장점

특히 VM과 비교하여, 컨테이너의 주요 장점은 경량화와 이식성을 제공하는 추상화 레벨을 제공하는 것입니다. 컨테이너의 주요 장점은 다음과 같습니다.

경량: 컨테이너는 시스템 OS 커널을 공유합니다. 따라서 애플리케이션마다 완전한 OS 인스턴스를 둘 필요가 없습니다. 그 덕분에 리소스 측면에서 컨테이너 파일은 작고 편리합니다. 특히, 컨테이너는 크기가 작기 때문에 빠르게 시작할 수 있습니다. 그리고 수평 스케일링되는 클라우드 네이티브 애플리케이션을 더 효과적으로 지원할 수 있습니다.

이동성과 플랫폼 독립성: 컨테이너가 모든 종속 항목을 함께 전달하므로, 한 번 만든 소프트웨어는 재구성 없이 노트북, 클라우드, 온프레미스 컴퓨팅 환경에서 실행할 수 있습니다.

현대적인 개발 및 아키텍처 지원: 컨테이너는 플랫폼 간 배치 이동성/일관성과 작은 크기 덕분에 현대적인 코드를 배치하면서 조금씩 증분되는 개발 방식과 애플리케이션 패턴(예: DevOps서버리스마이크로서비스)에 안성맞춤입니다.

사용률 향상: 개발자와 운영자는 이전의 VM처럼 컨테이너를 활용하여 물리적 시스템의 CPU 및 메모리 사용률을 높일 수 있습니다. 컨테이너의 보다 큰 장점은 마이크로서비스 아키텍처도 허용하므로 애플리케이션 구성요소를 보다 미세하게 배치 및 스케일링할 수 있다는 점입니다. 이는 단일 구성요소의 과중한 로드로 인해 전체 모놀리식 애플리케이션을 확장해야 하는 경우 매력적인 대안을 제시합니다.

최근 IBM 설문조사(PDF, 1.4MB)에서 개발자와 IT 경영진은 컨테이너 사용 시 얻을 수 있는 다른 여러 장점도 언급했습니다.

전체 보고서 다운로드: 엔터프라이즈의 컨테이너(PDF, 1.4MB)

컨테이너에 대한 사용 사례

컨테이너는 특히 클라우드 환경에서 점점 더 두각을 나타내고 있습니다. 많은 기업들은 심지어 자체 애플리케이션과 워크로드에 대한 범용 컴퓨팅 플랫폼으로서 컨테이너를 VM의 대체 요소로 고려하고 있습니다. 이처럼 매우 폭넓게 사용되고 있으나, 그중에서도 특히 컨테이너가 진가를 발휘하는 주요 사용 사례가 있습니다.

  • 마이크로서비스: 컨테이너는 작고 가볍기 때문에, 애플리케이션이 여러 개의 느슨하게 결합되고 독립적으로 배치 가능한 더 작은 서비스로 구성되는 마이크로서비스 아키텍처에 적합합니다.
  • DevOps: 소프트웨어 빌드, 출시, 실행 방법으로 DevOps를 선택하는 팀의 경우 아키텍처인 마이크로서비스와 플랫폼인 컨테이너의 조합을 토대로 활용하는 경우가 많습니다.
  • 하이브리드, 멀티클라우드: 컨테이너는 노트북, 온프레미스, 클라우드 환경 등 어디서나 일관성 있게 실행할 수 있습니다. 따라서 하이브리드 클라우드 및 멀티클라우드 시나리오, 즉 기업의 자체 데이터 센터와 여러 퍼블릭 클라우드를 혼합하여 운영하는 경우에 이상적인 기반 아키텍처가 될 수 있습니다.
  • 애플리케이션 현대화 및 마이그레이션애플리케이션 현대화에 가장 많이 쓰이는 방식 중 하나는 클라우드 마이그레이션에 대비하여 애플리케이션을 컨테이너화하는 것입니다.
컨테이너화

컨테이너를 활용하려면 소프트웨어를 기존과 다른 방식으로 설계하고 패키징해야 합니다. 이 프로세스를 흔히 컨테이너화라고 합니다.

애플리케이션을 컨테이너화하는 경우, 이 프로세스에는 애플리케이션을 관련 환경 변수, 구성 파일, 라이브러리 및 소프트웨어 종속 항목과 함께 패키징하는 것이 포함됩니다. 그 결과 컨테이너 이미지가 생성되고, 컨테이너 플랫폼에서 이를 실행할 수 있습니다.

Kubernetes를 활용하는 컨테이너 오케스트레이션

기업에서 종종 현대적인 클라우드 네이티브 아키텍처의 일부로 컨테이너를 채택하기 시작함에 따라, 개별 컨테이너의 단순성이 분산형 시스템에서 수백 개(심지어 수천 개)의 컨테이너를 관리할 때 수반되는 복잡성과 충돌하기 시작했습니다.

이러한 문제를 해결하기 위해 다음을 포함하여 해당 라이프사이클 전체에서 방대한 볼륨의 컨테이너를 관리하는 방법으로 컨테이너 오케스트레이션이 부상하게 되었습니다.

  • 프로비저닝
  • 이중화
  • 상태 모니터링
  • 리소스 할당
  • 스케일링 및 로드 밸런싱
  • 물리적 호스트 간의 이동

많은 컨테이너 오케스트레이션 플랫폼(예: Apache Mesos, Nomad 및 Docker Swarm)이 구축되었지만, 2014년에 Google에서 소개한 오픈 소스 프로젝트인 Kubernetes는 순식간에 가장 인기 있는 컨테이너 오케스트레이션 플랫폼의 자리를 차지했습니다. Kubernetes는 업계에서 대부분의 기업들이 관련 표준화 작업을 수행하는 플랫폼입니다.

개발자와 운영자는 Kubernetes를 이용하여 YAML 파일을 통해 전체 컨테이너 환경에서 원하는 상태를 선언할 수 있습니다. 그러면 Kubernetes는 해당 애플리케이션이나 워크로드에 대한 지정된 수의 인스턴스 배치, 실패 시에 해당 애플리케이션의 재부팅, 로드 밸런싱, 자동 스케일링, 제로 다운타임 배치 등을 포함한 활동으로 해당 상태를 설정 및 유지하기 위한 모든 처리 작업을 수행합니다.

Kubernetes는 현재 Linux Foundation의 후원을 받는 벤더 중립적인 산업 그룹, CNCF(Cloud Native Computing Foundation)에서 운영하고 있습니다.

아래의 비디오에서 Kubernetes 작동 방식을 간략하게 설명합니다.

Istio, Knative 및 확장형 컨테이너 에코시스템

컨테이너가 애플리케이션을 패키징하고 실행하는 방법으로 인기를 이어감에 따라, 프로덕션 사용 사례를 지원하고 확대하기 위한 툴과 프로젝트로 이루어진 에코시스템도 계속해서 확장되고 있습니다. Kubernetes 외에도 컨테이너 에코시스템에서 가장 인기 있는 두 프로젝트를 들자면 바로 Istio와 Knative입니다.

Istio

개발자가 컨테이너를 활용하여 마이크로서비스 아키텍처를 빌드하고 실행함에 따라, 이제 관리 문제는 개별 컨테이너의 라이프사이클 영역에서 벗어나 무수히 많은 소형 서비스(이를 종종 "서비스 메시"라고 함)가 서로 연결되고 관계를 맺는 방식으로 확장됩니다. Istio는 검색, 트래픽, 모니터링, 보안 등과 관련된 개발자의 과제 해결을 돕기 위해 만들어졌습니다. 

Istio 자세히 보기

Knative

서버리스 아키텍처 역시 특히 클라우드 네이티브 커뮤니티에서 계속 인기를 더해가고 있습니다. 예를 들면, Knative는 컨테이너화된 서비스를 서버리스 기능으로 배포할 수 있다는 점에서 상당한 가치를 제공합니다.

서버리스 기능은 (서버처럼) 상시 실행되면서 필요 시에 응답하는 게 아니라 "제로 스케일링"이 가능합니다. 즉, 호출되지 않으면 전혀 실행되지 않습니다. 이 모델을 수만 개의 컨테이너에 적용할 경우 컴퓨팅 성능을 획기적으로 절약할 수 있습니다. 

아래 동영상에서 Knative에 대해 자세히 설명합니다.

관련 솔루션
Red Hat® OpenShift® on IBM® Cloud

Red Hat OpenShift on IBM Cloud는 속도, 시장 반응, 확장성 및 안정성을 위해 퍼블릭 및 하이브리드 환경에서 OpenShift를 활용합니다.

Red Hat OpenShift on IBM Cloud 살펴보기
IBM® Cloud Satellite

IBM Cloud Satellite를 사용하면 온프레미스, 에지 및 퍼블릭 클라우드 환경 등 어디서든 일관된 클라우드 서비스를 실행할 수 있습니다.

IBM Cloud Satellite 살펴보기
IBM Cloud Code Engine

컨테이너 이미지, 배치 작업, 소스 코드를 서버리스 워크로드의 형태로 실행합니다. 사이징, 배치, 네트워킹, 스케일링이 필요하지 않습니다.

IBM Cloud Code Engine 살펴보기
IBM Cloud Container Registry

IBM Cloud Container Registry는 이미지를 관리하고 안전 문제 여부를 모니터링하도록 돕는 프라이빗 레지스트리를 제공합니다.

IBM Cloud Container Registry 살펴보기
리소스 엔터프라이즈의 컨테이너

신규 IBM 연구 보고서에서는 컨테이너와 Kubernetes 채택의 급증하는 모멘텀을 설명합니다.

클라우드와 기존 IT의 최고 장점 조합

컨테이너 오케스트레이션은 개방형 하이브리드 클라우드 전략의 핵심 구성 요소로서 어디서나 워크로드를 빌드하고 관리할 수 있게 합니다.

Docker란?

Docker는 컨테이너화된 애플리케이션의 빌드, 배치 및 관리를 위한 오픈 소스 플랫폼입니다.

다음 단계

Red Hat OpenShift on IBM Cloud를 사용하는 개발자는 Kubernetes 클러스터에서 엔터프라이즈 워크로드를 컨테이너화 및 배포하는 빠르고 안전한 방법을 활용할 수 있습니다. 이 솔루션은 보안 관리, 규정 준수 관리, 배치 관리, 상시 라이프사이클 관리와 관련된 번거롭고 반복적인 작업의 부담을 덜어줍니다. IBM에서 OpenShift Container Platform(OCP)을 관리해 주므로, 사용자는 중요 업무에 집중하기 위해 더 많은 시간을 투자할 수 있습니다.

Red Hat OpenShift on IBM Cloud 살펴보기