原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!
原文連結地址:『中級篇』docker架構和底層技術(12)
前11節主要是介紹docker的安裝,如果跟這我來學我相信大家已經有了一個docker的安裝環境,本次是看下docker的架構和底層的技術,其實隨著各位老鐵的學習我相信對於docker架構和底層技術會越來越深入的瞭解,特別是底層技術,後面會邊用邊給大家介紹底層的linux的技術。
Docker平臺
- Docker提供了一個平臺,打包,執行的app的平臺
- 把application和底層的infrastructure(基礎建設)隔離開來
Docker Engine
- 最核心的是 Docker Daemon我們稱之為Docker守護程式,也就是Server端,Server端可以部署在遠端,也可以部署在本地,因為Server端與客戶端(Docker Client)是通過Rest API進行通訊。
- REST 做過web開發都瞭解,它的效率槓槓的。
- docker CLI 實現容器和映象的管理,為使用者提供統一的操作介面,這個 客戶端提供一個只讀的映象,然後通過映象可以建立一個或者多個容器。(container),這些容器可以只是一個RFS(Root File System),也可以是一個包含了使用者應用的RFS。容器在docker Client中只是一個程式,兩個程式是互不可見的。使用者不能與server直接互動,但可以通過與容器這個橋樑來互動,由於是作業系統級別的虛擬技術,中間的損耗幾乎可以不計。
- 其實docker就是個C/S的架構,有client和server的。
- Docker守護程式(dockerd)
- REST API server
- CLI介面
Docker的組織架構
Docker的底層技術支援
容器=cgroup+namespace+rootfs+容器引擎(使用者態工具LXC)
- Cgroup(資源控制)
- Namespace(訪問隔離)
- rootfs(檔案系統隔離)
- 容器引擎(生命週期控制)
PS:這裡面很多底層的技術,說實話,還是感覺不需要那麼急著瞭解這些底層linux的技術,隨著我們們慢慢對docker深入認識,裡面的技術細節也會展開深入的的說。
Docker瞎扯淡
有初學者還在問,docker都出了這麼多課程了,能否通俗易懂的說下,我就在baidu找了一些內容分享出來,文章也是轉載的,寫的網際網路。
首先你有一個 100 平方的房子(伺服器),已知你(PHP 應用)需要吃喝拉撒睡覺,所以整個房子劃分了臥室、廚房、衛生間等,然後供你一個人享用,但其實挺浪費的,你一個人並不需要 100 平方這麼大,可能需要 20 平方(伺服器佔用 20%)就好了。
後來又來了個別人(Java 應用)也被安排到了這個房子裡生活,他也需要吃喝拉撒睡,所以你們擠在了一個床上,用一個衛生間(比如 http 伺服器)。如果你改了你的習慣(例如 http 服務配置項)同樣會影響別人的生活。
後來又來了人(Node 應用),這時候房東發現房子不夠大了,所以搬家(遷移、升級伺服器)到另一個 150 平的房子,但是搬家成本好高。由於戶型不同(系統版本、環境等)需要裝修好久,此外還要把住戶(應用程式碼)搬過來,還需要把住戶自定義的習慣都帶過來簡直麻煩死了。
這時候,房東瞭解到了一個叫 Docker 的產品。
Docker 是一個可自由伸縮的集裝箱房屋:
這個集裝箱房屋雖小但是五臟俱全,而且可以滿足一切使用者需求,並支援高度自定義,比如 Node 這位住戶不需要廚房,那麼他的集裝箱房子就小一點,當然房租(伺服器消耗)也便宜一些。
房東用了 Docker 這個產品之後,發現租房這個事情變簡單了:
- 房東不需要劃分衛生間、廚房、臥室並進行裝修了,一切由使用者自己定製集裝箱。房東只需要把集裝箱放到房間裡即可。
- 住戶也不需要打架了,以前一起付房租(消耗伺服器資源),現在按照自己集裝箱大小付費。而且你可以在你集裝箱裡面隨便折騰,愛怎麼改配置就怎麼改,也不會影響到別人。
- 集裝箱對於空間的使用,更加直觀,房東可以更輕鬆瞭解到當前房間的空間使用率等,以便升級房間。
- 房東搬新家的時候也開心了,只要把一面牆炸開,把裡面一個個集裝箱直接移過去新房子就好了,啥也不需要配置,都在集裝箱裡面呢。
扯完了:
- 你就是房東,做運維的。房間是伺服器,空間大小表示伺服器硬體配置。
- 住戶就是你的業務、應用,提供服務的。
- 伸縮集裝箱房屋,就是 Docker 容器,裡面是完全分離、獨立、自由的環境和業務程式碼。你可以在裡面裝一個 Ubuntu(消耗大)或者簡版的、可以跑業務程式碼的環境(消耗低)。
- Docker 抹平系統差異,相當於把你多個房間都砸成長方形方便存放集裝箱。這樣你可以快速把獨立容器丟到各個配置了 Docker 的不同系統、硬體配置的伺服器上面。
- 因此也可以得到很高的伸縮性,可以瞬間部署很多伺服器很多容器,然後負載均衡來提供大促服務等。
- 當然 Docker 概念、功能不只是我上面說的這些,這些只是我認為比較核心關鍵的。
開始新的征程
原始碼的路徑:github.com/limingios/d…
- 目錄結構:
vagrant plugin install vagrant-vbguest
vagrant reload --provision
vagrant up
複製程式碼
建立完畢
#進入虛擬機器
vagrant ssh
sudo docker version
複製程式碼
個人網站:IT人故事會 idig8.com
PS:開始實踐了,歡迎大家持續關注。