System Containers vs. Application Containers: Does the Difference Matter?

Is it time to differentiate between application containers and system containers? Some companies think so. Here’s a look at why the difference matters—or not, depending on your preferences.

When people talk about containers in the era of Docker, they usually mean what would most properly be called an application container. That term refers to a container whose job is to run a single application inside an isolated environment.

Application containers are the primary use case for Docker, which is arguably the only container company that has made a big splash in the IT world writ large.

System Containers

Docker’s focus on application containers is interesting, however, if you consider that originally, containerization technology was designed primarily as a way to containerize a complete operating system (OS) rather than just a single app. A container that runs a full OS is a system container.

Solaris containers, which Sun debuted in 2005, were intended mainly as a way to virtualize other Solaris systems on top of a Solaris host. Virtuozzo’s OpenVZ, whose history stretches back even further, was also designed as a container system platform.

Most recently, Canonical’s new LXD container platform, which appeared in 2016, has come on the scene to offer yet another system container option.

Should We Distinguish Between System and Application Containers?

Companies with system container platforms seem keen on emphasizing that the problem they solve is very different from the one Docker focuses on. That makes sense. It’s a way to stand out in a market in which Docker is crowding out everyone in the application-container space.

But the distinction starts to seem less important when you consider that Docker itself could be used for system containers. There’s nothing stopping you from running a complete OS inside a Docker container. Most people just choose not to do it.

It’s also worth noting that containers of all stripes remained a niche technology until Docker came along and showed how containers could revolutionize the delivery of applications. When the focus remained mostly on system containers during the 2000s, few people were using containers in production.

That was probably due to the fact that system container platforms provide the same type of functionality as hypervisors including VMware or KVM. It was hard for system containers to gain traction when they solved a problem that VMware solved just as well, in a better-advertised way.

Still, the fact remains that the public conversation about containers becomes confusing when participants do not distinguish between application and system containers. But if developers of the latter want to prevent Docker from completely stealing the show, they need to do more to demonstrate their value, and convince users that containers can come in handy for more than just application delivery.

Christopher Tozzi

Christopher Tozzi has covered technology and business news for nearly a decade, specializing in open source, containers, big data, networking and security. He is currently Senior Editor and DevOps Analyst with Fixate.io and Sweetcode.io.

Christopher Tozzi has 254 posts and counting. See all posts by Christopher Tozzi

2 thoughts on “System Containers vs. Application Containers: Does the Difference Matter?

  • It was hard for system containers to gain traction when they solved a problem that VMware solved just as well,

    So you are saying that I can run 4-500 VMware VMs on a 32GB ram i7 like I can run 4-500 LXD containers on that same system? I’ll have to look into that then.

  • Very interesting article, but I think you could be more precise about what you mean by “System Container” vs. “Application Container”.

    Presumably the distinction is based on how many processes run in the container
    – 1 (or very few) for an Application Container
    – more (like an OS, using some sort of init system) for a System Container

    rather than the actual initial image contents which could be
    – a single binary application or a whole OS distribution for an Application Container
    – or necessarily a complete OS distribution for a System Container.

Comments are closed.