暗无天日

=============>DarkSun的个人博客

使用Toolbox构建容器中的开发环境(无需root权限)

Toolbox允许你基于容器创建相互独立的开发环境,它与Docker不同之处在于,它的底层通过podman来实现(因此无需root权限),而且它会尝试将容器与现有的主机环境无缝整合起来。

安装Toolbox

ArchLinux上可以通过AUR来安装Toolbox

yaourt -S toolbox

为当前用户创建用户命名空间的映射

podman 底层使用了Linux的用户命名空间来创建非root容器,因此我们还需要为当前用户创建用户命名空间的映射.

sudo touch /etc/subuid
sudo usermod --add-subuids 10000-65535 $(whoami)
sudo touch /etc/subgid
sudo usermod --add-subgids 10000-65535 $(whoami)

这个时候你若执行 toolbox create 尝试创建容器时会得到错误提示: toolbox: failed to call org.freedesktop.Flatpak.SessionHelper.RequestSession

该错误信息告诉我们 toolbox 还依赖于 Flatpak

安装 Flatpak

sudo pacman -S flatpak

创建容器

执行 toolbox create --container 容器名 会下载一个 OCI 镜像(默认为Fedora),并据此创建一个容器

lujun9972:~/ $ toolbox create --container dev1
No toolbox containers found. Create now? [y/N] y
Image required to create toolbox container.
Download registry.fedoraproject.org/f30/fedora-toolbox:30 (500MB)? [y/N]: y
Created container: dev1  
Enter with: toolbox enter --container dev1

进入容器进行环境配置

执行 toolbox enter --container 容器名 进入容器中,这时你会发现之前安装的许多软件都不见了,但是$HOME目录没有变化。

lujun9972:~/ $ emacs
bash: emacs: command not found
lujun9972:~/ $ ls |head
 1.txt
 2.mp4
'BOINC Manager-lujun9972'
 Child
 CodeLibrary
 Desktop
 Documents
 Downloads
 EAGET

你可以使用 dnf 来进行软件安装

lujun9972:~/ $ sudo dnf install gvim

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

No read/execute access in current directory, moving to /
Fedora Modular 30 - x86_64                    527 kB/s | 2.7 MB     00:05    
Fedora Modular 30 - x86_64 - Updates           27 kB/s | 3.3 MB     02:04    
Fedora 30 - x86_64 - Updates                  1.5 MB/s |  22 MB     00:14    
Fedora 30 - x86_64                            1.7 MB/s |  70 MB     00:40    
Dependencies resolved.

讲真,在Archlinux中使用 dnf,感觉真是怪怪的....

退出容器

退出容器就很简单了,直接执行 exit 就行了

其他操作

toolbox list
列出本机的容器和镜像
toolbox rm 容器名
删除指定容器
toolbox rmi 镜像名
删除指定镜像
toolbox help
帮助信息