摘要:容器作為一類操作系統層面的虛擬化技術,其目標是在單一主機交付多套隔離性環境,容器共享同一套主機操作系統內核。與其它容器平臺不同,引入了一整套與容器管理相關的生態系統。每個容器都是相互隔離的保證安全的平臺。
導讀:本文章對Docker技術進行了介紹,闡述了Docker的技術發展歷程、容器與虛擬機的差異、Docker原理、特點、Docker三組件和Docker帶來的影響,為我們進一步理解Docker打下基礎。
一、前言
2014年春天,我進入一家電商公司做反應式編程研究和落地工作,因為做的是平臺工作,希望通過平臺去滿足不通的業務場景,業務部門只需要進行簡單的適配和封裝就能進行產品創新。此時就需要一種工具去快速搭建基礎環境,環境之間不能相互干擾,業務部門還能方面使用。就這樣和Docker進行了第一次偶遇,基于它我們將基礎環境、公共組件等封裝到鏡像中,業務部門只需要將代碼放入Docker中就可以輕松使用,原來需要1-2周的環境準備,現在只需要幾分鐘,太神奇了!
二、什么是docker?
Docker 是PaaS 提供商 dotCloud, 基于容器技術的輕量級虛擬化解決方案,誕生于2013年初,基于Google公司推出的Go 語言實現,加入了 Linux 基金會,遵從Apache 2.0 協議,原始碼在GitHub上進行維護;2017年Docker進行商業化運作,原來在github上開源項目正式改名為moby,docker變成了一家商業化公司。說到Docker,我們就不得不說容器技術了,Docker是一種容器化技術的落地。容器作為一類操作系統層面的虛擬化技術,其目標是在單一Linux主機交付多套隔離性環境,容器共享同一套主機操作系統內核。
三、Docker技術發展歷程
2011年 — Warden:由CloudFoundry公司于2011年所建立,其利用LXC 作為初始階段,隨后又將其替換為自家實現方案。與LXC不同,Warden并不會與Linux緊密耦合。相反,其能夠運行在任意能夠提供多種隔離環境方式的操作系統之上
2013年 — LMCTFY:“Let Me Contain That For You(幫你實現容器化)”。它其實屬于谷歌容器技術堆棧的開源版本,負責提供Linux應用程序容器,Kubernetes目前所使用的cAdvisor工具最初就來源于lmctfy項目
2013年 — Docker:起步階段使用LXC,而后利用自己的libcontainer庫將其替換下來。與其它容器平臺不同,Docker引入了一整套與容器管理相關的生態系統。其中包括一套高效的分層式容器鏡像模型、一套全局及本地容器注冊表、一個精簡化REST API以及一套命令行界面等等。在后期發展階段,Docker公司還構建起一套名為Docker Swarm的容器集群管理解決方案
2014年 — Rocket:解決部分Docker當中存在的缺陷,開發目標是在安全性與生產要求滿足能力上超越Docker,其基于App Container規范并使其成為一項更為開放的標準
2015年—Docker進行大家視線,開源社區得到前所未有的發展
2016年 — Windows容器發布,docker新技術架構升級
2017年—Docker:正式進行商業化運作,docker與moby分家
2018年-Docker在企業中快速落地
四、容器與虛擬機差異
容器為應用程序提供了隔離的運行空間:每個容器內都包含一個獨享的完整用戶環境空間,并且一個容器內的變動不會影響其他容器的運行環境。容器技術使用了namespaces來進行空間隔離,通過文件系統的掛載點來決定容器可以訪問哪些文件,通過cgroups來確定每個容器可以利用多少資源。此外容器之間共享同一個系統內核,這樣當同一個庫被多個容器使用時,內存的使用效率會得到提升。
對于系統虛擬化技術來說,虛擬層為用戶提供了一個完整的虛擬機:包括內核在內的一個完整的系統鏡像。CPU虛擬化技術可以為每個用戶提供一個獨享且和其他用戶隔離的系統環境,虛擬層可以為每個用戶分配虛擬化后的CPU、內存和IO設備資源
基于docker容器虛擬化與傳統虛擬化對比
五、Docker原理
Docker是容器引擎,把linux的cgroup、namespace等容器底層技術進行封裝抽象,為用戶提供了創建和管理容器的便捷界面(命令行和API)
六、Docker特點
一次構建,可以運行在任何地方;很好的釋全了跨平臺和強一致性
七、Docker三組件
鏡像:鏡像可以用來創建Docker容器的。一個鏡像可以包含一個完整的操作系統環境和用戶需要的其它應用程序,docker的鏡像是只可讀的,一個鏡像可以創建多個容器。
容器:容器是鏡像創建的實例。它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。
倉庫:倉庫是集中存放鏡像文件的場所。每個倉庫中又包含了多個鏡像,每個鏡像有不同的標簽(tag)。
八、Docker帶來的影響
優化資源使用:
以前我們一臺32C128G物理機最多虛擬20臺左右的4C4G虛機,每臺虛擬機啟動一個程序,一共部署20多個程序,機器平均利用率不超過20%,導致大量資源浪費;現在通過docker容器方式啟動應用,由于容器共享操作系統網絡,內存、cpu,我們一臺物理機機器平均可以啟動60個左右的容器,相當于跑60個左右的應用,經生產驗證,應用的性能并沒有實際損耗。容器停掉后,資源自動釋放;避免資源定期回收
運維效率提升
以前我們對每個應用部署流程:申請資源——》創建虛機——》初始化運行環境——》部署應用程序包——》啟動應用,整個流程需要5-7天;如果需要擴展實例時,需要同樣的操作流程。容器化帶來的變革:編寫Dockerfile——》構建鏡像——》拉去鏡像并運行;Dockerfile中包含運行環境,只需要編寫一次;容器運行在資源池中(提前預制好的),整個流程需要幾分鐘完成
環境一致性 傳統方式中每一步可能會出現問題(人工或程序);容器化后構建的鏡像始終如一,任何地方運行都不受影響 交付流程的改變
開發——》編譯成war/jar——》提交運維部署申請——》運維定期處理——》通知業務上線成功——》業務驗證——》發現問題——》通知運維回退;整個過程耗時較長,涉及開發、運維強耦合,任何一步失誤導致服務不可用。?容器化變革:開發——》源代碼/war/jar——》一鍵部署——》業務驗證——》發現問題——》一鍵回滾;整個過程幾分鐘內完成,開發者、項目經理、產品經理等都可以獨立完成
加速微服務落地
微服務化后,隨著業務的增加、服務的拆分,服務的個數回暴增,以前可能幾十個服務,現在變成了幾百個服務甚至更多;服務的迭代上線、監控對傳統的運維挑戰更大,需要投入更多的人力物力去支持;容器化后,每個微服務就是一個容器,容器擴縮可以在秒級內實現,容器的監控有專門的監控工具,業務運行環境在容器中已經初始化好了,目前的運維團隊可以更方便的去管理更多的服務。
以應用為中心
傳統的應用部署需要先申請機器,考慮物理資源;容器化后,所有容器跑在一個資源池中,只需一次行初始化資源池,后面可以方便使用;業務開發者更聚焦在應用開發層面
加速混合云或多云數據中心建設
應用程序最終通過Dockerfile生成鏡像,鏡像存儲在鏡像倉庫,由于docker的特性(一次構建、隨處運行),在云端或其它數據中心只要安裝簡單的環境就可以拉去鏡像鏡像運行。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27585.html
摘要:導讀本文系統性介紹安裝組件命令語法和應用,通過上述介紹使我們已經對基本操作有一定了解。二安裝本文以及以上版本為例來說明安裝底層對應的是鏡像,不可寫的文件系統,它的存儲方式比較多。根據規范產生和運行容器的工具。 導讀:本文系統性介紹Docker安裝、Docker組件、Docker命令、Dockerfile語法和Docker應用,通過上述介紹使我們已經對docker基本操作有一定了解。一、...
摘要:應用化極簡教程陳光劍基于的企業級應用開發最佳實踐前面的章節中,我們都是在環境中開發運行測試應用程序。關鍵字是分布式應用微服務容器虛擬化。通常,在企業項目實踐中,會實現一套應用部署發布的自動化運維平臺工具。 Spring Boot 應用 Docker 化 《Spring Boot 2.0極簡教程》(陳光劍)—— 基于 Gradle + Kotlin的企業級應用開發最佳實踐 前面的章節中,...
摘要:應用化極簡教程陳光劍基于的企業級應用開發最佳實踐前面的章節中,我們都是在環境中開發運行測試應用程序。關鍵字是分布式應用微服務容器虛擬化。通常,在企業項目實踐中,會實現一套應用部署發布的自動化運維平臺工具。 Spring Boot 應用 Docker 化 《Spring Boot 2.0極簡教程》(陳光劍)—— 基于 Gradle + Kotlin的企業級應用開發最佳實踐 前面的章節中,...
摘要:本文是數人云工程師方志浩在微信群分享的實錄,與大家聊一聊應用容器在配置管理中遇到的問題以及解決方法。數人云分測試演示生產三種環境進行持續集成發布,同時數人云組件通過進行應用容器的封裝下發和管理。 本文是數人云工程師方志浩在DockOne微信群分享的實錄,與大家聊一聊應用容器在配置管理中遇到的問題以及解決方法。 隨著Docker技術的火熱發展, Docker在代碼構建發布中扮演著越來越重...
閱讀 2963·2021-10-15 09:41
閱讀 1619·2021-09-22 15:56
閱讀 2104·2021-08-10 09:43
閱讀 3272·2019-08-30 13:56
閱讀 1777·2019-08-30 12:47
閱讀 648·2019-08-30 11:17
閱讀 2769·2019-08-30 11:09
閱讀 2192·2019-08-29 16:19