Distrobox 是一个工具,它允许您创建和管理基于容器的开发环境,而无需 root 权限。
Distrobox 可以使用 播客 或者 码头工人 使用您选择的 Linux 发行版创建容器。
创建的容器将与主机紧密集成,允许共享用户的 HOME 目录、外部存储、外部 USB 设备、图形应用程序(X11/Wayland)和音频。
作为一个项目,它的灵感来自 Container Toolbx(它们的所有道具!),但它旨在与主机和容器具有更广泛的兼容性,而无需在 Distrobox 中使用专用图像。
它分为4个部分:
- 发行版创建 – 创建容器
- 发行盒进入 – 进入容器
- 发行版-ini吨 – 它是容器的入口点(不打算手动使用)
- 发行盒出口 – 它旨在用于容器内部,用于将应用程序和服务从容器导出到主机
今天我们就来看看它的使用方法 Fedora (工作站和 Silverblue/Kinoite)在您的终端中拥有基于多个 Linux 发行版的多样化环境。
为什么要使用 Distrobox
Container Toolbx 项目已经极大地解决了在终端中将容器用于开发环境的问题,但您有时可能需要特定的 Linux 发行版,或者将应用程序或服务从容器中导出到容器,再返回到主机。
一般来说,它是一个解决一些问题的工具,例如:
- 在不可变操作系统(如 Endless OS)上提供可变环境, Fedora Silverblue、OpenSUSE MicroOS 或 SteamOS3
- 为无 sudoless 设置提供本地特权环境(例如,公司提供的笔记本电脑、安全原因等……)
- 将稳定的基础系统(例如 Debian Stable、Ubuntu LTS、Red Hat)与用于开发或游戏的前沿环境(例如 Arch 或 OpenSUSE Tumbleweed 或 Fedora 与最新的台面)
- 利用 docker/podman 的大量精选发行版映像来管理多个环境
它与 Toolbx 有何不同?
Distrobox 旨在通过使用容器的官方发行版的 OCI 映像来保持与主机端和容器端发行版的广泛兼容性。 它支持所有主要发行版,并维护一个受支持和经过测试的容器映像的精选表。
安装
安装 Distrobox 非常简单,您可以简单地使用以下命令:
curl https://raw.githubusercontent.com/89luca89/distrobox/main/install | sudo sh
或者如果您不想(或不能)使用 sudo,您可以在没有root权限的情况下安装它:
curl https://raw.githubusercontent.com/89luca89/distrobox/main/install | sh -s -- -p ~/.local/bin/
它也可以从 copr 获得:
sudo dnf copr enable alciregi/distrobox sudo dnf install distrobox
Distrobox 依赖于 podman 或 docker 来工作。 我们今天将探索 播客 路线。
在 Silverblue/Kinoite 上你已经准备好了,在 Workstation 或 Spin 上你需要安装 podman,所以运行:
sudo dnf install podman
入门
要开始使用 Distrobox,您只需键入:
luca-linux@x250:~$ distrobox-create
创建你的第一个容器。 默认情况下,它使用 fedora-toolbox 35 镜像。
您可以通过传递标志来指定自定义名称和图像:
luca-linux@x250:~$ distrobox-create --name ubuntu-20 --image ubuntu:20.04
上面的命令将创建一个基于普通 OCI 映像的发行箱 Ubuntu 20.
您可以使用来自不同注册表的多样化分发生态系统。 为了 example,我们可能想使用更多来自 AUR:
luca-linux@x250:~$ distrobox-create --name arch-distrobox --image archlinux:latest
或者我们想使用只支持 Debian 8 的旧应用程序:
luca-linux@x250:~$ distrobox-create --name debian8-distrobox --image debian:8
如果主机上不存在容器映像,系统会在创建发行版时提示您下载它。
创建完成后,您可以简单地
luca-linux@x250:~$ distrobox-enter --name arch-distrobox
进入容器并开始玩耍。
在容器中玩耍
现在我们在我们的发行版中,我们可以继续自定义它,因为我们想要的,因为 example 我们可以安装仅在 AUR 中的漂亮软件包:
现在我们可以简单地启动我们的应用程序以用作普通应用程序:

从容器导出到主机
如果我们从发行版中安装了我们经常使用的东西,我们可以将其导出回主机以便更轻松地使用它,而不必每次都从终端启动它们。
我们可以用 发行盒出口 将我们的应用程序导出回主机,例如 example:
luca-linux@x250:~$ distrobox-enter --name arch-distrobox luca-linux@arch-distrobox:~$ distrobox-export --app atom
将导致:

