01Not All Docker Images Are Created Equal
When you search Docker Hub for a service like Sonarr, you'll find the official image, the LinuxServer.io image, and dozens of community-built alternatives. Early in my self-hosting journey, I picked images randomly. After dealing with permission nightmares, inconsistent update schedules, and images that silently stopped being maintained, I learned to look for the LinuxServer.io version first.
LinuxServer.io (often abbreviated LSIO) is a volunteer team that maintains over 200 Docker images with a consistent interface, regular updates, and a focus on the self-hosting community. Their images solve problems you didn't know you had.
02What Makes LSIO Images Different
Every LSIO image follows the same conventions:
PUID/PGID: Set the user and group IDs the container runs as via environment variables. This eliminates the permission problems that plague Docker volumes. If your host user has UID 1000, set PUID=1000 and all files created by the container are owned by your user.
TZ: Set the timezone via the TZ environment variable. Consistent log timestamps across all services.
S6-overlay: LSIO images use the s6 init system, which properly handles process supervision, signal forwarding, and graceful shutdown. This matters more than you'd think — containers that don't handle SIGTERM correctly can lose data on restart.
Consistent paths: Configuration always lives in /config. This makes backup scripts simple — just back up the /config volume for every LSIO container.
Regular updates: The team rebuilds images weekly with the latest upstream versions and security patches. Their CI pipeline automatically tests every build.
03Using LSIO Images
Here's a typical LSIO container configuration:
[docker-compose.yml]
1services: 2 sonarr: 3 image: lscr.io/linuxserver/sonarr:latest4 container_name: sonarr5 restart: unless-stopped6 environment: 7 - PUID=1000 # Your user's UID (run 'id' to check)8 - PGID=1000 # Your user's GID9 - TZ=America/New_York10 volumes: 11 - sonarr_config:/config12 - /path/to/tv:/tv13 - /path/to/downloads:/downloads14 ports: 15 - "8989:8989"1617 jellyfin: 18 image: lscr.io/linuxserver/jellyfin:latest19 container_name: jellyfin20 restart: unless-stopped21 environment: 22 - PUID=100023 - PGID=100024 - TZ=America/New_York25 volumes: 26 - jellyfin_config:/config27 - /path/to/media:/media28 ports: 29 - "8096:8096"3031volumes: 32 sonarr_config: 33 jellyfin_config: Run 'id' on your host to find your UID and GID. On most single-user Linux systems, both are 1000. Setting PUID/PGID to match means you can access container-created files directly from the host without permission issues.
04When to Use LSIO Images
My rule of thumb: if LinuxServer.io maintains an image for the service I want to deploy, I use it over the official image. The consistency, the PUID/PGID support, and the reliable update schedule make them the best choice for self-hosting.
The exceptions: if the official image is actively maintained by the project developers and has features the LSIO image lacks, or if you need a specific version that LSIO hasn't built yet.
Browse lscr.io or the LinuxServer.io fleet list to see all available images. Many of our recipes on docker.recipes offer both official and LSIO image options — check the media and homelab categories especially.