成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

容器的四大基礎技術

系統 Linux
在本文中,我研究了容器是如何在一些特殊的 Linux 技術基礎上實現的,這其中包括命名空間和控制組。

[[424501]]

在本文中,我研究了容器是如何在一些特殊的 Linux 技術基礎上實現的,這其中包括命名空間和控制組。

圖1:對容器有貢獻的 Linux 技術(Nived Velayudhan, CC BY-SA 4.0)

這些 Linux 技術構成了在系統上構建和運行容器進程的基礎:

  • 命名空間
  • 控制組(cgroups)
  • Seccomp
  • SELinux

1. 命名空間

命名空間namespace 為容器提供了一個隔離層,給容器提供了一個看起來是獨占的 Linux 文件系統的視圖。這就限制了進程能訪問的內容,從而限制了它所能獲得的資源。

在創建容器時,Docker 或 Podman 和其他容器技術使用了 Linux 內核中的幾個命名空間:

  1. [nivedv@homelab ~]$ docker container run alpine ping 8.8.8.8 
  2. [nivedv@homelab ~]$ sudo lsns -p 29413 
  3.         NS TYPE   NPROCS   PID USER COMMAND 
  4. 4026531835 cgroup    299     1 root /usr/lib/systemd/systemd --switched... 
  5. 4026531837 user      278     1 root /usr/lib/systemd/systemd --switched... 
  6. 4026533105 mnt         1 29413 root ping 8.8.8.8 
  7. 4026533106 uts         1 29413 root ping 8.8.8.8 
  8. 4026533107 ipc         1 29413 root ping 8.8.8.8 
  9. 4026533108 pid         1 29413 root ping 8.8.8.8 
  10. 4026533110 net         1 29413 root ping 8.8.8.8 

用戶

用戶(user)命名空間將用戶和組隔離在一個容器內。這是通過分配給容器與宿主系統有不同的 UID 和 GID 范圍來實現的。用戶命名空間使軟件能夠以 root 用戶的身份在容器內運行。如果入侵者攻擊容器,然后逃逸到宿主機上,他們就只能以受限的非 root 身份運行了。

掛載

掛載(mnt)命名空間允許容器有自己的文件系統層次結構視圖。你可以在 Linux 系統中的 /proc/ /mounts 位置找到每個容器進程的掛載點。

UTS

Unix 分時系統Unix Timeharing System(UTS)命名空間允許容器擁有一個唯一主機名和域名。當你運行一個容器時,即使使用 - name 標簽,也會使用一個隨機的 ID 作為主機名。你可以使用 unshare 命令 來了解一下這個工作原理。

  1. nivedv@homelab ~]$ docker container run -it --name nived alpine sh 
  2. / # hostname  
  3. 9c9a5edabdd6 
  4. / #  
  5. nivedv@homelab ~]$ sudo unshare -u sh 
  6. sh-5.0# hostname isolated.hostname  
  7. sh-5.0# hostname 
  8. isolated.hostname 
  9. sh-5.0#  
  10. sh-5.0# exit 
  11. exit 
  12. [nivedv@homelab ~]$ hostname 
  13. homelab.redhat.com 

IPC

進程間通信Inter-Process Communication(IPC)命名空間允許不同的容器進程之間,通過訪問共享內存或使用共享消息隊列來進行通信。

  1. [root@demo /]# ipcmk -M 10M 
  2. Shared memory id: 0 
  3. [root@demo /]# ipcmk -M 20M 
  4. Shared memory id: 1 
  5. [root@demo /]#  
  6. [root@demo /]# ipcs 
  7. ------ Message Queues -------- 
  8. key        msqid      owner      perms      used-bytes   messages     
  9. ------ Shared Memory Segments -------- 
  10. key        shmid      owner      perms      bytes      nattch     status       
  11. 0xd1df416a 0          root       644        10485760   0                        
  12. 0xbd487a9d 1          root       644        20971520   0                        
  13. ------ Semaphore Arrays -------- 
  14. key        semid      owner      perms      nsems 

PID

進程 IDProcess ID(PID)命名空間確保運行在容器內的進程與外部隔離。當你在容器內運行 ps 命令時,由于這個命名空間隔離的存在,你只能看到在容器內運行的進程,而不是在宿主機上。

網絡

網絡(net)命名空間允許容器有自己網絡接口、IP 地址、路由表、端口號等視圖。容器如何能夠與外部通信?你創建的所有容器都會被附加到一個特殊的虛擬網絡接口上進行通信。

  1. [nivedv@homelab ~]$ docker container run --rm -it alpine sh 
  2. / # ping 8.8.8.8 
  3. PING 8.8.8.8 (8.8.8.8): 56 data bytes 
  4. 64 bytes from 8.8.8.8: seq=0 ttl=119 time=21.643 ms 
  5. 64 bytes from 8.8.8.8: seq=1 ttl=119 time=20.940 ms 
  6. ^C 
  7. [root@homelab ~]# ip link show veth84ea6fc 
  8. veth84ea6fc@if22: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue  
  9. master docker0 state UP mode DEFAULT group default 

2. 控制組

控制組(cgroup)是組成一個容器的基本模塊。控制組會分配和限制容器所使用的資源,如 CPU、內存、網絡 I/O 等。容器引擎會自動創建每種類型的控制組文件系統,并在容器運行時為每個容器設置配額。

  1. [root@homelab ~]# lscgroup | grep docker 
  2. cpuset:/docker 
  3. net_cls,net_prio:/docker 
  4. cpu,cpuacct:/docker 
  5. hugetlb:/docker 
  6. devices:/docker 
  7. freezer:/docker 
  8. memory:/docker 
  9. perf_event:/docker 
  10. blkio:/docker 
  11. pids:/docker 

