配置您的系统以使用无根容器。容器是现代计算的重要组成部分,随着围绕容器的基础设施的发展,新的更好的工具开始浮出水面。在过去,你可以直接使用LXC来运行容器,但是随着Docker的流行,它开始变得越来越复杂。最后,Podman拥有我们对容器管理系统的期望:一个无守护进程的容器引擎,它使容器和Pod易于构建、运行和管理。容器直接与控制组和命名空间等Linux内核功能交互,并在这些命名空间内产生大量新进程。简而言之,运行容器实际上就是在Linux系统内部运行Linux系统。从操作系统的角度来看,它看起来很像管理和特权活动。普通用户通常无法像容器一样自由控制系统资源,因此默认情况下需要root或sudo权限才能运行Podman。但是,这只是默认设置,绝不是唯一可用的设置。本文演示了如何配置您的Linux系统,以便普通用户无需使用sudo(“无根”)即可运行Podman。命名空间的用户ID内核命名空间本质上是一个假想的结构,可以帮助Linux跟踪哪些进程属于同一类。这就是Linux中的“队列护栏”。一个队列中的进程与另一个队列中的进程之间几乎没有区别,但它们可以相互“隔离”。要将一组进程声明为“容器”,将另一组进程声明为操作系统,将它们分开是关键。Linux通过用户ID(UID)和组ID(GID)跟踪哪个用户或组拥有进程。通常,用户可以访问大约一千个从属UID以分配给命名空间的子进程。由于Podman运行分配给启动容器的用户的整个从操作系统,因此您需要的不仅仅是默认分配的从UID和从GID。您可以使用usermod命令授予用户更多的从属UID和从属GID。例如,要授予用户tux更多从属UID和从属GID,请选择尚未分配给用户的适当高UID(例如200000),并将其增加几千:$sudousermod\--add-subuids200000-265536\--add-subgids200000-265536\tux命名空间访问也有命名空间数量的限制。这通常设置得非常高。您可以使用内核参数工具sysctl验证用户命名空间分配:$sysctl--all--patternuser_namespacesuser.max_user_namespaces=28633这是大量的命名空间,可能是您发行版的默认设置。如果您的发行版没有此属性或设置得非常低,那么您可以通过在文件/etc/sysctl.d/userns.conf中输入此文本来创建它:user.max_user_namespaces=28633以加载此设置:$sudosysctl-p/etc/sysctl.d/userns.conf在没有root权限的情况下运行容器设置配置后,重新启动计算机以确保您的用户和内核参数更改得到尊重加载和激活。重启后,尝试运行一个容器镜像:$podmanrun-itbusyboxecho"hello"hellocontainer就像一个命令如果你刚接触容器,可能会觉得神秘,但实际上它们与你现有的Linux系统相关没有什么不同。它们实际上是在您的系统上运行的进程,没有模拟环境或虚拟机的成本和麻烦。容器和您的操作系统之间的区别只是内核名称空间,因此它们实际上只是具有不同标签的本地进程。Podman使这一点比以往任何时候都更加明显,当您将Podman配置为无根命令时,容器感觉更像是命令而不是虚拟环境。Podman让容器和Pod变得简单,所以试试吧。
