컨테이너란 무엇인가요?

클라우드 관련하여 궁금하신 사항은 이곳으로 문의주세요.

목차

컨테이너란?

정보통신 기술의 비약적인 발전에 따라 기업과 정부기관의 데이터와 정보시스템 규모도 크게 증가해 왔습니다. 이에 따른 정보기술 인프라의 유연성 부족과 데이터센터 운영의 비용 부담 증가를 해소하기 위한 기술로 소위 ‘가상화 기술’이 주목받게 되었습니다.

가상화 기술은 물리적 서버를 여러 개의 가상 서버로 나누어 활용하도록 합니다. 이러한 기술 중 하드웨어(CPU, Memory 등) 자원 위에서 소프트웨어적으로 물리적 시스템(HW, OS, Application 등)을 디지털 복제본으로 가상화한 것이 가상 머신(VM: Virtual Machine)이라면, 가상 머신이 요구하는 자원 소요를 더욱 경량화하여 만든 컨테이너(Container)는 Application Code와 종속적인 구성요소(Library, Runtime Environment)를 하나의 코드 패키지로 묶어서 격리된 환경에서 실행하도록 가상화한 것입니다.

이렇게 만든 컨테이너는 애플리케이션(Application)을 수십, 수백 개의 컨테이너로 분할하고 분산 클라우드 환경에 배포하여 마치 같은 위치에 있는 것처럼 작동하게 할 수 있습니다. 컨테이너는 OS 커널 레벨에서 격리되며, 일반적으로 단일 운영체제(OS) 내에서 여러 개를 실행할 수 있습니다.

컨테이너란?

[Google 정의] 컨테이너는 소프트웨어 서비스를 실행하는 데 필요한 특정 버전의 프로그래밍 언어 런타임 및 라이브러리와 같은 종속 항목과 애플리케이션 코드를 함께 포함하는 경량 패키지

[AWS 정의] 컨테이너는 애플리케이션 코드, 라이브러리 및 클라우드에서 실행하기 위해 필요한 기타 종속성이 포함된 소프트웨어 코드 패키지

컨테이너 vs 가상 머신?

컨테이너와 가상 머신(VM)은 모두 애플리케이션을 격리된 환경에서 실행하는 기술이지만, 근본적인 차이가 있습니다.

img-cloud-term-container-02

가상머신VM,Continer 비교 다이어그램

가상머신 VM
VM - 어플리케이션, Guest OS(Linux, Windows) VM - 어플리케이션, Guest OS(Linux, Windows)
Hypervisor 엔진
HOST OS(Linux, Windows)
서버(HW)
Container
Container - 어플리케이션 Container - 어플리케이션 Container - 어플리케이션
Container 엔진(Docker)
HOST OS
서버(HW)
가상 머신(Virtual Machine, VM), 컨테이너(Container) 비교 테이블
특징 가상 머신(Virtual Machine, VM) 컨테이너(Container)
개념 물리적 하드웨어 위에 게스트 운영체제를 실행하는 추상화된 환경 애플리케이션과 그 종속성을 포함하는 경량 패키지
가상화 범위 하드웨어 수준에서 가상화. 각 VM은 게스트 운영체제(예: Linux, Windows)를 자체적으로 실행 운영체제 수준에서 가상화. 호스트 운영체제 커널을 공유
자원 효율성 VM은 각기 다른 OS 이미지를 포함하므로 컨테이너보다 무겁고 더 많은 자원을 소모 VM보다 훨씬 가볍고 적은 메모리를 사용. 필요한 컴퓨팅 리소스만 사용하여 효율적
시작 시간 시작 시간이 상대적으로 오래 걸림 밀리초 단위로 시작할 수 있어 매우 빠름
격리 하드웨어 수준에서 격리되어 있어 컨테이너보다 더 강력한 격리 및 보안을 제공 운영체제 수준에서 논리적으로 격리된 환경을 제공. 독립적인 실행으로 문제 격리가 가능
용이성 일반적으로 더 복잡하고 리소스를 많이 요구 쉽게 다운로드하고 구현할 수 있음

