title: "LXD: Containers for Human Beings" subtitle: "Docker's great and all, but I prefer the workflow of interacting with VMs" date: 2023-06-14T10:50:41-04:00 categories:
- Technology tags:
 - Sysadmin
 - Containers
 - VMs
 - Docker
 - LXD draft: true rss_only: false cover: ./cover.png
 
This is a blog-post-version of a talk I presented at both Ubuntu Summit 2022 and SouthEast LinuxFest 2023. The first was not recorded, but the second was and is on SELF's PeerTube instance. I apologise for the terrible, but there's unfortunately nothing I can do about that.
The benefits of VMs and containers
- Isolation: we don't want an attacker to get into our webserver and be able to gain access to our email server
 - Flexibility: VMs and containers only use the resources they've been given
 - Portability: once set up and configured, VMs and containers can mostly be treated as black boxes; as long as the surrounding environment is similar to the previous in terms of communication, they can just be picked up and dropped on bare metal servers as necessary.
 - Density:
 - Cleanliness:
 
Virtual machines
 .---------------------------------.
|  .-------.  .-------.  .-------. |
| | Guest  | | Guest  | | Guest  | |
| | OS     | | OS     | | OS     | |
| .---+---'  .---+---'  .---+---'  |
|  .--+----.  .--+----.  .--+----. |
| | Guest  | | Guest  | | Guest  | |
| | Kernel | | Kernel | | Kernel | |
| .---+---'  .---+---'  .---+---'  |
|  .--+----------+----------+----. |
| |          Hypervisor          | |
| .--------------+--------------'  |
|  .-------------+---------------. |
| |          Host Kernel         | |
| .-----------------------------'  |
.---------------------------------'
Containers
       Application containers                 System containers
 .---------------------------------.   .------------------------------.
|  .-------.  .-------.  .-------. |  |  .------.  .------.  .------. |
| | App 01 | | App 02 | | App 03 | |  | | Guest | | Guest | | Guest | |
| '---+---'  '---+---'  '---+---'  |  | | OS    | | OS    | | OS    | |
|  .--+----------+----------+----. |  | '---+--'  '---+--'  '---+--'  |
| |          Hypervisor          | |  |  .--+---------+---------+---. |
| '--------------+--------------'  |  | |         Host Kernel       | |
|  .-------------+---------------. |  | '--------------------------'  |
| |          Host Kernel         | |  '------------------------------' 
| '-----------------------------'  |
'---------------------------------' 
When to use which
Virtual machines
- Virtualising esoteric hardware
 - Virtualising non-Linux operating systems (Windows, macOS)
 - Completely isolating processes from one another with a decades-old, battle-tested technique
 
See Drew DeVault's blog post In praise of qemu for a great use of VMs
Application containers
- Microservices
 - Extremely reproducible builds
- (NixOS.org would likely be a better fit though)
 
 - Dead-set on using cloud platforms with extreme scaling capabilities (AWS, GCP, etc.)
 - When the app you want to run is only distributed as a Docker container and
the maintainers adamantly refuse to support any other deployment method
- (Docker does run in LXD 😉)
 
 
System containers
- Anything not listed above 👍
 
Crash course to LXD
- Install snap following Canonical's tutorial
- LXD is natively packaged for Arch and Alpine, but configuration can be a massive headache.
 
 sudo snap install lxdlxd initlxc image copy images:debian/11 local: --alias deb-11lxc launch deb-11 container-namelxc shell container-name