A container is an isolated environment where a containerised application runs.
A container contains the application with the dependencies the application needs to run.
Even though they have many similarities to virtual machines, containers are not the same as virtual machines.
A virtual machine requires an operating system, but all containers share the same operating system whilst remaining isolated from each other.
A virtual machine contains a guest operating system that typically has a large amount of components that are not needed for the application to run.
Containers are the opposite, they share the underlying resources of the host operating system and do not have a guest operating system. The desired application along with it’s dependencies is all that is required to run are included within the container.
A container originates from a container image.
A container image is a file created by a container engine that includes the application code along with its dependencies.
Because a container image contains everything the application code within needs to run, it is extremely portable making it easy to move and migrate.
A container does not try to virtualise a physical server like a virtual machine.
Many container engines to create, run and manage containers are available. The most popular engine is the Docker engine along with some alternatives such as rkt, Open Container Initiative, LXD, Linux-VServer and Windows Containers.