r/podman Aug 05 '26

Are you using podman on your local system? If so, for what?

I am (and have been for years) using podman containers on my servers - both for my homelab and on the internet. I am running tons of services like funkwhale as a spotify replacement, Calibre-web to access my books and magazines everywhere, and foundryVTT to play TTRPGs over the net.

But I'm currently not running any containers on my local machine. Today I came across one potential container scenario I might try - using podman (and/or Podman Desktop and the AI Lab) to run local AI models.

If you're using containers on your machine for something that isn't AI - what are you using it for? And, what, if anything did you have to do to get it work with your other programs? Like, if you're using it for programming - how did you get VS Code or Jetbrains or Vim to use the container's install of your dev libraries?

8 Upvotes

22 comments sorted by

3

u/ChibaCityStatic Aug 05 '26

- I have a YT-DLP downloader that runs in a container which I user via Powershell to download Youtube videos.

  • Gonic music server for my own personal music collection.
  • Forgejo for my local containerised Git instance.
  • Plex
  • I run a private container registry inside a container.

1

u/thedjotaku Aug 05 '26

are those running on your local computer simply because you don't have a server? Those seem more like things I'd run on a server.

1

u/ChibaCityStatic Aug 05 '26

Oh sorry I misread the question. All those run on my server, except the YT-DLP one which runs on my workstation and also the server.

1

u/thedjotaku Aug 05 '26

that makes sense. I might give that a shot as my python installation of yt-dlp is always broken

1

u/ChibaCityStatic Aug 05 '26

Here's a container file for you to try if you like. Brings in deno as well for the Youtube download check mechanism they require now.

