兩個核心技術:1、“Linux namespaces”,是對全域系統資源的一種封裝隔離,使得處於不同namespace的進程擁有獨立的全域系統資源;2、“Control Groups”,能夠隔離宿主機器上的實體資源,實現對資源的配額和度量。
本教學操作環境:linux5.9.8系統、docker-1.13.1版、Dell G3電腦。
Docker是基於Go語言實作的雲端開源專案。
Docker透過虛擬化技術,解決了開發環境、測試環境、生產環境的一致的問題,讓App及其運行環境達到「Build,Ship and Run Any APP,Anywhere」的目的。方便做持續集成,並有助於整體發布和擴縮容的容器虛擬化技術。
docker的兩個核心技術:Namespaces , Controller Groups。
一、隔離性:Linux Namespace (ns)
Linux namespaces 是對全域系統資源的一種封裝隔離,使得處於不同namespace 的進程擁有獨立的全域系統資源,改變一個namespace 中的系統資源只會影響目前namespace 裡的進程,對其他namespace 中的進程沒有影響。這些資源包括:進程樹、網路介面、掛載點以及進程間通訊等資源。的在同一個 namespace 下的進程可以感知彼此的變化,而對外界的進程一無所知。這樣就可以讓容器中的進程產生錯覺,認為自己置身於一個獨立的系統中,從而達到隔離的目的。
每個使用者實例之間相互隔離, 互不影響。一般的硬體虛擬化方法給的方法是 VM,而 LXC 給的方法是 container,更細一點講就是 kernel namespace。其中pid、net、ipc、mnt、uts##、user等namespace將container 的進程、網路、訊息、檔案系統、UTS("UNIX Time-sharing System") 和使用者空間隔離。
1)、pid namespace
不同使用者的流程就是透過 pid namespace 隔離的,且不同 namespace 中可以有相同 pid。所有的 LXC 進程在 docker 中的父進程為 docker 進程,每個 lxc 進程有不同的 namespace。同時由於允許嵌套,因此可以很方便的實作 Docker in Docker。2)、net namespace
有了 pid namespace, 每個 namespace 中的 pid 能夠相互隔離,但網路連接埠還是共用 host 的連接埠。網路隔離是透過 net namespace 實現的, 每個 net namespace 有獨立的 network devices, IP addresses, IP routing tables, /proc/net 目錄。這樣每個 container 的網路就能隔離開來。 docker 預設採用 veth 的方式將 container 中的虛擬網卡同 host 上的一個 docker bridge: docker0 連接在一起。3)、ipc namespace
container 中進程互動或採用linux 常見的進程間互動方法(interprocess communication - IPC), 包含常見的訊號量、訊息隊列和共享記憶體。然而與 VM 不同的是,container 的進程間交互實際上還是 host 上具有相同 pid namespace 中的進程間交互,因此需要在 IPC 資源申請時加入 namespace 資訊 - 每個 IPC 資源有一個唯一的 32 位元 ID。4)、mnt namespace
類似 chroot,將一個行程放到特定的目錄執行。 mnt namespace 允許不同 namespace 的程序看到的檔案結構不同,這樣每個 namespace 中的程序所看到的檔案目錄就被隔離開了。同 chroot 不同,每個 namespace 中的 container 在 /proc/mounts 的資訊只包含所在 namespace 的 mount point。5)、uts namespace
UTS("UNIX Time-sharing System") namespace 讓每個container 擁有獨立的hostname 和domain name, 使其在網絡上可以被視為一個獨立的節點而非Host 上的一個流程。6)、user namespace
每個container 可以有不同的user 和group id, 也就是說可以在container 內部用container 內部的使用者執行程式而非Host 上的使用者。二、資源限制:Control Groups (cgroups)
#命名空間為新建立的進程隔離了檔案系統、網路並與宿主機器之間的進程相互隔離,但是命名空間並不能為我們提供實體資源上的隔離。但是如果在同一台機器上運行了多個對彼此以及宿主機器一無所知的容器,這些容器卻共同佔用了宿主機器的實體資源。而 Control Groups(簡稱 CGroups)就是能夠隔離宿主機器上的實體資源,例如 CPU、記憶體、磁碟 I/O 和網路頻寬。每一個 CGroup 都是一組被相同的標準和參數限制的過程,不同的 CGroup 之間是有層級關係的,也就是說它們之間可以從父類別繼承一些用來限制資源使用的標準和參數。
cgroups 實作了對資源的配額和度量。 cgroups 的使用非常簡單,提供類似文件的接口,在/cgroup 目錄下新建一個文件夾即可新建一個group,在此文件夾中新建task 文件,並將pid 寫入該文件,即可實現對該進程的資源控制。 groups 可以限制blkio、cpu、cpuacct、cpuset、devices、freezer、memory、net_cls、ns 九大子系統的資源,以下是每個子系統的詳細說明:
blkio 這個子系統設定限制每個區塊設備的輸入輸出控制。例如: 磁碟,光碟以及 usb 等等。
cpu 這個子系統使用排程器為 cgroup 任務提供 cpu 的存取。
cpuacct 產生 cgroup 任務的 cpu 資源報表。
cpuset 如果是多核心的 cpu,這個子系統會為 cgroup 任務分配單獨的 cpu 和記憶體。
devices 允許或拒絕 cgroup 任務對裝置的存取。
freezer 暫停和恢復 cgroup 任務。
memory 設定每個 cgroup 的記憶體限制以及產生記憶體資源報告。
net_cls 標記每個網路包以供 cgroup 方便使用。
ns 名稱空間子系統。
以上九個子系統之間也存在著一定的關係. 詳情請參閱官方文件。
推薦學習:《docker影片教學》
以上是docker核心技術是哪兩個的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Docker和Kubernetes的主要區別在於:Docker用於容器化,Kubernetes用於容器編排。 1.Docker提供一致的環境來開發、測試和部署應用,通過容器實現隔離和資源限制。 2.Kubernetes管理容器化應用,提供自動化部署、擴展和管理功能,支持負載均衡和自動伸縮。兩者結合使用能提升應用的部署和管理效率。

