摘要:雖然新命名空間與其他同級對象隔離但其父命名空間中的進程仍會看到子命名空間中的所有進程盡管具有不同的編號。命名空間允許更改主機名。裝載命名空間允許創建不同的文件系統布局或使某些裝入點為只讀。用戶命名空間將用戶通過命名空間隔離開來。
docker 以進程為核心, 對系統資源進行隔離使用的管理工具. 隔離是通過 cgroups (control groups 進程控制組) 這個操作系統內核特性來實現的. 包括用戶的參數限制、 帳戶管理、 資源(CPU,內存,磁盤I/O,網絡)使用的隔離等. docker 在運行時可以為容器內進程指定用戶和組. 沒有指定時默認是 root .但因為隔離的原因, 并不會因此喪失安全性. 傳統上, 特定的應用都以特定的用戶來運行, 在容器內進程指定運行程序的所屬用戶或組并不需要在 host 中事先創建.
進程控制組cgroups主要可能做以下幾件事:
資源限制 組可以設置為不超過配置的內存限制, 其中還包括文件系統緩存
優先級 某些組可能會獲得更大的 CPU 利用率份額或磁盤 i/o 吞吐量
帳號會計 度量組的資源使用情況, 例如, 用于計費的目的
控制 凍結組進程, 設置進程的檢查點和重新啟動
與 cgroups(控制進程組) 相關聯的概念是 namespaces (命令空間).
命名空間主要有六種名稱隔離類型:
PID 命名空間為進程標識符 (PIDs) 的分配、進程列表及其詳細信息提供了隔離。
雖然新命名空間與其他同級對象隔離, 但其 "父 " 命名空間中的進程仍會看到子命名空間中的所有進程 (盡管具有不同的 PID 編號)。
網絡命名空間隔離網絡接口控制器 (物理或虛擬)、iptables 防火墻規則、路由表等。網絡命名空間可以使用 "veth " 虛擬以太網設備彼此連接。
UTS 命名空間允許更改主機名。
mount(裝載)命名空間允許創建不同的文件系統布局, 或使某些裝入點為只讀。
IPC 命名空間將 System V 的進程間通信通過命名空間隔離開來。
用戶命名空間將用戶 id 通過命名空間隔離開來。
普通用戶 docker run 容器內 root如 busybox, 可以在 docker 容器中以 root 身份運行軟件. 但 docker 容器本身仍以普通用戶執行.
考慮這樣的情況
echo test | docker run -i busybox cat
前面的是當前用戶當前系統進程,后面的轉入容器內用戶和容器內進程運行.
當在容器內 PID 以1運行時, Linux 會忽略信號系統的默認行為, 進程收到 SIGINT 或 SIGTERM 信號時不會退出, 除非你的進程為此編碼. 可以通過 Dockerfile STOPSIGNAL signal指定停止信號.
如:
STOPSIGNAL SIGKILL
創建一個 Dockerfile
FROM alpine:latest RUN apk add --update htop && rm -rf /var/cache/apk/* CMD ["htop"]
$ docker build -t myhtop . #構建鏡像 $ docker run -it --rm --pid=host myhtop #與 host 進程運行于同一個命名空間普通用戶 docker run 容器內指定不同用戶 demo_user
docker run --user=demo_user:group1 --group-add group2
這里的 demo_user 和 group1(主組), group2(副組) 不是主機的用戶和組, 而是創建容器鏡像時創建的.
當Dockerfile里沒有通過USER指令指定運行用戶時, 容器會以 root 用戶運行進程.
USERdocker run -u(--user)[user:group] 或 --group-add 參數方式[: ] #或 USER [: ]
$ docker run busybox cat /etc/passwd root:x:0:0:root:/root:/bin/sh ... www-data:x:33:33:www-data:/var/www:/bin/false nobody:x:65534:65534:nobody:/home:/bin/false $ docker run --user www-data busybox id uid=33(www-data) gid=33(www-data)docker 容器內用戶的權限
對比以下情況, host 中普通用戶創建的文件, 到 docker 容器下映射成了 root 用戶屬主:
$ mkdir test && touch test/a.txt && cd test $ docker run --rm -it -v `pwd`:/mnt -w /mnt busybox /bin/sh -c "ls -al /mnt/*" -rw-r--r-- 1 root root 0 Oct 22 15:36 /mnt/a.txt
而在容器內卷目錄中創建的文件, 則對應 host 當前執行 docker 的用戶:
$ docker run --rm -it -v `pwd`:/mnt -w /mnt busybox /bin/sh -c "touch b.txt" $ ls -al -rw-r--r-- 1 xwx staff 0 10 22 23:36 a.txt -rw-r--r-- 1 xwx staff 0 10 22 23:54 b.txtdocker volume 文件訪問權限
創建和使用卷, docker 不支持相對路徑的掛載點, 多個容器可以同時使用同一個卷.
$ docker volume create hello #創建卷 hello $ docker run -it --rm -v hello:/world -w /world busybox /bin/sh -c "touch /world/a.txt && ls -al" #容器內建個文件 total 8 drwxr-xr-x 2 root root 4096 Oct 22 16:38 . drwxr-xr-x 1 root root 4096 Oct 22 16:38 .. -rw-r--r-- 1 root root 0 Oct 22 16:38 a.txt $ docker run -it --rm -v hello:/world -w /world busybox /bin/sh -c "rm /world/a.txt && ls -al" #從容器內刪除 total 8 drwxr-xr-x 2 root root 4096 Oct 22 16:38 . drwxr-xr-x 1 root root 4096 Oct 22 16:38 ..
外部創建文件, 容器內指定用戶去刪除
$ touch c.txt && sudo chmod root:wheel c.txt $ docker run -u 100 -it --rm -v `pwd`:/world -w /world busybox /bin/sh -c "rm /world/c.txt && ls -al"
實際是可以刪除的
rm: remove "/world/c.txt"? y total 4 drwxr-xr-x 4 100 root 128 Oct 23 16:09 . drwxr-xr-x 1 root root 4096 Oct 23 16:09 .. -rw-r--r-- 1 100 root 0 Oct 22 15:36 a.txt -rw-r--r-- 1 100 root 0 Oct 22 15:54 b.txtdocker 普通用戶的1024以下端口權限
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27510.html
摘要:鏡像可先推送到私有倉庫測試發現鏡像有問題鏡像以用戶運行切換,賦權對參數做定制將創建域,組織名稱為域管理員及管理員密碼持久化存儲,本例使用已創建好的存儲系統,其支持動態提供。 前言 如同Linux操作系統安裝完成后,管理員需為應用創建不同的用戶,那么,K8S/OKD/Openshift集群同樣也需如此,而在OKD/Openshift集群里,我們可集成OpenLDAP目錄系統,方法如下所示...
摘要:鏡像可先推送到私有倉庫測試發現鏡像有問題鏡像以用戶運行切換,賦權對參數做定制將創建域,組織名稱為域管理員及管理員密碼持久化存儲,本例使用已創建好的存儲系統,其支持動態提供。 前言 如同Linux操作系統安裝完成后,管理員需為應用創建不同的用戶,那么,K8S/OKD/Openshift集群同樣也需如此,而在OKD/Openshift集群里,我們可集成OpenLDAP目錄系統,方法如下所示...
摘要:由于隔離的進程獨立于宿主和其它的隔離的進程,因此也稱其為容器。設計時,就充分利用的技術,將其設計為分層存儲的架構。鏡像實際是由多層文件系統聯合組成。分層存儲的特征還使得鏡像的復用定制變的更為容易。前面講過鏡像使用的是分層存儲,容器也是如此。 本文只是對Docker的概念做了較為詳細的介紹,并不涉及一些像Docker環境的安裝以及Docker的一些常見操作和命令。 閱讀本文大概需要15分...
閱讀 3778·2021-11-23 09:51
閱讀 4412·2021-11-15 11:37
閱讀 3526·2021-09-02 15:21
閱讀 2750·2021-09-01 10:31
閱讀 882·2021-08-31 14:19
閱讀 859·2021-08-11 11:20
閱讀 3313·2021-07-30 15:30
閱讀 1695·2019-08-30 15:54