Use any Linux distribution inside your terminal. Enable both backward and forward compatibility with software and freedom to use whatever distribution you’re more comfortable with.
docker to create containers using the Linux distribution of your choice.
The created container will be tightly integrated with the host, allowing sharing of
the HOME directory of the user, external storage, external USB devices and
graphical apps (X11/Wayland), and audio.
- Useful tips
- Featured Articles
- Run Distrobox on Fedora Linux – Fedora Magazine
- DistroBox – Run Any Linux Distribution Inside Linux Terminal – TecMint
- Using Distrobox To Augment The Package Selection On Clear Linux – Phoronix
- Benchmark: benefits of Clear Linux containers (distrobox) – Phoronix
- Distrobox – A great item in the Linux toolbelt – phmurphy’s blog
- Running Other Linux Distros with Distrobox on Fedora Linux – bandithijo’s blog
- Day-to-day differences between Fedora Silverblue and Ubuntu – castrojo’s blog
What it does
Simply put it’s a fancy wrapper around
docker to create and start containers highly integrated with the hosts.
The distrobox environment is based on an OCI image.
This image is used to create a container that seamlessly integrates with the rest of the operating system by providing access to the user’s home directory,
the Wayland and X11 sockets, networking, removable devices (like USB sticks), systemd journal, SSH agent, D-Bus,
ulimits, /dev and the udev database, etc…
It implements the same concepts introduced by https://github.com/containers/toolbox but in a simplified way using POSIX sh and aiming at broader compatibility.
All the props go to them as they had the great idea to implement this stuff.
It is divided into 6 commands:
distrobox-create– creates the container
distrobox-enter– to enter the container
distrobox-list– to list containers created with distrobox
distrobox-rm– to delete a container created with distrobox
distrobox-init– it’s the entrypoint of the container (not meant to be used manually)
distrobox-export– it is meant to be used inside the container, useful to export apps and services from the container to the host
It also includes a little wrapper to launch commands with
distrobox COMMAND instead of calling the single files.
See it in action
Thanks to castrojo, you can see Distrobox in action in this explanatory video on his setup with Distrobox, Toolbx, Fedora Silverblue on his project ublue (check it out!)
- Provide a mutable environment on an immutable OS, like Endless OS, Fedora Silverblue, OpenSUSE MicroOS or SteamOS3
- Provide a locally privileged environment for sudoless setups (eg. company-provided laptops, security reasons, etc…)
- To mix and match a stable base system (eg. Debian Stable, Ubuntu LTS, RedHat) with a bleeding-edge environment for development or gaming (eg. Arch, OpenSUSE Tumbleweed or Fedora with latest Mesa)
- Leverage high abundance of curated distro images for docker/podman to manage multiple environments
Refer to the compatiblity list for an overview of supported host’s distro HERE and container’s distro HERE.
This project aims to bring any distro userland to any other distro supporting podman or docker.
It has been written in POSIX sh to be as portable as possible and not have problems with dependencies and glibc version’s compatibility.
Refer HERE for a list of supported container managers and minimum supported versions.
It also aims to enter the container as fast as possible, every millisecond adds up if you use the container as your default environment for your terminal:
These are some sample results of
distrobox-enter on the same container on my weak laptop from 2015 with 2 core cpu:
Total time for 100 container enters: ~$ time (for i in 1..100; do distrobox-enter --name fedora-toolbox-35 -- whoami; done) real 0m36.209s user 0m6.520s sys 0m4.803s Mean: 36.209s/100=~0.362ms mean time to enter the container
I would like to keep it always below the Doherty Treshold of 400ms.
If you like to live your life dangerously, you can trust me and simply run this in your terminal:
curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/install | sudo sh
or if you want to select a custom directory to install without sudo:
curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/install | sh -s -- --prefix ~/.local
Else you can clone the project using
git clone or using the latest release HERE.
Enter the directory and run
./install, by default it will attempt to install in
~/.local but if you run the script as root, it will default to
/usr/local. You can specify a custom directory with the
--prefix flag such as
./install --prefix ~/.distrobox.
Prefix explained: main distrobox files get installed to
$prefix/bin whereas the manpages get installed to
Or check the Host Distros compatibility list for distro-specific instructions.
Distrobox depends on a container manager to work, you can choose to install either podman or docker.
Please look in the Compatibility Table for your distribution notes.
If you installed distrobox using the
install script in the default install directory use this:
curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/uninstall | sudo sh
or if you specified a custom path:
curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/uninstall | sh -s -- --prefix ~/.local
Else if cloned the project using
git clone or using the latest archive release from HERE,
enter the directory and run
./uninstall, by default it will assume the install directory was
/usr/local if ran as root or
~/.local, you can specify another directory if needed with
./uninstall --prefix ~/.local
You can take a look at some usage examples HERE
with a list of useful tips HERE