A few years ago I started getting into Docker. My first containers were to run Plex and Emby, and I still run both of them. The power and ease of Docker containers became evident to me very quickly, and I looked to Docker when I was adding, migrating, or updating services. Now I run more than 20 containers in my home lab across two different servers. In this article, I thought I’d go over the containers I’m running, why I run them in Docker, and how they are working out.
This page contains affiliate links. If you purchase an item using an affiliate link I will receive a small commission at no cost to you. Affiliates do not influence my recommendations. Read my disclosures for more information.
Table of Contents
Background: What is Docker?
Docker is a container virtualization technology. Many people are familiar with virtual machines, which are virtual operating systems (OS) running on some host which isn’t necessarily the same OS as the virtual machine. Containers are another type of virtualization. Instead of virtualizing the whole operating system, like Windows and Linux, you virtualize just what you need for an application. For example, you can create a container with Plex, WordPress, or Apache that stores the application. These containers can run on different machines, and even in virtual machines.
What are the benefits of Docker containers?
As I’ve learned over the years, there are many benefits to running Docker containers:
- Portability — You can easily move containers to different hosts without much work. This is useful when taking a host down for upgrades or when you need to replace a host.
- Scalability — Docker hosts can run many containers without the need for a ton of resources. If you need more resources you can easily add another Docker host and move and add new containers to that host. I run multiple containers on low-powered hosts.
- Performance — Containerized apps use less memory than virtual machines. They also stop and start more quickly.
- Isolation — Containers allow you to isolate applications from each other and from the host operating system. You don’t have to worry about changes in underlying libraries in one container affecting another. You also rarely have to worry about host operating system upgrades and other changes affecting the containers.
- Easy and safe upgrades — It is easy to upgrade a Docker container to the latest version of an application. It’s also easy to roll back to a previous version if a new version has too many problems.
My key Docker containers
Below are my important Docker containers and how I use them.
|Container Name(s)||What I use it for||Advantages of being in Docker|
|Portainer||To manage my Docker hosts and containers.||It has easy access to managing and manipulating Docker containers.|
|Plex||To access my home media and the media of my friends from anywhere on the Internet.||Easy to update and move to different servers.|
|Emby||To access my home media at home.||Easy to update and move to different servers.|
|Graylog||To centralize and analyze my system and application logs and alert me when there are problems.||Easy to update without affecting or being affected by the host. In the past, I’ve had host updates break Graylog when it wasn’t containerized.|
|Elasticsearch||Used by the Graylog container.||Not affected by host OS updates.|
|MongoDB||Used by the Graylog container.||Not affected by host OS updates.|
|Omada Controller||To manage my TP-Link access points and managed network switch.||Not affected by host OS updates and easy to manage and move to different machines. Upgrades were much more difficult before moving this to a container|
|Logspout||I use Logspout to aggregate and centralize my container logs.||Has access to the Docker logs.|
|Mosquitto||I use this for my MQTT integrations with Home Assistant.||Easy to update and move to different servers.|
|Ring_MQTT||I use this to integrate my Ring Mailbox Sensor with Home Assistant (via a custom MQTT server)||Easy to update and move to different servers.|
|WordPress||This is my local WordPress sandbox for designing and playing with plugins and page designs||Easy to update and move to different servers.|
|MySQL||Used by WordPress.||Not affected by host OS updates.|
|PHPMyAdmin||I use this to manipulate databases using a web-based GUI.||Easy to update and move to different servers.|
|MariaDB||Used by PHPMyAdmin.||Not affected by host OS updates.|
|Filestash||Easy access to family shared files from any web browser.||Lightweight and portable.|
|WebDAV||For use with Filestash||Lightweight and portable.|
|DokuWiki||For maintaining documentation about my home lab.||Lightweight and portable.|
It took me a while to jump on the Docker train (whale?), and I am very glad that I did. Now, when I think about adding services to my home lab, I always consider running it in Docker.
Do you use Docker? What containers are your favorite? Let me know in the comments or on Twitter.