BCVK-EPHEMERAL(8)

πŸ“¦
version 0.21.0 Β· 3 versions
, in fedora 43, fedora 44

πŸ’– BCVK-EPHEMERAL(8) β€” the manual page, but make it a group chat πŸ’–

okay bestie so this is bcvk-ephemeral, section 8 of the manual, and it's literally the girlboss of stateless VM management. it lives under bcvk, and it is obsessed with bootc container images. no cap. let's get into it. πŸ¦‹


✨ SYNOPSIS ✨

bcvk ephemeral <SUBCOMMAND>

that's it. that's the whole vibe. you give it a subcommand, it gives you a VM. πŸ’…


🌸 DESCRIPTION 🌸

so. you want to manage stateless VMs for bootc container images. that's the whole job. that's what this does.

Ephemeral VMs are managed by podman and boot directly from the container image's filesystem. now, if you've met bcvk-libvirt-run(8) (the libvirt VM girlies), this is a whole different energy. ephemeral VMs:

  • Boot directly from the container image via virtiofs β€” no disk image creation, we don't do that here πŸ’…
  • Start in seconds rather than minutes (the way that it's fast?? iconic)
  • Are stateless by default β€” filesystem changes don't persist across restarts, so don't get attached
  • Are managed via podman β€” use familiar container tooling, iykyk
fr fr this makes ephemeral VMs ideal for local development, CI pipelines, and any workflow where you want fast iteration without persistent state. main character workflow energy only.

🧚 How It Works

Ephemeral VMs use a container-in-container architecture. yes bestie, containers inside containers, it's giving inception but make it virtualization:

  1. A podman container is launched containing QEMU and virtiofsd
  2. The bootc container image's filesystem is shared into the VM via virtiofs
  3. The VM boots using the kernel and initramfs from the container image
  4. SSH access is provided via dynamically generated keys πŸ”‘

your host needs /dev/kvm access and a virtualization stack (qemu, virtiofsd). no /dev/kvm, no VM, that's just the rules. 😭


πŸ‘‘ SUBCOMMANDS πŸ‘‘


πŸ”₯ EXAMPLES πŸ”₯

⭐ Quick Interactive Session

the simplest way to boot a bootc image is run-ssh, which starts the VM and drops you into an SSH session. when you exit, the VM is cleaned up. auto. effortless. periodt.

bcvk ephemeral run-ssh quay.io/fedora/fedora-bootc:42

πŸŽ€ Build and Test Workflow

a typical development loop combines podman build with ephemeral testing. the way that this is just the daily routine:

# Edit your Containerfile
vim Containerfile

# Build the image
podman build -t localhost/mybootc .

# Test it immediately
bcvk ephemeral run-ssh localhost/mybootc

# Iterate: edit, build, test again
podman build -t localhost/mybootc . && bcvk ephemeral run-ssh localhost/mybootc

πŸ’œ Background VM with SSH Access

for longer sessions, or when you need to reconnect, run the VM in the background. lowkey the move:

# Start VM in background with SSH keys and auto-cleanup
bcvk ephemeral run -d --rm -K --name testvm quay.io/fedora/fedora-bootc:42

# SSH into it (can reconnect multiple times)
bcvk ephemeral ssh testvm

# Run commands directly
bcvk ephemeral ssh testvm 'systemctl status'

# Stop when done (--rm ensures cleanup)
podman stop testvm

🌈 Development VM with Host Directory Access

mount your source code into the VM for development. bestie your code is in there now:

bcvk ephemeral run -d --rm -K \
    --bind /home/user/project:project \
    --name devvm localhost/mybootc

bcvk ephemeral ssh devvm
# Inside VM: cd /run/virtiofs-mnt-project

πŸ“ Resource Customization

allocate more resources for heavy workloads. feed her, she's hungry:

bcvk ephemeral run-ssh --memory 8G --vcpus 4 localhost/mybootc

or use instance types:

bcvk ephemeral run-ssh --itype u1.medium localhost/mybootc

πŸ¦‹ SEE ALSO πŸ¦‹

bcvk(8), bcvk-ephemeral-run(8), bcvk-ephemeral-run-ssh(8), bcvk-ephemeral-ssh(8), bcvk-libvirt(8)


πŸ’« VERSION πŸ’«

v0.21.0


okay that's the whole page, you ate it, you understood it, I'm so proud of you πŸ₯Ήβœ¨ this was bcvk-ephemeral(8), and this version of the manual is v0.21.0 β€” sending you all the virtualized love from the group chat, mwah πŸ’–πŸŽ€πŸ«Ά </parameter>

πŸ“¦ where this page comes from