1. 怎麼用通俗易懂的話來解釋Docker(容器)技術
官網的介紹是這樣的:
Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications....
其實看完這句話還是不明白究竟是啥的,下面就慢慢解釋。不過長話短說的話,把他想像成一個用了一種新穎方式實現的超輕量虛擬機,在大概效果上也是正確的。當然在實現的原理和應用上還是和VM有巨大差別的,並且專業的叫法是應用容器(Application Container)。
為啥要用容器?
那麼應用容器長什麼樣子呢,一個做好的應用容器長得就好像一個裝好了一組特定應用的虛擬機一樣。比如我現在想用MySQL那我就找個裝好MySQL的容器,運行起來,那麼我就可以使用 MySQL了。
那麼我直接裝個 MySQL不就好了,何必還需要這個容器這么詭異的概念?話是這么說,可是你要真裝MySQL的話可能要再裝一堆依賴庫,根據你的操作系統平台和版本進行設置,有時候還要從源代碼編譯報出一堆莫名其妙的錯誤,可不是這么好裝。而且萬一你機器掛了,所有的東西都要重新來,可能還要把配置在重新弄一遍。但是有了容器,你就相當於有了一個可以運行起來的虛擬機,只要你能運行容器,MySQL的配置就全省了。而且一旦你想換台機器,直接把這個容器端起來,再放到另一個機器就好了。硬體,操作系統,運行環境什麼的都不需要考慮了。
在公司中的一個很大的用途就是可以保證線下的開發環境、測試環境和線上的生產環境一致。當年在 Bai 經常碰到這樣的事情,開發把東西做好了給測試去測,一般會給一坨代碼和一個介紹上線步驟的上線單。結果代碼在測試機跑不起來,開發就跑來跑去看問題,一會兒啊這個配置文件忘了提交了,一會兒啊這個上線命令寫錯了。找到了一個 bug 提上去,開發一看,啊我怎麼又忘了把這個命令寫在上線單上了。類似的事情在上線的時候還會發生,變成啊你這個軟體的版本和我機器上的不一樣……在 Amazon 的時候,由於一個開發直接擔任上述三個職位,而且有一套自動化部署的機制所以問題會少一點,但是上線的時候大家還是膽戰心驚。
若果利用容器的話,那麼開發直接在容器里開發,提測的時候把整個容器給測試,測好了把改動改在容器里再上線就好了。通過容器,整個開發、測試和生產環境可以保持高度的一致。
此外容器也和VM一樣具有著一定的隔離性,各個容器之間的數據和內存空間相互隔離,可以保證一定的安全性。
2. 什麼是 docker 容器技術
Docker是什麼?
簡單得來說,Docker是一個由GO語言寫的程序運行的「容器」(Linux containers, LXCs); 目前雲服務的基石是操作系統級別的隔離,在同一台物理伺服器上虛擬出多個主機。Docker則實現了一種應用程序級別的隔離; 它改變我們基本的開發、操作單元,由直接操作虛擬主機(VM),轉換到操作程序運行的「容器」上來。
Docker是為開發者和系統管理員設計的,用來發布和運行分布式應用程序的一個開放性平台。由兩部分組成:
Docker Engine: 一個攜帶型、輕量級的運行環境和包管理器。(注* 單OS vs 單線程,是不是跟NodeJS特別像?)
Docker Hub: 為創建自動化工作流和分享應用創建的雲服務組成。(注* 雲端鏡像/包管理 vs npm包管理,是不是跟npm特別像?)
從2013年3月20日,第一個版本的Docker正式發布到 2014年6月Docker 1.0 正式發布,經歷了15個月。 雖然發展歷程很短,但Docker正在有越來越流行的趨勢。
其實Container技術並非Docker的創新,HeroKu, NodeJitsu 等雲服務商都採用了類似這種輕量級的虛擬化技術,但Docker是第一個將這這種Container技術大規模開源並被社區廣泛接受的。
好的部分
Docker相對於VM虛擬機的優勢十分明顯,那就是輕量和高性能和便捷性, 以下部分摘自:KVM and Docker LXC Benchmarking with OpenStack
快
運行時的性能可以獲取極大提升(經典的案例是提升97%)
管理操作(啟動,停止,開始,重啟等等) 都是以秒或毫秒為單位的。
敏捷
像虛擬機一樣敏捷,而且會更便宜,在bare metal(裸機)上布署像點個按鈕一樣簡單。
靈活
將應用和系統「容器化」,不添加額外的操作系統,
輕量
你會擁有足夠的「操作系統」,僅需添加或減小鏡像即可。在一台伺服器上可以布署100~1000個Containers容器。
便宜
開源的,免費的,低成本的。由現代Linux內核支持並驅動。注* 輕量的Container必定可以在一個物理機上開啟更多「容器」,註定比VMs要便宜。
生態系統
正在越來越受歡迎,只需要看一看Google的趨勢就知道了,docker or LXC.
還有不計其數的社區和第三方應用。
雲支持
不計其數的雲服務提供創建和管理Linux容器框架。
3. 容器雲技術有什麼特點
1.容器雲技術在計算形態上面是一種輕量級的虛擬化技術,是進程級的虛擬化形態封裝,容器的啟動和部署的迅速,可以在應用層面按照資源進行快速的部署和調度的,這樣生命周期的變化速度也就很快了。
2.它是可以移植的一種技術,能夠降低成本。當前容器雲技術的現代形式,主要是體現在應用程序容器化和系統容器化方面。這兩種形式的容器都是可以讓IT團隊從底層的架構中抽象出程度代碼的,這樣就可以實現跨各種部署環境的可移植性了。
3.容器一般是位於物理伺服器以及主機操作系統之上的。它可以通過單個的操作系統安裝去運行多個工作環境,因此容器是非常輕的,它們只有幾兆的位元組,只需要幾秒鍾就可以啟動了。另外,內存,存儲和CPU效率的提高,是容器雲技術的關鍵優勢。它可以在同一基礎架構上面支持更多的容器,這樣就可以減少管理方面的開支了。
國內做的比較好的我推薦時速雲,他們服務過500+的中大型客戶,不僅涵蓋容器雲 PaaS、DevOps、微服務、ServiceMesh、API 網關等核心雲原生產品,還可以為企業提供數據開發、數據治理、數據資產、數據服務等數據能力。感興趣的可以去了解一下!
4. 如何理解芒福德的 技術即是容器
芒福德在 20世紀 60年代提出 「技術即容器」的觀點, 在他看來, 與工具和武器不同, 「容器技術」是經常被忽視的一種技術形式。 「對於婦女而言, 柔軟的內在器官是她生命的中心, 不管是幼兒還是成人, 她的手和腳的運動能力都要比屈伸和擁抱的能力差。在母系氏族社 會, 新石器時代已經是一個擁有『容器』工具的顯赫時代: 除了溝渠、村莊這些巨大的 『容器』 以外, 這個時代還有石器、陶器、花瓶、廣口 瓶、缸、蓄水池、箱櫃、谷倉、殼倉、房子等等 這樣一些 『容器』。但是這一時代所具有的獨特性和顯著性卻被現代那些過分強調機械意義上的科技進步的學者們忽視了。」在他那裡, 工具、 武器和機器都是男性文化的符號, 「容器」則顯示出女性文化符號的特徵, 有機體和生物學意義 上的繁殖則是女性文化的代表。
這一理論拓展了一種對技術、文化和城市的生態學視角, 它能讓我們聯想到, 文字也是一種 「容器」技術, 它不僅能夠貯存信息還因為早期保留和記錄穀物的功能, 也能夠貯存物質。其次 它體現了整體系統論的思想, 在某種意義上, 具 有 「技術合並論」的意味。更重要的是它不是僅 從內部的結構來給機器下定義, 而是從它所產生 的外部影響出發來思考這一問題,開啟了媒介環 境的論題。
單 波 王 冰《西方媒介生態理論的發展及其理論價值與問題》
5. Docker這樣的容器技術與虛擬化技術的區別是什麼
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app)。幾乎沒有性能開銷,可以很容易地在機器和數據中心中運行。最重要的是,他們不依賴於任何語言、框架包括系統。
在docker的網站上提到了docker的典型場景:
Automating the packaging and deployment of applications
Creation of lightweight, private PAAS environments
Automated testing and continuous integration/deployment
Deploying and scaling web apps, databases and backend services
由於其基於LXC的輕量級虛擬化的特點,docker相比KVM之類最明顯的特點就是啟動快,資源佔用小。因此對於構建隔離的標准化的運行環境,輕量級的PaaS(如dokku), 構建自動化測試和持續集成環境,以及一切可以橫向擴展的應用(尤其是需要快速啟停來應對峰谷的web應用)。
構建標准化的運行環境,現有的方案大多是在一個baseOS上運行一套puppet/chef,或者一個image文件,其缺點是前者需要base OS許多前提條件,後者幾乎不可以修改(因為 on write 的文件格式在運行時rootfs是read only的)。並且後者文件體積大,環境管理和版本控制本身也是一個問題。
PaaS環境是不言而喻的,其設計之初和dotcloud的案例都是將其作為PaaS產品的環境基礎
因為其標准化構建方法(buildfile)和良好的REST API,自動測試和持續集成/部署能夠很好的集成進來
因為LXC輕量級的特點,其啟動快,而且docker能夠只載入每個container變化的部分,這樣資源佔用小,能夠在單機環境下與KVM之類的虛擬化方案相比能夠更加快速和佔用更少資源
虛擬化是一個廣義的術語,在計算機方面通常是指計算元件在虛擬的基礎上而不是真實的基礎上運行。
虛擬化,原本是指資源的抽象化,也就是單一物理資源的多個邏輯表示,或者多個物理資源的單一邏輯表示。具體到伺服器虛擬化,就是多個物理資源的單一邏輯表示。
虛擬化技術可以擴大硬體的容量,簡化軟體的重新配置過程。CPU的虛擬化技術可以單CPU模擬多CPU並行,允許一個平台同時運行多個操作系統,並且應用程序都可以在相互獨立的空間內運行而互不影響,從而顯著提高計算機的工作效率。
在實際的生產環境中,虛擬化技術主要用來解決高性能的物理硬體產能過剩和老的舊的硬體產能過低的重組重用,透明化底層物理硬體,從而最大化的利用物理硬體。
6. Docker容器是什麼它比虛擬機強在何處
Docker容器是一個開源的應用容器引擎,可以讓開發者用統一的形式打包其自身的應用,然後包裝到一個可以移植的容器中,隨後發布到任何可以安裝Docker引擎的伺服器上(比如主流的Linux機器或者是Windows機器),當然也可以實現虛擬化。Docker容器幾乎沒有性能開銷,可以很容易的在機器和數據中心運行,其最大的特色就是不依賴任何系統,框架甚至是語言。
由於容器是進程級的,相比於虛擬機有著很多的優勢
一:啟動速度快:由於容器裡面的應用軟體,直接就是底層系統的一個進程,而不是虛擬機內部的進程。所以啟動容器時,不是啟動一整個操作系統,速度就快了很多。
二:資源佔用少:相比於虛擬機而言,容器只佔用需要的資源,不會去佔有無效的資源,而虛擬機則是一個完整的操作系統,不可避免的佔用了所有資源。
三:體積小,輕量級:容器只需要包含用到的組件,對比於虛擬機,容器文件要比虛擬機小很多。
四:方便移動:容器技術最重要的就是為不同的主機上運行服務一個輕便,一致的格式。容器的格式更加標准化且方便客戶對工作負載的遷移,有效避免單一的平台提供商。
7. 容器與虛擬機的區別
1.容器技術簡介
對於容器,它首先是一個相對獨立的運行環境,在這一點有點類似於虛擬機,但是不像虛擬機那樣徹底。在容器內,應該最小化其對外界的影響,比如不能在容器內把宿主機上的資源全部消耗,這就是資源控制。
2.容器與虛擬機的區別
容器和虛擬機之間的主要區別在於虛擬化層的位置和操作系統資源的使用方式。
1
1
容器與虛擬機擁有著類似的使命:對應用程序及其關聯性進行隔離,從而構建起一套能夠隨處運行的自容納單元。此外,容器與虛擬機還擺脫了對物理硬體的需求,允許我們更為高效地使用計算資源,從而提升能源效率與成本效益。
虛擬機會將虛擬硬體、內核(即操作系統)以及用戶空間打包在新虛擬機當中,虛擬機能夠利用「虛擬機管理程序」運行在物理設備之上。虛擬機依賴於hypervisor,其通常被安裝在「裸金屬」系統硬體之上,這導致hypervisor在某些方面被認為是一種操作系統。一旦 hypervisor安裝完成, 就可以從系統可用計算資源當中分配虛擬機實例了,每台虛擬機都能夠獲得唯一的操作系統和負載(應用程序)。簡言之,虛擬機先需要虛擬一個物理環境,然後構建一個完整的操作系統,再搭建一層Runtime,然後供應用程序運行。
對於容器環境來說,不需要安裝主機操作系統,直接將容器層(比如LXC或libcontainer)安裝在主機操作系統(通常是Linux變種)之上。在安裝完容器層之後,就可以從系統可用計算資源當中分配容器實例了,並且企業應用可以被部署在容器當中。但是,每個容器化應用都會共享相同的操作系統(單個主機操作系統)。容器可以看成一個裝好了一組特定應用的虛擬機,它直接利用了宿主機的內核,抽象層比虛擬機更少,更加輕量化,啟動速度極快。
相比於虛擬機,容器擁有更高的資源使用效率,因為它並不需要為每個應用分配單獨的操作系統——實例規模更小、創建和遷移速度也更快。這意味相比於虛擬機,單個操作系統能夠承載更多的容器。雲提供商十分熱衷於容器技術,因為在相同的硬體設備當中,可以部署數量更多的容器實例。此外,容器易於遷移,但是只能被遷移到具有兼容操作系統內核的其他伺服器當中,這樣就會給遷移選擇帶來限制。
因為容器不像虛擬機那樣同樣對內核或者虛擬硬體進行打包,所以每套容器都擁有自己的隔離化用戶空間,從而使得多套容器能夠運行在同一主機系統之上。我們可以看到全部操作系統層級的架構都可實現跨容器共享,惟一需要獨立構建的就是二進制文件與庫。正因為如此,容器才擁有極為出色的輕量化特性。
對Docker稍有接觸的人應該都見過下圖,無需更多解釋,Docker減少Guest OS這一層級,所以更輕量和更高性能。
docker虛擬機區別
3.深層區別:
docker虛擬機區別
更新:Docker現在已經支持windows平台,所以上面的Windows支持一欄可以忽略。
8. 什麼是docker容器技術
docker容器技術指Docker是一個由GO語言寫的程序運行的「容器」(Linux containers, LXCs)
9. Linux裡面rancber和docker區別是什麼
Linux是一套免費使用和自由傳播的類UNIX操作系統,一般用於後端服務中,而Docker是一個開源的應用容器引擎,兩者是用來進行配合使用,並不是一類,所以兩者無法進行對比。
Docker六大特點
1、更高效的利用系統資源
docker對系統資源的利用率更高,無論是應用執行速度,內存損耗或者文件存儲速度,都要比傳統虛擬機技術更高效。因此,相比虛擬機技術,一個相同配置的主機往往可以運行更多數量的應用。
2、更快速的啟動時間
傳統的虛擬機技術啟動應用服務往往需要數分鍾,而docker容器應用,由於直接運行於宿主內核,無需啟動完整的操作系統,因此可以做到秒級,甚至毫秒級的啟動時間,大大的節約了開發測試,部署的時間。
3、一致的運行環境
開發過程中常見的一個問題是環境一致問題,由於開發環境,測試環境,生產環境不一致,導致有些bug並未在開發過程中發現。而docker的鏡像提供了除內核外完整的運行時環境,確保環境一致性,從而不會在出現「這段代碼在我機器上沒問題」這類問題。
4、持續支付和部署
對開發和運維人員來說,最希望就是一次創建和部署,可以在任意的地方運行。(定製應用鏡像來實現集成、持續支付、部署。開發人員可以通過dockerfile來進行鏡像構建,並結合持續集成系統進行集成測試,而運維人員則可以直接在生產環境中快速部署該鏡像,甚至結合持續部署系統進行自動部署)。而且使用dockerfile使鏡像構建透明化,不僅僅開發團隊可以理解應用運行環境,也方便運維團隊理解應用運行所需條件,幫助更好的生產環境中部署該鏡像。
5、更輕松的遷移
由於docker確保了執行環境的一致性,使得應用的遷移更加的容易。docker可以在很多平台上運行,無論是物理機、虛擬機、公有雲、私有雲、甚至是筆記本、其運行結果是一致的。因此用戶可以很輕易的將在一個平台上運行的應用,遷移到另一個平台上,而不用擔心運行環境的變化導致應用無法正常運行的情況。
6、更輕松的維護和拓展
docker使用的分層存儲以及鏡像的技術,使得應用重復部分的復用更為容易,也使得應用的維護更新更加簡單,基於基礎鏡像進一步擴展鏡像也變得十分簡單。此外,docker團隊同各個開源項目團隊一起維護了一大批高質量的官網鏡像,既可以直接在生產環境使用,又可以作為基礎進一步定製,大大的降低了應用服務的鏡像製作成本。