컨테이너와 VM을 결합하여 두 기술의 장점을 모두 활용할 수도 있습니다.

왜 컨테이너가 필요한가요?

독립적인 프로세스 단위의 컨테이너는 가상화를 통해 격리된 사용자 공간에서 실행하며, 다양한 운영체제 환경에서 이미지 파일 형태로 사용되어 어디서나 애플리케이션을 신속하게 설정하고 실행할 수 있도록 함으로써 다음과 같은 다양한 이점을 제공합니다.

img-cloud-term-container-02
  • 책임 분리 - 컨테이너화는 개발자와 운영팀의 책임 분리 가능
  • 빠른 배포 및 확장성 - 컨테이너는 빠른 배포와 확장성으로 사용자 대응 시간 향상
  • 경량화 및 효율성 - 컨테이너는 VM보다 가볍고 효율적이며 자원 활용도 향상
  • 애플리케이션 격리 및 보안 - 컨테이너는 격리 및 보안을 강화하여 신뢰성 있는 배포 보장
  • DevOps 및 CI/CD 용이성 - 컨테이너는 CI/CD 파이프라인과 연동하여 자동 배포 지원
  • 이식성 및 환경 일관성 - 컨테이너는 환경에 구애 받지 않고 어디서나 구동 가능

  • 경량화 및 효율성: 컨테이너는 기존 가상 머신(VM)보다 훨씬 가볍고 빠르며, 더 적은 자원으로 많은 애플리케이션을 운영할 수 있어 리소스 활용도를 향상하고 서버 비용을 절감할 수 있습니다.
  • 이식성 및 환경 일관성: 컨테이너는 애플리케이션과 모든 종속성을 패키징하므로 개발, 테스트, 생산 환경 간의 차이를 제거하여 Linux, Windows, Mac 등 운영체제에 구애받지 않고 물리적 서버, 개발자 컴퓨터, 데이터센터, 퍼블릭 클라우드 등 사실상 어느 환경에서나 구동 가능하도록 합니다.
  • 빠른 배포 및 확장성: 컨테이너화된 애플리케이션은 기존 방식보다 빠르게 배포되며, 밀리초 단위로 시작하여 수초 내 확장이 가능하여 사용자 요청 대응 시간을 향상합니다. 이를 통해 애플리케이션 출시 속도가 향상되고 운영 위험이 감소합니다.
  • DevOps 및 CI/CD 용이성: 컨테이너는 지속적 통합(CI) 및 지속적 배포(CD) 파이프라인과 연동하여 코드 변경 사항이 자동으로 테스트되고 운영 환경에 안전하게 배포될 수 있도록 지원합니다.
  • 책임 분리: 컨테이너화를 통해 개발자는 애플리케이션 로직과 종속성에 집중하고, IT 운영팀은 배포 및 관리에 집중하는 등 책임을 명확히 분리할 수 있습니다.
  • 애플리케이션 격리 및 보안: 각 컨테이너는 독립적으로 실행되어 문제 발생 시 영향을 격리하며, 보안 취약점 노출 범위를 감소시킬 수 있습니다. 또한, 승인된 사용자와 관리자가 컨테이너 이미지를 서명할 수 있는 인프라가 통합되어 있어 신뢰할 수 없는 컨테이너 배포를 방지합니다.

컨테이너의 핵심요소

일반적으로 클라우드 환경에서 실행되는 컨테이너는 애플리케이션(혹은 프로세스) 실행에 필요한 모든 것을 포함하는 이미지 생성에서 시작하여, 컨테이너 실행, 자원 할당 및 관리, 컨테이너 환경에 대한 관리 등의 과정을 거칩니다. 클라우드 네이티브 환경에서 이 과정을 지원하는 두 가지 핵심 기술로 컨테이너 엔진과 컨테이너 오케스트레이션이 있습니다.

