Containers virtualize the OS, splitting it up into virtualized compartments to run container applications. This allows pieces of code to be put into smaller, easily transportable pieces that can run anywhere Linux is running.
Think of a container as another form of virtualization. Virtual Machines (VM) allow a piece of hardware to be split up into different VMs – or virtualized — so that the hardware power can be shared among different users and appear as separate servers or machines.
Container technology has been around for a while, but it’s been the Docker approach to containers that has pushed the technology to the forefront. Both the container and Docker’s approach have a lot of appeal, especially for cloud applications and agile development. They are an efficient and fast way to move pieces of software around in the cloud, thus improving the portability of applications.
A downside of container technology is that it is limited to use in Linux environments. Also, as an application technology, it requires specific expertise and security safeguards geared toward a container architecture.