I’ve been running jellyfin server on win10 but just got my hands on an old laptop that I turned into a ubuntu server.
my question is, is there any advantage on running jellyfin in a docker container?
I suppose it might be easier to get it up running, but might be more wasteful?
Also since it is all in containers, would be easier to troubleshoot or to just kill it and start anew.
Docker containers usually have a negligible performance overhead compared to bare metal. Certainly it won’t make or break jellyfin usability whether it is running in a container or not.
Some further advantages in addition to the ones you mentioned:
- trivially easy to up and downgrade versions (in case of a broken release for example)
- nearly 0 chance of incompatibilities stemming from your other installed packages or versions
- If your server is open to the public internet and you get hacked due to a flaw in jellyfin, any attacker finds himself inside the container. One typically mounts all media as read only into the container - so at that point all they can do is mess with your playback history and steal your home videos but a ransomware attack against your actual data is off the table.
edit: obviously you should still practice good security practices like requiring HTTPS, geoblocking etc. if you are open to the internet. Luckily there’s a fantastic container which pairs perfectly with the (imho preferrable) linuxserver/jellyfin container which provides this: linuxserver/swag. Just FYI
+1 for Docker if not for anything except the ability to easily upgrade and downgrade.
I generally grab my containers and specify a specific version number instead of latest. This allows me to have Jellyfin-10.8.1 (or whatever) and quickly go to Jellyfin-10.9.1 for testing and if there is any problem, just stop the new container and restart the old one.
This also makes it really easy to backup the /config directory if I want as well.
perfect! thanks!
one question regarding media folder, do I have to set it in the docker configuration (docker-compose) beforehand or I could use only the GUI to select the directories?
In case I must set it beforehand, would it work If I add symbolic links to that folder?
Unfortunately I don’t use a GUI to manage my docker compose config so I don’t know, sorry. Symlinks do work as long as you also mount the mount point to which the symlink points (if it is on another partition/physical disk)!
Oh no, sorry I meant the jellyfin GUI.
And thanks about the symlink, that gonna help!
Ah, right. Jellyfin running inside the container won’t know about anything happening outside of the container including any bare metal file system particulars, so you’ll have to manage mounts in the docker-compose file. AFAIK The official docker compose tutorial is pretty good but let me know if you need help!
I’ve done both bare metal and docker. I find containers much easier to manage, troubleshoot and deploy
awesome! Thanks!
Containers are nice because it’s harder for the container to leave behind files scattered across the filesystem. It’s also generally easier to upgrade, since your package manager is likely to only have a single version.
it’s harder for the container to leave behind files scattered across the filesystem
Yeah this is so much more convenient.
I run it as a LXC container in Proxmox. I love how easy it is to make snapshots (takes literally 2 seconds) I can roll back to, and the whole thing is just so easy to work with.
If you don’t have lots of self-hosted stuff, you probably won’t run need to run something like Proxmox though. Docker is fine for Jellyfin. Do you use hardware transcoding?
I intend to use it, but will depend on the CPU because I don’t have a GPU
I have transcoding working in LXC with Quicksync on the Intel CPU. It works well. Can be done.
great!
I have transcoding working in LXC with Quicksync on the Intel CPU. It works well. Can be done.
My distro is Debian, but I installed it using the Linux (generic amd64) method as posted on https://jellyfin.org/docs/general/installation/linux. I picked this method because I liked the installation instructions. All the files would be in a folder that I specified, I’m accustomed to using systemd to manage services, and the only manually installed dependency is FFmpeg.
I use docker for some other things, but since docker does take some effort to learn (it’s easy but it still slows me down), I ended up sticking with my manual Linux (generic amd64) installation. Upgrading versions is as simple as extracing the latest file to a folder, updating a symbolic link, and restarting the service. I may choose docker in the future, but haven’t had any problems for the 3-4 years that I’ve been doing it this way.
The main thing I like about containers is portability. Backup/copy your mounted folder with all the application’s data to any other system, point a new container of the same app to it and you’re up and running.
All the other advantages mentioned already are a really nice bonus.
I had trouble getting casting working from a container on my NAS, so I went back to my Windows server. But it’s easy enough to set up a test server with a small library and check to see if everything works for you.