---
title: LXD vs Docker
description: LXD vs Docker - they are not competing container technologies, and they
  tend to serve completely different purposes - running a full OS vs a single process.
url: https://canonical.com/blog/lxd-vs-docker?format=md
---

1. [Blog](https://canonical.com/blog)
2. Article

---

[Miona Aleksic](https://canonical.com/blog/author/mionaalex "More about Miona Aleksic")

31 March 2022

# LXD vs Docker

[docker](https://canonical.com/blog/tag/docker)
[LXD](https://canonical.com/blog/tag/lxd)

---

Share the article

When talking about containers, a common confusion for potential users of [LXD](https://ubuntu.com/lxd) is that LXD is an alternative to Docker or Kubernetes. However, LXD and Docker are not competing container technologies, and they tend to serve completely different purposes. In this blog, we’ll briefly discuss the differences and the suitable use cases for both.

## What types of containers are there?

**System containers** (as run by [LXD](https://ubuntu.com/lxd)) are similar to virtual or physical machines. They run a full operating system inside them, you can run any type of workload, and you manage them exactly as you would a virtual or a physical machine. System containers are usually long-lasting and you could host several applications within a single system container. If you’re curious, in [What are Linux containers blog,](https://ubuntu.com/blog/what-are-linux-containers) we go a bit deeper into the history of system containers, how they led to LXC, and ultimately, LXD.

**Application containers** (such as [Docker](https://www.docker.com/)), also known as process containers, are containers that package and run a single process or a service per container. They run stateless types of workloads that are meant to be ephemeral. This means that these containers are temporary, and you can create, delete and replace containers easily as needed.

Both application and system containers share a kernel with the host operating system and utilize it to create isolated processes. The main difference is illustrated below – application containers run a single app/process, whereas system containers run a full operating system giving them flexibility for the workload types they support.

## LXD vs Docker

Now that you know the main characteristics of the two container types we can elaborate a bit about [LXD](https://ubuntu.com/lxd) vs Docker.

**LXD** utilises LXC for running system containers. LXC is the technology allowing the segmentation of your system into independent containers, whereas LXD is a daemon running on top of it allowing you to manage and operate these instances in an easy and unified way. When it comes to storage, networking, and logging, LXD supports a variety of interfaces and features that the user can control and interact with. LXD is image-based and you can utilise it to run any kind of workload, including traditional systems you would otherwise run in physical or virtual machines. Overall, functionality-wise, LXD is similar to VMWare or KVM hypervisors, but is much lighter on resources and removes the usual virtualization overhead.

**Docker** is a containerisation platform, it can be installed on a machine (workstation or a server) and provides a variety of tools for developing and operating containers. One of those tools is [containerd](https://containerd.io/) – a daemon-based runtime that manages the complete lifecycle of Docker containers, including overall running and monitoring of containers. Docker abstracts away storage, networking, and logging, making it easy for developers that don’t have much prior Linux knowledge. Docker was specifically designed for microservice architecture, providing a way to decompose and isolate individual processes, which can then be scaled independently from the rest of the application or system they are a part of.

For a more detailed comparison, you can visit this [blog](https://earthly.dev/blog/lxc-vs-docker/).

## Running Docker in LXD

While LXD and Docker often get compared, they shouldn’t be seen as competing technologies. As illustrated above, they each have their own purpose and place in the digital world. In fact, even running Docker using LXD is possible and suitable in certain circumstances.

You can use LXD to create your virtual systems running inside the containers, segment them as you like, and easily use Docker to get the actual service running inside of the container.

If you are curious about how to do this, please take a look at [this tutorial](https://ubuntu.com/tutorials/how-to-run-docker-inside-lxd-containers#1-overview).

Or you can watch the video below, where Stéphane Graber leads you through the process.

You can also visit this blog to learn [how to run Docker on Windows and Mac with Multipass](https://ubuntu.com/blog/replacing-docker-desktop-on-windows-and-mac-with-multipass).

## Further Reading

Learn more about Canonical’s [open source infrastructure solutions](https://canonical.com/solutions/infrastructure).

## Sign up for our newsletter

Get the latest Canonical news and updates in your inbox.

Work email:

\*I agree to receive information about Canonical's
products and services.

By submitting this form, I confirm that I have read and agree to [Canonical's Privacy Policy](https://canonical.com/legal/dataprivacy).

Sign up

## Share on

---

## Related posts

[### Ubuntu Server: a platform made for enterprise scale](https://canonical.com/blog/ubuntu-server-a-platform-made-for-enterprise-scale)

A platform is an environment that allows software to run smoothly across the infrastructure, runtime, and application layers. The key word there is “smoothly”: a good platform...

[Rhys Knipe](https://canonical.com/blog/author/rhysknipe)

7 July 2026

[### Introducing MicroCloud Cluster Manager](https://canonical.com/blog/introducing-microcloud-cluster-manager)

Canonical introduces the beta release of MicroCloud Cluster Manager, a new way to discover, organize, and operate your MicroCloud environments from a single, unified interface.

[Miona Aleksic](https://canonical.com/blog/author/mionaalex)

20 March 2026

[### Native integration available between Canonical LXD and HPE Alletra MP B10000](https://canonical.com/blog/canonical_lxd_hpe_alletra)

Native integration available between Canonical LXD and HPE Alletra MP B10000. The integration combines efficient open source virtualization with high performance,...

[Miona Aleksic](https://canonical.com/blog/author/mionaalex)

15 December 2025

[### Generating allow-lists with DNS monitoring on LXD](https://canonical.com/blog/generating-allow-lists-with-dns-monitoring-on-lxd)

Allow-listing web traffic – blocking all web traffic that has not been pre-approved – is a common practice in highly sensitive environments. It is also a challenge for...

[Nicholas Morris](https://canonical.com/blog/author/niwamo)

26 August 2025
