揭开容器的神秘面纱:帮助初学者深入了解容器技术
生活随笔
收集整理的這篇文章主要介紹了
揭开容器的神秘面纱:帮助初学者深入了解容器技术
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
戳藍字“CSDN云計算”關注我們哦!
本文轉載自:Docker?
簡介
本文將帶你深入了解容器,它們的關鍵技術思想,以及它們的應用。 除了計算機科學的基本概念之外,你不需要該領域的其它任何先決知識。
要與此硬件進行交互,操作系統中被稱為內核的軟件將充當硬件與系統其余部分之間的橋梁。內核負責調度要運行的進程(程序),管理設備(在磁盤和內存上讀寫地址)等等。
操作系統的其余部分用于引導和管理用戶進程的運行用戶空間,并將不斷與內核進行交互。
內核是操作系統的一部分,并與硬件接口。 整個操作系統都位于“內核空間”中,而用戶程序則位于“用戶空間”中。 內核空間負責管理用戶空間。
虛擬機由某些特定的硬件和內核虛擬化組成,運行客戶操作系統。稱為管理程序的軟件創建虛擬化硬件,其可以包括虛擬磁盤,虛擬網絡接口,虛擬CPU等。虛擬機還包括可以與此虛擬硬件通信的賓客內核。
管理程序可以托管,這意味著它是一些在主機操作系統(MacOS)上運行的軟件,如示例中所示。它也可以是裸機,直接在機器硬件上運行(替換你的操作系統)。無論哪種方式,管理程序方法都被認為是重量級的,因為它需要虛擬化多個部分(如果不是全部硬件和內核)。
當同一臺機器上需要有多個隔離組時,為每個組運行一個VM太繁重且浪費資源,不是一個好方法。
開銷不按比例
VM需要硬件虛擬化才能實現機器級隔離,而容器則只需要在同一操作系統內進行隔離操作。 隨著隔離空間數量的增加,開銷差異變得非常明顯。 普通的筆記本電腦可以運行數十個容器,但很難運行一臺VM。
這些進程可以放入命名空間,實質上是共享相同資源限制的進程集合。計算機可以有多個命名空間,每個命名空間都具有內核強制執行的資源屬性。
我們可以管理每個命名空間的資源分配,以便限制一組進程可以使用的總CPU,RAM等的數量。例如,后臺日志聚合應用程序可能需要限制其資源,以免意外地壓倒它正在記錄的實際服務器。
雖然不是原始功能,但Linux中的cgroup最終被重新設計為包含命名空間隔離的功能。命名空間隔離本身并不新鮮,Linux已經有多種命名空間隔離。一個常見的例子是進程隔離,它將每個單獨的進程分開并防止諸如共享內存之類的事情。
cgroup隔離是一種更高級別的隔離,可確保cgroup命名空間中的進程獨立于其他命名空間中的進程。下面概述了一些重要的命名空間隔離功能,為我們對容器的隔離奠定了基礎。
PID(進程標識符)命名空間:這可確保一個命名空間內的進程不知道其他命名空間中的進程。
網絡命名空間:隔離網絡接口控制器,iptables,路由表和其他低級網絡工具。
掛載命名空間:已掛載文件系統,因此命名空間的文件系統范圍僅限于已掛載的目錄。
用戶名空間:將命名空間內的用戶限制為僅限該命名空間,并避免跨命名空間的用戶ID沖突。
簡單地說,每個命名空間看起來都是它自己的機器。
從某種意義上說,這允許獨立和隔離的用戶空間。?容器的概念直接來自LXC。 事實上,早期版本的Docker直接構建在LXC之上。
Docker
Docker是最廣泛使用的容器技術,也是大多數人在引用容器時的意思。 雖然還有其他開源容器技術(如CoreOS的rkt)和大型公司構建自己的容器引擎(如谷歌的lmctfy),但Docker已成為容器化的行業標準。 它仍然建立在Linux內核和最近的Windows提供的cgroups和命名空間之上。圖片來源:Docker
Docker容器由多層鏡像組成,二進制文件一起打包到一個包中。 基本鏡像包含容器的操作系統,該操作系統可以與主機的操作系統不同。
容器的操作系統是鏡像形式。 這不是主機上的完整操作系統,不同之處在于鏡像只是操作系統的文件系統和二進制文件,而完整的操作系統包括文件系統,二進制文件和內核。
在基礎鏡像的頂部是多個鏡像,每個鏡像構建容器的一部分。 例如,在基本鏡像的頂部可以是包含apt-get依賴性的鏡像。 最重要的可能是包含應用程序二進制文件的鏡像,依此類推。
很酷的部分是如果有兩個帶有鏡像層a,b,c和a,b,d的容器,那么你只需要在本地和存儲庫中存儲每個鏡像層a,b,c,d的一個副本。 這是Docker的聯合文件系統。
由散列標識的每個鏡像只是構成容器的許多可能鏡像層之一。但是,容器僅由其頂級鏡像標識,該鏡像具有對父鏡像的引用。此處顯示的兩個頂級鏡像(鏡像1和鏡像2)共享前三個圖層。鏡像2具有兩個附加的配置相關層,但與鏡像1共享相同的父鏡像。
引導容器時,將從repo下載鏡像及其父鏡像,創建cgroup和命名空間,并使用該鏡像創建虛擬環境。在容器內,鏡像中指定的文件和二進制文件似乎是整個計算機中的唯一文件。然后啟動容器的主進程,并將容器視為活動狀態。
Docker還有其他一些非常酷的功能,例如寫入時復制,卷(容器之間的共享文件系統),docker守護程序(管理機器上的容器),版本控制的存儲庫(如容器的Github)等等。要了解有關它們的更多信息并查看有關如何使用Docker的一些實際示例,這篇Medium上的文章[1]非常有用。
命令行客戶端(1)告訴計算機上的進程名為docker daemon(2)該做什么。 守護程序從注冊表/存儲庫中提取圖像(3)。 這些鏡像在本地計算機上緩存(4),并且可以由守護程序啟動以運行容器(5)。 圖片來源:Docker。
容器可作為一個獨立的單元,可以在任何支持它的地方運行。在每個實例中,容器本身都是完全相同的。如果主機操作系統是CentOS,Ubuntu,MacOS,甚至是像Windows這樣的非UNIX系統都無關緊要——從容器內部看操作系統將是容器指定的任何操作系統。因此,你可以確定你在筆記本電腦上構建的容器也將在公司的服務器上運行。
容器還充當標準化的工作或計算單元。一個常見的范例是每個容器運行單個Web服務器,數據庫的單個分片或單個Spark工作程序等。然后,為了擴展應用程序,你只需要擴展容器的數量。
在這個范例中,每個容器都有一個固定的資源配置(CPU,RAM,線程數等),并且擴展應用程序需要只擴展容器的數量而不是單個資源原語。當應用程序需要按比例放大或縮小時,這為工程師提供了更容易的抽象。
容器也是實現微服務架構的一個很好的工具,每個微服務只是一組協作容器。例如,可以使用單個主容器和多個從容器來實現Redis微服務。
這種(微)服務導向架構具有一些非常重要的屬性,使工程團隊可以輕松創建和部署應用程序(有關更多詳細信息,請參閱我之前的文章[2])。
但是仍然需要一個工具來:
真實地采取規范并將容器分配給機器(調度)
真實地通過Docker在機器上啟動指定的容器
處理升級/回滾/系統不斷變化的性質
應對容器崩潰等故障
創建集群資源,如服務發現,VM間網絡,集群入口/出口等。
在下一篇文章中,我將深入討論Kubernetes(主流的開源編排器)的實現,以及兩個同樣重要但鮮為人知的Mesos和Borg。
相關鏈接:
https://medium.freecodecamp.org/a-beginner-friendly-introduction-to-containers-vms-and-docker-79a9e3e119b
https://hackernoon.com/how-microservices-saved-the-internet-30cd4b9c6230?gi=d7bc571ea278
推薦閱讀
5G大規模商用來臨之前,你必須知道的幾個知識點
“離開360時,它只給了我一塊錢”
AI找Bug,一鍵快速預測
原子互換:一統公鏈江湖的神來之筆
春晚鬼畜 B 站日排行最高,趙本山:我的時代還沒有結束!
PDF翻譯神器,再也不擔心讀不懂英文Paper了
新聞聯播也可以拿來做數據分析?
高曉松侃5G!2019開年大講揭示運營商的秘密
1.微信群:
添加小編微信:color_ld,備注“進群+姓名+公司職位”即可,加入【云計算學習交流群】,和志同道合的朋友們共同打卡學習!
2.征稿:
投稿郵箱:liudan@csdn.net;微信號:color_ld。請備注投稿+姓名+公司職位。
喜歡就點擊“好看”吧!總結
以上是生活随笔為你收集整理的揭开容器的神秘面纱:帮助初学者深入了解容器技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 买保险怎么买合适 如果不知怎么买看这里就
- 下一篇: 车险理赔的误区:全险是全赔、所有车都得去