新聞中心
配置你的系統(tǒng)使用無根容器。

容器是現(xiàn)代計算的一個重要組成部分,隨著圍繞容器的基礎(chǔ)設(shè)施的發(fā)展,新的和更好的工具開始浮出水面。過去,你只需用 LXC 就可以運行容器,然而隨著 Docker 得到了普及,它開始變得越來越復(fù)雜。最終,我們在 Podman 得到了我們所期望的容器管理系統(tǒng):一個無守護進程的容器引擎,它使容器和吊艙易于構(gòu)建、運行和管理。
容器直接與 linux 內(nèi)核能力(如控制組和命名空間)交互,它們在這些命名空間中產(chǎn)生大量的新進程。簡而言之,運行一個容器實際上就是在 Linux 系統(tǒng)內(nèi)部運行一個 Linux 系統(tǒng)。從操作系統(tǒng)的角度來看,它看起來非常像一種管理和特權(quán)活動。普通用戶通常不能像容器那樣自由支配系統(tǒng)資源,所以默認情況下,運行 Podman 需要 root 或 sudo 權(quán)限。然而,這只是默認設(shè)置,而且這絕不是唯一可用的設(shè)置。本文演示了如何配置你的 Linux 系統(tǒng),使普通用戶可以在不使用 sudo 的情況下(“無根rootless”)運行 Podman。
命名空間的用戶 ID
內(nèi)核命名空間 本質(zhì)上是一種虛構(gòu)的結(jié)構(gòu),可幫助 Linux 跟蹤哪些進程屬于同一類。這是 Linux 中的“隊列護欄”。一個隊列中的進程與另一個隊列中的進程之間實際上沒有區(qū)別,但可以將它們用“警戒線”彼此隔離。要聲明一組進程為“容器”,而另一組進程為你的操作系統(tǒng),將它們分開是關(guān)鍵。
Linux 通過用戶 ID(UID)和組 ID(GID)來跟蹤哪個用戶或組擁有的進程。通常情況下,一個用戶可以訪問一千個左右的從屬 UID,以分配給命名空間的子進程。由于 Podman 運行的是分配給啟動容器的用戶的整個從屬操作系統(tǒng),因此你需要的不僅僅是默認分配的從屬 UID 和從屬 GID。
你可以用 usermod 命令授予一個用戶更多的從屬 UID 和從屬 GID。例如,要授予用戶 tux 更多的從屬 UID 和從屬 GID,選擇一個還沒分配用戶的適當?shù)母?UID(如 200000),然后將其增加幾千:
$ sudo usermod \
--add-subuids 200000-265536 \
--add-subgids 200000-265536 \
tux
命名空間訪問
對命名空間數(shù)量也有限制。這通常被設(shè)置得很高。你可以用 systctl,即內(nèi)核參數(shù)工具來驗證用戶的命名空間分配:
$ sysctl --all --pattern user_namespaces
user.max_user_namespaces = 28633
這是很充足的命名空間,而且可能是你的發(fā)行版默認設(shè)置的。如果你的發(fā)行版沒有這個屬性或者設(shè)置得很低,那么你可以在文件 /etc/sysctl.d/userns.conf 中輸入這樣的文本來創(chuàng)建它:
user.max_user_namespaces=28633
加載該設(shè)置:
$ sudo sysctl -p /etc/sysctl.d/userns.conf
在沒有 root 權(quán)限的情況下運行一個容器
當你設(shè)置好你的配置,重啟你的計算機,以確保你的用戶和內(nèi)核參數(shù)的變化被加載和激活。
重啟后,試著運行一個容器鏡像:
$ podman run -it busybox echo "hello"
hello
容器像命令一樣
如果你是第一次接觸容器,可能會覺得很神秘,但實際上,它們與你現(xiàn)有的 Linux 系統(tǒng)沒有什么不同。它們實際上是在你的系統(tǒng)上運行的進程,沒有仿真環(huán)境或虛擬機的成本和障礙。容器和你的操作系統(tǒng)之間的區(qū)別只是內(nèi)核命名空間,所以它們實際上只是帶有不同標簽的本地進程。Podman 使這一點比以往更加明顯,當你將 Podman 配置為無根命令,容器感覺更像命令而不是虛擬環(huán)境。Podman 使容器和吊艙變得簡單,所以請試一試。
當前題目:無需sudo使用Podman在Linux上運行容器
當前網(wǎng)址:http://www.dlmjj.cn/article/djosphp.html


咨詢
建站咨詢