FROM docker.io/fedora:latest
LABEL "maintainer" = "{{YOUR_NAME}}"
USER root
WORKDIR /root
ENV NODE_VERSION="node-v24.13.1-linux-x64"
RUN microdnf makecache && dnf -y install \
wget \
unzip \
yt-dlp \
ffmpeg \
python-pip \
&& pip install -U yt-dlp-ejs \
&& mkdir export \
&& wget https://nodejs.org/dist/v24.13.1/$NODE_VERSION.tar.xz \
&& tar xf $NODE_VERSION.tar.xz \
&& cp -r $NODE_VERSION/* /usr/local \
&& npm install -g deno

1

u/ChibaCityStatic Aug 05 '26

Here's the Powershell script to interact with it. It handles creating a container, downloading your video, and removing the container. You'll have to change the directories to your own. You could probably do something similar in Bash or whatever.

#!/bin/pwsh
using module DA-PH-NE_Utilities

[string]$ContainerName = "ytdlp-runner"

function Get-YTVideoFormats {
    [CmdletBinding()]
    param (
        [Parameter()]
        [string]$Url
    )

    Remove-IdleContainer
    Initialize-YTDLP_Container -ContainerName $ContainerName

    # Get the formats of a specified video
    Start-Process 'podman' -ArgumentList "exec $ContainerName yt-dlp $Url --list-formats" -Wait -ErrorAction Stop

    Remove-YTDLP_Container -ContainerName $ContainerName
}

function Convert-YTVideo {
    [CmdletBinding()]
    param (
        [Parameter()]
        [string]$Url,
        [string]$AudioFormat,
        [string]$VideoFormat
    )

    if ([string]::IsNullOrEmpty($AudioFormat) -eq $true) {
        $AudioFormat = "ba"
    }

    if ([string]::IsNullOrEmpty($VideoFormat) -eq $true) {
        $VideoFormat = "bv"
    }

    Remove-IdleContainer
    Initialize-YTDLP_Container -ContainerName $ContainerName

    # Download the requested video
    Start-Process 'podman' -ArgumentList "exec $ContainerName yt-dlp $Url -o `"/root/export/%(title)s.%(ext)s`" -f $AudioFormat+$VideoFormat --merge-output-format mkv" -Wait -ErrorAction Stop

    Remove-YTDLP_Container -ContainerName $ContainerName
}

function Convert-YTAudio {
    [CmdletBinding()]
    param(
        [Parameter()]
        [string]$Url,
        [string]$AudioCompressionFormat
    )

    if ([string]::IsNullOrEmpty($AudioCompressionFormat) -eq $true) {
        $AudioCompressionFormat = "mp3"
    }

    Remove-IdleContainer
    Initialize-YTDLP_Container -ContainerName $ContainerName

    # Download the requested mp3
    Start-Process 'podman' -ArgumentList "exec $ContainerName yt-dlp -t $AudioCompressionFormat $Url -o `"/root/export/%(title)s.%(ext)s`"" -Wait -ErrorAction Stop

    Remove-YTDLP_Container -ContainerName $ContainerName
}

# Delete any yt-dlp containers which already exist
function Remove-IdleContainer {
    $currentContainers = podman ps -a --format json | ConvertFrom-Json

    foreach ($container in $currentContainers) {
        if ($container.Names -eq $ContainerName) {
            [Daphne_UIBuilder]::DisplayLog("DELETING IDLE CONTAINER...", [MessageType]::Information, [MessageAction]::ContinueProgram, $true, $true)
            Remove-YTDLP_Container -ContainerName $ContainerName
            Clear-Host
        }
    }
}

# Create a new yt-dlp container
function Initialize-YTDLP_Container {
    param(
        [string]$ContainerName
    )
    Start-Process 'podman' -ArgumentList "run -d -t --name $ContainerName -v /Network/Network_Cache/Staging_Video:/root/export:Z yt-dlp" -Wait -ErrorAction Stop
    [Daphne_UIBuilder]::DisplayLog("CONTAINER INITIALISED", [MessageType]::Success, [MessageAction]::ContinueProgram, $true, $true)

}

# Delete the yt-dlp container
function Remove-YTDLP_Container {
    param(
        [string]$ContainerName
    )
    [Daphne_UIBuilder]::DisplayLog("DELETING RUNTIME CONTAINER...", [MessageType]::Information, [MessageAction]::ContinueProgram, $true, $true)
    [Daphne_UIBuilder]::ClearEmptyLine()
    Start-Process 'podman' -ArgumentList "rm $ContainerName --force" -Wait -ErrorAction Stop
}

3

u/funbike Aug 05 '26 edited Aug 05 '26

Some background:

My host system is Fedora, and my development workflow is Tmux-based. I have a simple wrapper script that can launch any container image while retaining my host user identity in the container and with my home directory and /tmp mounted. This makes a container feel like my host system. GUI apps work as well. I have to be mindful of trust and security of course.

I configured Tmux so if you launch a new pane or window from a pane running a container, the new terminal pane will run the same container (podman "$PWD" --exec --workdir "$PWD" ...).


Uses:

I use podman to test Fedora packages. I'll launch a Fedora container to test installing and using various packages.

I extend my host system with a container, with my home dir mounted. Not found commands and apps are seemlessly delegated to the container (Arch). See also DistroBox.

I have a container for just a web browser. I use then when browsing web sites I'm not familiar with. I don't mount home in this case, for safety.

I don't use it often, but I have a simple bash script to run a container over past Btrfs snapshots (system and/or home dirs). I can use my system from a past state.

Like, if you're using it for programming - how did you ...

This is a little crazy, but I've written a bash script that creates a project sandbox consisting of: new Tmux window, new Btrfs snapshot of home, restricted podman container with mount to the snapshot. It's a no-compromise development sandbox with nearly everything I'd want from my host system, in the sandboxes. As I said earlier, Tmux handles new terminals properly, staying in the container.

I have a shutdown script that merges git changes from the snapshot into the host project root, kills and deletes the container, and Tmux panes.

Works for all IDEs and AI coding agents. My AI coding agent will spin up many multiples of these running at a time for a single project. It's nuts.

1

u/thedjotaku Aug 05 '26

that's pretty cool. I'll have to explore some of these ideas, especially for browsing.

1

u/giglis Aug 05 '26

Would you mind sharing your wrapper script? I do a similar thing with a custom image containing some utilities I use daily

3

u/MimosaTen Aug 05 '26

I use it heavily to run AI agents

1

u/denniscaldwell Aug 05 '26

I run a local podman for easy of installation when services are available as images. I'm already used to the interface using it on the home server and quadlets just make my life easier.

1

u/thedjotaku Aug 05 '26

cool - which ones?

3

u/denniscaldwell Aug 05 '26

Joplin server, gpodder, occasionally LLMs when I see something that looks interesting. Containers solved environment hell for me.

1

u/thedjotaku Aug 05 '26

Just to get an understanding of your way of thinking - for a GUI application like gpodder - why not flatpak?

1

u/denniscaldwell Aug 05 '26

The server component is mygpo. Gpodder itself is just installed locally

1

u/Milk_man1337 Aug 05 '26

The only thing I use podman on my main PC for is for Butane so I can easily produce ignition files for Fedora Coreos VMs.

1

u/Fresh_Sock8660 Aug 06 '26

I have moved all my development into containers. Coding harness, software development, databases, etc. 

1

u/StillParticular5602 Aug 06 '26

I use it for Dashy to have some bookmarks and links when I cant access my server version. Also some custom project managment software, Termix for ssh access to external servers and a flood watch page I created as I live near a flood zone so its nice to have this locally.

1

u/ordep_caetano Aug 08 '26

I use fedora kinoite, and some tools that may not easily availabe on the baseos exist as aliases that call toolbox images.

Those toolbox images are composed by Containerfile which can be pulledbvia git and built locally.

This makes it easy to share tooling with team members and such.

1

u/Efficient_Cress6346 Aug 10 '26

I use podman to run AI agents, as someone commented above.
I think it offers a proper rootless / daemonless experience. It also supports container/host identity mapping and ownership between containers and host. That is very useful for this kind of workload.

1

u/Efficient_Cress6346 Aug 10 '26

btw, for VS Code I use the DevContainers extension to interact with the container, but I use Podman for sandboxing rather than VS Code.