A container is a virtualization technology designed to create and support a portable form factor for applications – in other words, to make it easy to deploy an application on a range of different platforms. A container packages up all the requirements for the application – the application code itself, dependencies such as libraries the application needs to run, and the run‑time environment for the application and its dependencies – into a form factor which can be transported and run independently across platforms. Containers are an abstraction of an application from the typical OS run‑time environment.
Docker is the best‑known container implementation format; however, there are other container technologies such as rkt/CoreOS, containerd, Hyper‑V containers, and lower‑level technologies like cgroups and namespaces (both of which are used for application isolation similar to container engines, but don’t provide isolated portability in the same way containers do). You can use platform tools like Docker or rkt to manage containers directly, but most deployments use an orchestration tool like Kubernetes for container management. While not required, Kubernetes is becoming the standard tool for production‑grade container deployments.
Containers have become a very popular architectural choice because they make it possible to break an application up into smaller, discrete components – allowing for division between infrastructure owners and developers. This is beneficial during development because it means separate teams can work on the various components in parallel, and during deployment because it enables transportability of a given container between platforms. Containers also provide a more streamlined tool for application and infrastructure managers because they can provide immutable platforms which allow developers to publish application containers to a set of known requirements without owning those requirements.
The term application containerization is often used to signify the process of migrating an application from a standard Linux run‑time environment to a self‑contained form factor that can run in many environments. Many enterprises are well into their containerization journey and have already begun the migration to either basic containers or a more comprehensive container management strategy using a tool like Kubernetes.
All NGINX products can either run in containers – including NGINX Open Source, NGINX Plus (optionally with NGINX App Protect), NGINX Unit, NGINX Service Mesh, NGINX Ingress Controller – or are built on container technologies (NGINX Controller).