img-cloud-term-container-03
  1. 1. 컨테이너 이미지 새성 - 애플리케이션 실행에 필요한 모든 거을 포함하는 이미지 파일을 생성합니다.
  2. 2. 컨테이너 실행 - 격리된 환경에서 컨테이너를 생성하고 실행합니다.
  3. 3. 자원 할당 및 관리 - 컨테이너에 필요한 자원을 할당하고 관리합니다.
  4. 4. 오케스트레이션 - 컨테이너 환경을 관리하기 위한 도구를 사용합니다.

컨테이너 엔진

컨테이너화된 애플리케이션을 구축, 공유, 실행하여 생명주기를 관리하는 플랫폼입니다. 컨테이너 엔진/런타임의 종류에는 Docker Engine, containerd, CRI-O, 그리고 runC 등이 있습니다. 이들은 컨테이너를 생성하고 실행하며 관리하는 역할을 합니다. Docker Engine은 컨테이너 이미지를 관리하고 컨테이너를 실행하는 기능을 제공하며, containerd는 Docker Engine의 핵심 부분으로 컨테이너 런타임 기능을 담당합니다. CRI-O는 Kubernetes와 같은 오케스트레이션 플랫폼에서 사용되는 컨테이너 런타임이며, runC는 OCI 표준을 준수하는 로우 레벨 컨테이너 런타임입니다.

컨테이너 오케스트레이션

오케스트레이션 도구에는 Kubernetes, Docker Swarm 등이 있습니다. 쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하는 오픈소스 시스템으로, 대규모 컨테이너 오케스트레이션의 사실상 표준입니다. 쿠버네티스는 2013년 구글에서 공개된 이후 컨테이너 오케스트레이션 도구의 표준으로 자리 잡고 있습니다. Kubernetes와 통합되는 도구로는 Helm, Rancher, Snyk, Ansible, Docker, Microsoft Azure, Amazon EK, Google Compute Engine 및 Vagrant 등이 있습니다.

쿠버네티스의 주요 오케스트레이션 기능은 다음과 같습니다.

  • 오토스케일링(Auto-Scaling): 부하 증가 시 파드(Pod) 복제본을 자동으로 실행하여 가용성을 확보합니다. 쿠버네티스는 각 클러스터 내 노드의 CPU 및 메모리 자원 할당을, Pod를 통해 자동으로 조정합니다.
  • 스케줄링(Scheduling): 컨테이너를 일정한 알고리즘에 기초하여 특정 노드에 배치하는 역할을 합니다.
  • 오토 힐링(Auto-Healing): 비정상적인 컨테이너 상태를 감지하면 컨테이너를 재시작하고 스케줄링을 빠르게 재시작하여 사용자가 지정한 상태를 유지합니다.
  • 분산 부하(Load-Balancing): 서비스 요청을 컨테이너들 사이에 균등하게 분배하여 부하를 분산시켜 급증하는 서비스 요청에 효율적으로 대응할 수 있게 합니다. 로드 밸런싱은 리소스 활용도를 최적화하고 응답 시간을 최소화하며 과부하를 방지합니다.

클라우드에서의 컨테이너 활용

컨테이너화 기술은 Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), IBM Cloud 등 주요 클라우드 컴퓨팅 플랫폼에서 널리 채택되었습니다. 기업들은 컨테이너가 다양한 클라우드 환경에서의 애플리케이션 이식성을 제공하고 벤더 종속성을 줄여주는 데 강점이 있기 때문에, 여러 클라우드 제공업체를 사용하는 멀티 클라우드 전략을 채택하는 경우가 일반적입니다.

클라우드 컨테이너 활용 유형은 크게 두 가지로 나눌 수 있겠습니다. 클라우드 네이티브 애플리케이션 개발 및 배포에 활용되는 경우와 기존 애플리케이션을 컨테이너화하여 클라우드로 이전하거나 클라우드 환경에서 실행하도록 하는 경우로 나누어 볼 수 있습니다.

