Learning Docker - Immich & AudioBookShelf
Thanks to @jasper@dystopianpresent.club for a great Docker intro and for sending me some files to learn from. I learned the basics and got Immich running on my Mac Studio to see if I want to stick with it. The jury’s still out. My Mac Mini server doesn’t have enough drive space, and my NAS is old and underpowered.
Next, I went looking for something I could actually use and found Audiobookshelf. My first big project was getting the Audiobookshelf server running in Docker on my Mac Mini.
So far, so good. I have 209 audiobooks on the server, and I listen through a third-party iPhone app, AudioBooth. The official Audiobookshelf iOS app is still a TestFlight beta (and the beta is full, by the way), but I’ve tried two third-party apps, AudioBooth and ShelfPlayer, and both are very polished. Away from home, I reach the server over Tailscale for security.
Docker keeps each app in its own compartment with its own software. That mattered here: Audiobookshelf needs Node 24, but the other apps on my Mini are pinned to Node 22. In Docker, Audiobookshelf brings its own Node without touching anything else. Audiobookshelf also has no official Mac version. On a Mac, Docker Desktop runs a small Linux virtual machine in the background, and Linux apps like Audiobookshelf run inside it. Think of a container as a sealed box holding one app and everything it needs. My books stay in a normal folder on the Mini that the container can see, so they’re safe even if I delete the container and start over.
I used VS Code, which made it easy to see my files and work on the command line in one place. Microsoft’s Container Tools extension adds a handy view of your containers and images.
The command line is good for building skills, but if that’s too much, the Docker Desktop app makes it easy to see what’s running and to start and stop things. It helped me understand which services were running. On a Mac, you still need Docker Desktop (or an alternative like OrbStack) installed and running, since it’s the engine, if you will. After that, you don’t have to open it.
A few basic commands, run in the folder with your compose file, will get you started:
docker compose pulldownloads the imagesdocker compose up -dstarts everything in the backgrounddocker compose logs -fshows what’s happeningdocker compose downstops and removes the containers (your data stays)
There are plenty of great places to find images and apps to learn with:
Awesome-Selfhosted (a giant list of self-hosted apps)
If you get stuck, you can always ask your favorite LLM to help you understand something. Full disclosure: I needed plenty of help understanding why things worked the way they did. LLMs can be great teachers, and they never get tired of stupid questions. For example, when I first tried to start Immich, docker compose up kept failing with errors I didn’t understand. It turned out GitHub’s image server had briefly refused one of the downloads (“too many requests”), so Docker canceled the others and then couldn’t start containers without their images. Running docker compose pull first, then docker compose up, worked fine. Little problems like that can derail you, and understanding why they happened is how you learn. Ask the LLM to explain, not just to do it for you. And if you’d rather not use AI, there’s always Reddit and the Docker forums.
I want to keep learning Docker, and I’m starting to think I need a Linux server, LOL. You know, in the interest of learning…
A few courses I found that seem worthwhile:
TechWorld with Nana - Docker Crash Course for Absolute Beginners
NetworkChuck - Docker Compose will BLOW your MIND!!
Docker’s official Get Started tutorial - this has been the most helpful for my project.
Notes:
-
I’m a hobbyist programmer, and there’s sooooo much I don’t know. I’m just sharing my thoughts and experiences; I could be totally wrong about much of it!
-
Speaking of having your own Linux server, one of the reasons would be to mess around with Umbrel. You could install Audiobookshelf with one click, plus hundreds of other apps like Immich, Plex, Jellyfin, Tailscale, etc. Umbrel runs each app as a Docker container. You get an easy one-click install with no compose files, ports, errors, etc but you sacrifice learning about Docker. So, thats a rabbit hole I’m still deep into right now. I really need to go back to work!
I'd love to hear your thoughts or suggestions! Please share your comments below: