컨테이너는 애플리케이션을 위한 이식 가능한 폼 팩터를 생성하고 지원하도록 설계된 가상화 기술입니다. 즉, 다양한 플랫폼에 애플리케이션을 쉽게 배포할 수 있도록 해주는 것입니다. 컨테이너는 애플리케이션에 필요한 모든 요구 사항(애플리케이션 코드 자체, 애플리케이션이 실행하는 데 필요한 라이브러리와 같은 종속성, 애플리케이션과 해당 종속성의 런타임 환경)을 플랫폼 간에 독립적으로 전송하고 실행할 수 있는 폼 팩터로 패키징합니다. 컨테이너는 일반적인 OS 런타임 환경에서 애플리케이션을 추상화한 것입니다.
Docker는 가장 잘 알려진 컨테이너 구현 형식이지만, rkt/CoreOS, containerd, Hyper‑V 컨테이너와 같은 다른 컨테이너 기술과 cgroups 및 네임스페이스와 같은 하위 수준 기술도 있습니다(둘 다 컨테이너 엔진과 유사하게 애플리케이션을 격리하는 데 사용되지만, 컨테이너와 같은 방식으로 격리된 이식성을 제공하지는 않습니다). Docker나 rkt와 같은 플랫폼 도구를 사용하여 컨테이너를 직접 관리할 수 있지만, 대부분의 배포에서는 컨테이너 관리를 위해 Kubernetes 와 같은 오케스트레이션 도구를 사용합니다. 필수는 아니지만 Kubernetes는 프로덕션 등급 컨테이너 배포를 위한 표준 도구가 되어 가고 있습니다.
컨테이너는 애플리케이션을 더 작고 개별적인 구성 요소로 분할할 수 있기 때문에 매우 인기 있는 아키텍처 선택이 되었습니다. 이를 통해 인프라 소유자와 개발자 간의 구분이 가능해졌습니다. 개발 중에는 별도의 팀이 다양한 구성 요소를 병렬로 작업할 수 있으므로 유용하고, 배포 중에는 주어진 컨테이너를 플랫폼 간에 이동할 수 있으므로 유용합니다. 컨테이너는 개발자가 해당 요구 사항을 소유하지 않고도 알려진 요구 사항 집합에 애플리케이션 컨테이너를 게시할 수 있는 변경 불가능한 플랫폼을 제공할 수 있기 때문에 애플리케이션 및 인프라 관리자에게 보다 간소화된 도구를 제공합니다.
애플리케이션 컨테이너화라는 용어는 종종 표준 Linux 런타임 환경에서 여러 환경에서 실행될 수 있는 독립형 폼 팩터로 애플리케이션을 마이그레이션하는 프로세스를 의미하는 데 사용됩니다. 많은 기업이 컨테이너화 여정을 한창 진행하고 있으며, Kubernetes와 같은 도구를 사용하여 기본 컨테이너나 보다 포괄적인 컨테이너 관리 전략으로의 마이그레이션을 이미 시작했습니다.
모든 NGINX 제품은 컨테이너에서 실행될 수 있습니다. 여기에는 NGINX Open Source , NGINX Plus (선택적으로 NGINX App Protect 포함), NGINX Unit , NGINX Service Mesh , NGINX Ingress Controller가 포함되며 컨테이너 기술( NGINX Controller )을 기반으로 합니다.