在Linux上安裝和配置Docker需要確保系統為64位且內核版本3.10及以上,使用命令“sudoapt-getupdate&&sudoapt-getinstalldocker-cedocker-ce-clicontainerd.io”安裝,並用“sudodockerrunhello-world”驗證。 Docker利用Linux內核的命名空間和控制組實現容器隔離和資源限制,鏡像是只讀模板,容器可進行修改。使用示例包括運行Nginx服務器和自定義Dockerfile創建鏡像。常見

使用Docker的原因是它提供高效、便攜且一致的環境來打包、分發和運行應用程序。 1)Docker是一種容器化平台,允許開發者將應用程序及其依賴項打包到輕量級、可移植的容器中。 2)它基於Linux容器技術和聯合文件系統,確保快速啟動和高效運行。 3)Docker支持多階段構建,優化鏡像大小和部署速度。 4)使用Docker可以簡化開發和部署流程,提高效率並確保跨環境的一致性。

Docker在實際項目中的應用場景包括簡化部署、管理多容器應用和性能優化。 1.Docker簡化了應用部署,如使用Dockerfile部署Node.js應用。 2.DockerCompose管理多容器應用,如微服務架構中的Web和數據庫服務。 3.性能優化使用多階段構建減小鏡像大小,並通過健康檢查監控容器狀態。

在小型項目或開發環境中選擇Docker,在大型項目或生產環境中選擇Kubernetes。 1.Docker適合快速迭代和測試,2.Kubernetes提供強大的容器編排能力,適合管理和擴展大型應用。

Docker在Linux上重要,因為Linux是其原生平台,提供了豐富的工具和社區支持。 1.安裝Docker:使用sudoapt-getupdate和sudoapt-getinstalldocker-cedocker-ce-clicontainerd.io。 2.創建和管理容器:使用dockerrun命令,如dockerrun-d--namemynginx-p80:80nginx。 3.編寫Dockerfile:優化鏡像大小,使用多階段構建。 4.優化和調試:使用dockerlogs和dockerex

Docker是容器化工具,Kubernetes是容器編排工具。 1.Docker打包應用及其依賴成容器,可在任何支持Docker的環境中運行。 2.Kubernetes管理這些容器,實現自動化部署、擴展和管理,使應用高效運行。

Docker的目的是簡化應用部署,通過容器化技術確保應用在不同環境中一致運行。 1)Docker通過將應用和依賴打包到容器中,解決了環境差異問題。 2)使用Dockerfile創建鏡像,確保應用在任何地方一致運行。 3)Docker的工作原理基於鏡像和容器,利用Linux內核的命名空間和控制組實現隔離和資源管理。 4)基本用法包括從DockerHub拉取並運行鏡像,高級用法涉及使用DockerCompose管理多容器應用。 5)常見錯誤如鏡像構建失敗和容器無法啟動,可通過日誌和網絡配置調試。 6)性能優化建


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Dreamweaver Mac版
視覺化網頁開發工具

WebStorm Mac版
好用的JavaScript開發工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),