容器運行時為每個容器設置了控制組值,所有信息都存儲在 /sys/fs/cgroup/*/docker。下面的命令將確保容器可以使用 50000 微秒的 CPU 時間片,并將內存的軟、硬限制分別設置為 500M 和 1G。

  1. [root@homelab ~]# docker container run -d --name test-cgroups --cpus 0.5 --memory 1G --memory-reservation 500M httpd 
  2. [root@homelab ~]# lscgroup cpu,cpuacct:/docker memory:/docker 
  3. cpu,cpuacct:/docker/ 
  4. cpu,cpuacct:/docker/c3503ac704dafea3522d3bb82c77faff840018e857a2a7f669065f05c8b2cc84 
  5. memory:/docker/ 
  6. memory:/docker/c3503ac704dafea3522d3bb82c77faff840018e857a2a7f669065f05c8b2cc84 
  7. [root@homelab c....c84]# cat cpu.cfs_period_us  
  8. 100000 
  9. [root@homelab c....c84]# cat cpu.cfs_quota_us  
  10. 50000 
  11. [root@homelab c....c84]# cat memory.soft_limit_in_bytes  
  12. 524288000 
  13. [root@homelab c....c84]# cat memory.limit_in_bytes  
  14. 1073741824 

3. SECCOMP

Seccomp 意思是“安全計算secure computing”。它是一項 Linux 功能,用于限制應用程序進行的系統調用的集合。例如,Docker 的默認 seccomp 配置文件禁用了大約 44 個系統調用(總計超過 300 個)。

這里的思路是讓容器只訪問所必須的資源。例如,如果你不需要容器改變主機上的時鐘時間,你可能不會使用 clock_adjtime 和 clock_settime 系統調用,屏蔽它們是合理的。同樣地,你不希望容器改變內核模塊,所以沒有必要讓它們使用 create_module、 delete_module 系統調用。

4. SELinux

SELinux 是“安全增強的 Linuxsecurity-enhanced Linux”的縮寫。如果你在你的宿主機上運行的是 Red Hat 發行版,那么 SELinux 是默認啟用的。SELinux 可以讓你限制一個應用程序只能訪問它自己的文件,并阻止任何其他進程訪問。因此,如果一個應用程序被破壞了,它將限制該應用程序可以影響或控制的文件數量。通過為文件和進程設置上下文環境以及定義策略來實現,這些策略將限制一個進程可以訪問和更改的內容。

容器的 SELinux 策略是由 container-selinux 包定義的。默認情況下,容器以 container_t 標簽運行,允許在 /usr 目錄下讀取(r)和執行(x),并從 /etc 目錄下讀取大部分內容。標簽container_var_lib_t 是與容器有關的文件的通用標簽。

總結

容器是當今 IT 基礎設施的一個重要組成部分,也是一項相當有趣的技術。即使你的工作不直接涉及容器化,了解一些基本的容器概念和方法,也能讓你體會到它們如何幫助你的組織。容器是建立在開源的 Linux 技術之上的,這使它們變得更加美好。

 

責任編輯:趙寧寧 來源: Linux中國
相關推薦

2016-03-17 17:35:15

云容器虛擬化管理Docker

2020-02-29 09:09:34

物聯網定位技術IOT

2020-04-06 20:11:26

區塊鏈分布式核心技術

2021-11-03 15:15:21

Go重構技術

2020-06-29 14:52:31

隱私增強技術PET加密

2011-03-21 09:01:49

CSS框架

2015-07-17 09:50:16

Carthage優劣比較

2017-03-17 19:48:01

人臉識別

2020-07-16 07:00:49

容器管理考量

2015-04-02 15:50:47

數據倉庫數據挖掘

2015-12-04 13:46:31

技術人創業創業項目

2013-09-02 10:17:05

虛擬化技術

2012-07-11 10:41:38

虛擬化

2009-08-28 10:47:46

Java EE容器

2013-01-06 10:44:43

微軟Windows 8云計算

2016-03-30 11:51:55

2009-12-09 10:15:08

2023-02-08 11:01:37

網絡以太網

2019-01-23 16:13:02

大數據數據處理數據挖掘

2021-02-20 23:24:33

同態加密HE隱私保護
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 狠狠操天天操 | 精品国产乱码久久久久久蜜退臀 | 日本天堂视频 | 精品亚洲永久免费精品 | 成人福利网 | 国产资源视频 | 一级少妇女片 | 成人超碰在线 | a级免费黄色片 | 成人欧美一区二区三区黑人孕妇 | 久久国产精品视频 | 欧美精品免费观看二区 | 欧美日韩中文国产一区发布 | 噜噜噜色网 | 奇米超碰在线 | 国产精品精品视频一区二区三区 | 成人精品久久日伦片大全免费 | 婷婷激情综合 | 国产精品免费看 | 久久国产精品视频 | 国产欧美一区二区精品忘忧草 | 精品国产欧美一区二区 | 国产色在线 | 久久成人精品视频 | 日日操夜夜操天天操 | 久干网 | 欧美一级毛片在线播放 | 91久久久久久久久久久久久 | 日韩欧美专区 | 久久国产精品免费一区二区三区 | 国产精品高清一区二区三区 | 综合成人在线 | 亚洲av毛片 | 欧美在线日韩 | 成人在线一级片 | 国产欧美日韩精品一区二区三区 | 欧美一区二区三区在线看 | 一区二区三区福利视频 | 高清一区二区三区 | 国产 日韩 欧美 中文 在线播放 | 久久久久久久久久久高潮一区二区 |