现在应用程序的行为和显示为正常安装的图形应用程序,图标、主题和字体也与主机集成。
但是我们也可以简单的导出 二进制文件 和 系统服务.
假设你想在你的 Ubuntu 存储库中安装 Syncthing Fedora 银蓝系统。 只需运行:
luca-linux@x250:~$ distrobox-enter --name ubuntu-21 luca-linux@ubuntu-21:~$ sudo apt install syncthing
现在通过运行以下命令将容器中的 syncthing 服务导出回主机:
luca-linux@ubuntu-21:~$ distrobox-export --service syncthing@ --extra-flags Service [email protected] successfully exported. OK [email protected] will appear in your services list in a few seconds. To check the status, run: systemctl --user status [email protected] To start it, run: systemctl --user start [email protected] To start it at login, run: systemctl --user enable [email protected]
现在回到主机上,您可以运行:
luca-linux@x250:~$ systemctl --user enable --now ubuntu-21-syncthing@$USER
你很高兴:
luca-linux@x250:~$ systemctl --user status ubuntu-21-syncthing@luca-linux ● [email protected] - Syncthing - Open Source Continuous File Synchronization for luca.di.maio Loaded: loaded (/home/luca-linux/.config/systemd/user/[email protected]; enabled; vendor preset: enabled) Active: active (running) since Wed 2021-12-22 18:10:56 CET; 1 day 2h ago Docs: man:syncthing(1) Main PID: 1210423 (distrobox-enter) CGroup: /user.slice/user-1000.slice/[email protected]/ubuntux2d22x2dsyncthing.slice/[email protected] ├─1210423 /bin/sh /home/luca-linux/.local/bin/distrobox-enter -H -n ubuntu-21 -- /usr/bin/syncthing -no-browser -no-restart -logflags=0 -allow-newer-config └─1210445 podman --remote exec --user=luca-linux --workdir=/home/luca-linux [...] [....]
安装旧的或不可用的应用程序
如果您在新系统上特别需要旧应用程序怎么办? 你真的需要 2014 年的旧 deb 并且没有可用的 Flatpak? 你可以求助于 Distrobox:
luca-linux@x250:~$ distrobox-create --name old-ubuntu --image ubuntu:14. luca-linux@x250:~$ distrobox-enter --name old- luca-linux@old-ubuntu:~$ sudo dpkg -i ./that-old-program. luca-linux@old-ubuntu:~$ distrobox-export --app that-old-program luca-linux@old-ubuntu:~$ distrobox-export --bin /usr/bin/that-old-program --export-path ~/.local/bin
现在你有了你的老式环境并安装你在网上找到的旧的 deb 包,而不用弄乱外星人、旧的 glibc 或乱扔你的主操作系统。
这对于非 rpm 打包且不提供 Flatpak 的应用程序也很方便。
退出发行版
您可以随时通过简单地使用 exit 或按 Ctrl+D 退出发行版:
luca-linux@x250:~$ hostname x250 luca-linux@x250:~$ distrobox-enter luca-linux@fedora-toolbox-35:~$ hostname fedora-toolbox-35 luca-linux@fedora-toolbox-35:~$ exit logout luca-linux@x250:~$
直接在发行版中执行命令
您可以指定要在发行版而不是 shell 中执行的自定义命令。
为了 example:
luca-linux@x250:~$ distrobox-enter --name fedora-toolbox-35 -- sudo dnf update -y Fedora 35 - x86_64 1.4 MB/s | 79 MB 00:56 Fedora 35 openh264 (From Cisco) - x86_64 2.0 kB/s | 2.5 kB 00:01 Fedora Modular 35 - x86_ 1.3 MB/s | 3.3 MB 00:02 Fedora 35 - x86_64 - Updates 2.3 MB/s | 17 MB 00:07 Fedora Modular 35 - x86_64 - Updates 1.2 MB/s | 2.8 MB 00:02 Dependencies resolved. [...]
这在脚本中可能很有用,它被 发行盒出口 用于将容器导出与主机集成的实用程序。
技巧和窍门
正如您在阅读本文时可能已经注意到的那样,distrobox 的容器支持不同的 Linux 发行版。
您可以在项目页面中找到完整列表: https://github.com/89luca89/distrobox#containers-distros。
它支持从旧版本到超新版本的所有主要发行版,例如
- Debian – 从 8 到当前的不稳定(以及所有衍生产品)
- Ubuntu – 从 14.04 到 22.04
- Centos/Red Hat/Alma Linux/Rocky Linux/Amazon Linux – 从 7 到 8 以及流 8 和 9
- Fedora (测试 30 到 35)
- Archlinux
- 高山 Linux
- Slackware
- 空白
- Kali Linux(如果你想在 Silverblue 上进行渗透测试)
这使您可以灵活地在您选择的任何发行版中使用任何类型的软件。
复制现有的发行版
还可以复制现有的发行版盒,这很方便。 这在 for 期间很有用 example distrobox 更新,或重命名 distrobox,或简单地对其进行快照并保存图像。
luca-linux@x250:~$ distrobox-create --name cloned-arch --clone arch-distrobox luca-linux@x250:~$ distrobox-enter --name cloned-arch luca-linux@cloned-arch:~$
备份和恢复发行版
要保存、导出和重用已配置的容器,您可以利用 podman save 和 podman import 来创建环境的快照。
使用 podman 将容器保存到图像:
podman container commit -p distrobox_name image_name_you_choose podman save image_name_you_choose:latest | gzip >image_name_you_choose.tar.gz
这将在那个确切时刻创建您选择的容器的 tar.gz。
现在您可以备份该存档或将其传输到另一台主机,并恢复它只需运行
podman import image_name_you_choose.tar.gz
并基于该图像创建一个新容器:
distrobox-create --image image_name_you_choose:latest --name distrobox_name distrobox-enter --name distrobox_name
一切顺利,现在您可以通过简单(且可编写脚本)的步骤在任何地方重现您的个人环境。
管理你的发行盒
要管理正在运行的容器,您可以简单地使用您选择的容器管理器:
luca-linux@x250:~$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3bd26417ec22 /ubuntu:21.10 /usr/bin/entrypoi... 2 days ago Up 2 days ago ubuntu-21 36101d9e2d17 archlinux:latest /usr/bin/entrypoi... 3 hours ago Up 3 hours ago arch-distrobox
您可以使用删除现有的发行版
podman stop your_distrobox_name podman rm your_distrobox_name
您可以在这篇杂志文章中阅读有关 Podman 的更多信息。
结论
总之,distrobox 可以是一个方便的工具 Fedora Workstation 和 Silverblue/Kinoite,允许与软件向后和向前兼容,并且可以自由使用您更喜欢的任何发行版。
该项目仍在积极开发中,因此任何类型的贡献和 报告错误 很受欢迎。