컨테이너화된 애플리케이션은 컨테이너라고 하는 격리된 코드 패키지에서 실행되는 애플리케이션입니다. 컨테이너는 애플리케이션이 모든 호스트 운영체제(예: 라이브러리, 바이너리, 구성 파일, 프레임워크)에서 실행되어야 하는 모든 종속 항목을 경량의 단일 실행 파일에 포함합니다.
애플리케이션을 컨테이너화하는 프로세스를 통해 서로 다른 기능을 하드웨어 종속 항목과 기타 소프트웨어와 분리하여 애플리케이션을 더 빠르고 효율적이며 안전하게 개발할 수 있습니다. 컨테이너는 모든 호스트 운영체제에서 실행될 수 있고 다른 소프트웨어와 하드웨어 객체와 분리되어 있으므로 한 번만 빌드하면 어디서나 실행할 수 있는 애플리케이션을 빌드하는 다목적 도구로 활용할 수 있습니다.
Google 검색에서 YouTube 및 Gmail에 이르기까지 Google의 모든 제품은 컨테이너를 통해 실행됩니다. Google에서 개발한 오픈소스 플랫폼인 Kubernetes 및 Knative는 컨테이너와 애플리케이션을 관리하는 데 가장 널리 사용되는 도구입니다.
격리
컨테이너화된 각 애플리케이션은 다른 앱 및 시스템 구성요소와 분리된 격리된 환경에 존재하여 애플리케이션 내의 오류가 다른 애플리케이션이나 로컬 시스템에 영향을 미치지 않으므로 버그 이슈의 범위가 제한될 수 있습니다.
이식성
컨테이너화된 애플리케이션은 운영체제와 독립적으로 작동하므로 물리적 서버, 가상 머신이나 개발자의 개인 머신 또는 클라우드와 같은 거의 모든 환경에 포팅될 수 있습니다.
경량
가상 머신과 달리 컨테이너는 운영체제 버전을 가지고 있지 않으므로 다른 가상화 방법보다 훨씬 가볍고 효율적입니다.
효율성
컨테이너화 애플리케이션은 머신의 컴퓨팅 커널과 리소스를 공유할 수 있으며 컨테이너 내의 애플리케이션 계층은 여러 컨테이너에서 공유될 수 있습니다. 따라서 컨테이너화된 애플리케이션은 적은 리소스가 필요하므로 동일한 머신 또는 가상 환경에서 여러 컨테이너를 실행할 수 있습니다.
확장성
추가 컨테이너 인스턴스를 신속하게 추가하여 애플리케이션 부하 증가를 처리할 수 있습니다.
컨테이너화된 애플리케이션은 앱이 호스트 운영체제에서 실행되는 데 필요한 모든 애플리케이션 종속 항목이 포함된 실행 가능한 소프트웨어 패키지(컨테이너)를 실행하여 작동합니다. 컨테이너화된 애플리케이션에는 컨테이너 이미지를 구성하는 모든 앱 구성요소(예: 프레임워크, 라이브러리)를 비롯한 여러 객체가 있으며, 이러한 구성요소는 컨테이너 엔진에 의해 실행됩니다. 컨테이너 이미지는 컨테이너 시스템의 청사진이나 아키텍처입니다. 애플리케이션이 실행되면 이미지 콘텐츠가 컨테이너 인스턴스에 복사되고 애플리케이션 내의 여러 컨테이너에서 사용될 수 있습니다. 컨테이너 이미지는 컨테이너의 공유 가능성과 호환성을 지원하는 Open Container Initiative(OCI)라는 업계 표준에 따라 만들어집니다.
컨테이너 엔진은 컨테이너의 런타임 환경이며 컨테이너화된 애플리케이션이 실행되는 플랫폼입니다. 컨테이너 엔진은 클라이언트 도구를 통해 컨테이너를 빌드, 관리, 시작하는 명령어를 수락합니다. 가장 널리 사용되는 컨테이너 엔진은 Docker 또는 CRI-O와 같은 도구입니다.
조정 도구는 특히 컨테이너가 많은 환경에서 컨테이너화된 애플리케이션을 관리하는 데 사용됩니다. Kubernetes와 같은 조정 도구, 컨테이너 배포, 관리 및 확장합니다.
컨테이너와 가상 머신은 기능 면에서 유사하지만 컨테이너는 리소스를 적게 사용하고 더욱 유연합니다.
가상 머신을 사용하면 여러 애플리케이션과 운영체제가 단일 물리적 컴퓨터 또는 서버의 리소스를 공유하고 동시에 실행할 수 있습니다(예: 동일한 컴퓨터를 공유하는 Windows와 Linux). 가상 머신에는 파일과 종속 항목은 물론 운영체제의 자체 사본까지 있습니다.
컨테이너에는 가상 머신처럼 운영체제 복사본이 없습니다. 따라서 컨테이너와 가상 머신의 주요 차이점은 컨테이너화에서 컴퓨팅 리소스를 더 효율적으로 사용한다는 점입니다. 대신 컨테이너 런타임은 컴퓨터나 서버의 기존 운영체제에 설치되므로 모든 컨테이너에서 같은 운영체제를 공유할 수 있습니다.
가장 기본적인 수준에서 컨테이너는 시스템 컨테이너 및 애플리케이션 컨테이너 등 두 가지 유형으로 제공됩니다.
애플리케이션 컨테이너는 일반적으로 단일 프로세스를 실행하는 스테이트리스(Stateless) 솔루션입니다. 앞서 언급한 컨테이너화된 애플리케이션은 애플리케이션 컨테이너를 실행하며 여기에서 각 컨테이너는 Kubernetes와 같은 도구로 조정되는 컨테이너 여러 개와 함께 프로세스를 처리합니다.
시장에 애플리케이션 컨테이너가 많이 있습니다. Docker가 가장 인기 있는 것으로 여겨지지만 여러 가지 다른 도구도 있습니다. OCI에서 컨테이너의 오픈소스 개발을 관리합니다.
운영체제 컨테이너라고도 하는 시스템 컨테이너는 오래되었고 컴퓨팅 오버헤드가 동일하지 않지만 가상 머신과 매우 유사하게 작동합니다. 독립형 시스템처럼 작동하며 컨테이너 이미지를 포함하지 않으며 특수 소프트웨어가 필요하지 않습니다. 시스템 컨테이너는 일반적으로 기존 모놀리식 애플리케이션에서 사용되었습니다.
컨테이너화된 애플리케이션의 일반적인 엔진 및 도구 유형은 다음과 같습니다.
컨테이너화를 위해 가장 많이 사용되는 오픈소스 플랫폼입니다. Docker를 사용하면 Linux 기반 컨테이너를 만들고 운영할 수 있습니다.
LinuxContainers.org의 오픈소스 프로젝트인 LXC를 사용하면 앱에서 단일 Linux 커널을 운영체제로 사용하여 여러 Linux 시스템을 동시에 실행할 수 있습니다.
Rocket이라고도 하는 rkt는 애플리케이션 기반 컨테이너 엔진으로, 컨테이너를 세밀하게 제어하거나 Docker 컨테이너 시스템 내의 특정 구성요소로 작동할 수 있습니다.
OCI 호환 런타임을 사용 설정하는 데 사용되는 컨테이너 관리 플랫폼 Kubernetes용 컨테이너 런타임 인터페이스(CRI)입니다. Kubernetes 사용 시 Docker의 대체 수단으로 자주 사용됩니다.