클라우드 네이티브 애플리케이션 개발 및 배포

  • 마이크로서비스 아키텍처: 애플리케이션을 독립적인 작은 서비스 단위로 분할하고, 각 서비스를 컨테이너로 패키징하여 배포합니다. 이를 통해 유연성, 확장성, 독립적인 배포 및 업데이트가 가능합니다.
  • CI/CD 파이프라인 구축: 컨테이너 이미지를 기반으로 지속적인 통합(CI) 및 지속적인 배포(CD) 파이프라인을 구축하여 개발 속도를 높이고 배포 빈도를 늘릴 수 있습니다.
    * CI/CD는 지속적 통합(Continuous Integration)과 지속적 제공/배포(Continuous Delivery/Deployment)를 의미하며, 소프트웨어 개발 및 배포 프로세스를 자동화하여 효율성을 높이는 방법
  • 서버리스 아키텍처: 컨테이너를 기반으로 서버리스 기능을 구현하여 이벤트 기반으로 동작하는 애플리케이션을 구축합니다.
  • 애플리케이션 현대화: 기존 레거시 애플리케이션을 컨테이너화하여 클라우드 환경으로 마이그레이션하고, 마이크로서비스 아키텍처로 전환하는 데 활용합니다.
  • 데이터 분석 및 머신러닝: 대규모 데이터 처리 및 머신러닝 모델 학습/배포에 컨테이너를 활용하여 성능 향상 및 확장성을 확보합니다.

기존 애플리케이션 컨테이너화 및 배포

  • VM 환경에서 컨테이너 환경으로 이전: 가상 머신(VM) 환경에서 실행되던 애플리케이션을 컨테이너로 패키징하여 클라우드 환경으로 이전합니다.
  • 애플리케이션 격리 및 보안 강화: 컨테이너를 사용하여 애플리케이션을 격리하고 보안을 강화합니다.
  • 자원 효율성 증대: 컨테이너는 가상 머신보다 가볍고 효율적이므로, 동일한 하드웨어에서 더 많은 애플리케이션을 실행할 수 있습니다.
  • 이식성 향상: 컨테이너 이미지는 환경에 구애받지 않고 어디서든 실행 가능하므로, 다양한 클라우드 환경에서 애플리케이션을 일관되게 실행할 수 있습니다.

금융, 제조 등 다양한 산업에서 컨테이너 기술을 적용하여 유연하고 확장성 높은 서비스가 구현되고 있습니다. 금융 서비스 영역에서는 온라인 뱅킹 시스템의 서비스를 컨테이너화하여 응답 시간을 향상하고, 보안 강화 및 규제 준수 자동화 수준을 제고하고 있습니다. 리테일 유통 산업에서는 블랙프라이데이 트래픽 대응력을 향상하고 피크 시즌 확장성을 높이는데 기여하고 있으며, 제조업에서는 제조운영 시스템의 다운타임을 감소시키고 IoT 통합을 적용하는 과정에서 컨테이너 기술을 활용되고 있습니다.

인공지능(AI)와 통합하는 데 있어서도 머신러닝 및 AI 워크로드를 컨테이너화하여 개발-생산 환경 간 일관성을 제공하고 자원 활용도를 최적화하는 방식으로 적용되고 있습니다. 컴퓨팅 자원의 수요가 지속적으로 증가하는 상황에서 컨테이너 가상화 기술은 자원 활용의 유연성과 자동화를 지원하며 계속 발전할 것으로 예상됩니다.

컨테이너는 소프트웨어 및 모든 종속성을 어디서나 실행할 수 있는 단일 파일로 패키징합니다. 클라우드에서 컨테이너를 실행하면 대규모 유연성과 성능 이점이 추가적으로 제공됩니다.

삼성SDS Container (컨테이너) 더 알아보기
  • Container

    쿠버네티스를 사용하여 컨테이너를 안정적으로 운영할 수 있는 환경을 제공합니다.