首頁>Club>
2
回覆列表
  • 1 # 兔子2049

    docker提供了一個app的虛擬現實。vm提供了一個os虛擬實現。 hypervisor提供了一個硬體的虛擬實現

  • 2 # 逸狐

    Docker,搬運工的意思。也就是說搬運容器continer。Docker是一個開源的應用容器引擎,讓開發者可以透過Docker打包他們的應用以及依賴包到一個可移植的容器Container中,容器與容器之間是完全隔離的,然後在任何主流的作業系統中開發、除錯和執行。

  • 3 # T鍋俠

    然後,"雲"的時代來了。您可以將您的程式放到像阿里雲這樣的雲公司的"資料中心"對外提供服務。與 Web 託管服務不同,這些公司採用了一種稱為"虛擬化"的概念,即硬體資源透過作業系統功能進一步細分隔離,並更最佳化地向需要這些資源的客戶提供作業系統。您只為所使用的作業系統服務付費,而不是使用整個物理伺服器。對於您自己和雲公司來說,這通常更加划算。

    但即使是傳統的雲計算也無法避免一件事——使用大量的作業系統,如windows和Linux(RHEL,Ubuntu,Fedora等)。這些OS可以輕鬆地超過 1 GB 的大小,也稱為"OS 映像"。但是,您的應用程式可能只有 300 MB 的大小。但是虛擬化產生的虛擬化環境,其大小為 1 GB 。您的應用程式遠小於該虛擬機器。您是不是覺得這1GB成本有點高。

    Docker 就是為了解決這個問題。Docker 以以下方式進行操作。可以共享某些公共資源,而不是為每個應用程式託管一個作業系統。並且有一種叫做"docker 引擎"的東西,它位於作業系統的上層,如下所示。

    從上圖中您可以直觀地觀察使用容器時"app "是如何變得更小。從某種意義上說,這是一個非常簡單的解決方案,只不過是在作業系統和應用程式之間引入另一層來最佳化資源,使用並減少對冗餘作業系統的需求。這是開發應用程式的重大突破,因為這種抽象級別解決了一個重大的問題— 減少配置巨型虛擬機器的麻煩,只託管其應用程式所必需依賴的最小"容器"。

    採用 docker 或容器的好處是,應用程式可以交付的更快、部署得更快、啟動更快、停止更快、變更升級另一個所謂的"映像"更快,極大的提升了程式開發,交付、升級變更的速度,相對減少資源的浪費。

  • 4 # 運維機器人狗子

    docker這個單詞放到翻譯軟體裡面去會告訴你是“碼頭工人”

    它的口號是“Build,Ship,and Run Any App,Anywhere”,大意是,Docker就像集裝箱一樣,可以隨便怎麼用了。

    想想集裝箱發明出來之前,想想下面這兩個場景:

    1.你有一艘船,以給人運送貨物為生計,今天有人找你運了一船醫療垃圾,首先從那輛車上一箱一箱搬到船上,送到地點以後,又要等人一箱一箱搬到岸上。

    2.返航以後又來生意了,讓你運送一船水果,比如哈密瓜。你跟貨主說,好沒問題,我這船剛運過的醫療垃圾,我先清洗一下船艙啊,那貨主不掉頭就走啊?

    而發明了集裝箱以後呢?把裝了醫療垃圾的集裝箱搬到船上,到地點以後,又把集裝箱搬到岸上。

    回程以後,又可以繼續搬水果的集裝箱到船上繼續賺錢了~~~

    放到Docker上也是一樣,比如多環境的問題,伺服器上裝的是jdk1.7,運行了一個xx.jar的應用,這時候又有一個jdk1.8的yy.jar包要執行,再來一個jdk1.9的zz.jar包要執行?伺服器上

    把這些都裝上嗎?而如果把jar包放到docker裡面了,不管你jdk多少都不存在問題。xx.jar做一個映象,yy.jar做一個映象...

    不管有多少機器,只要安裝了docker,就能執行起來。

  • 5 # 程式碼加油站

    我們的專案可以打包建立成docker映象,docker有類似git的push功能,可以將我們的專案映象上傳到類似github的服務上面,還可以pull下來直接執行。

    想象一下我們在手機裡面下載軟體的過程。我們需要一個app,在蘋果軟體商店或安卓軟體市場找到並下載到本地執行,docker的映象釋出和下載過程與此類似。

  • 6 # zone774

    Docker到現在為止,已經越來越流行了。主要是因為他的便捷,加之當下微服務成為後端橫向擴充套件的一種解決思路,而微服務又是依賴於容器的。

    那麼現在就來說說什麼是 Docker:

    其實 docker 的概念就像是集裝箱,正如上圖所示。一對集裝箱,裝載有不同的 環境或軟體。

    比如我有一艘船,需要運輸一批有毒的化學物質,還要運輸一批食材,牛肉,水果等,但是你不能將這些物質混合裝在一起吧,因為會影響到食物,到時候就損失一大筆 money 了。若是用集裝箱封裝起來就不會有剛剛的這種煩惱,裝食材的集裝箱裝食材,裝化學物質的集裝箱裝化學物質,兩者互不影響,由統一艘船運送。達到了隔離的目的。

    在實際運用中,你的軟體開發工程師用的是 macOS ,你的測試工程師用得是 Ubuntu,你的線上環境是 CentOS ,顯然當專案測試和正式上線的時候會有環境衝突問題。如果是將專案封進一個 docker 映象,不同的作業系統只要將這個封好的映象部署就行。就可以直接使用了,省去了環境配置的問題。

    下面是虛擬機器與容器的一些對比圖:

  • 7 # 非同步社群

    Docker 是 Golang 編寫的, 自 2013 年推出以來,受到越來越多的開發者的關注。如果你關注最新的技術發展,那麼你一定聽說過 Docker。不管是雲服務還是微服務(Microservices),越來越多的廠商都開始基於 Docker 作為基礎設施自動化的工具。那麼什麼是 Docker?Docker與傳統的虛擬機器有什麼區別?為何要採用 Docker?如何使用 Docker?

    當有人提到“Docker”時,可能是指如下3種概念之一。

    Docker公司。Docker的容器執行時和編排引擎。Docker開源專案(Moby)。

    本文摘自美亞作業系統排名第一的暢銷書《深入淺出docker》

    深入淺出Docker

    1.1 Docker——簡介

    Docker是一種運行於Linux和Windows上的軟體,用於建立、管理和編排容器。Docker是在GitHub上開發的Moby開源專案的一部分。Docker公司,位於舊金山,是整個Moby開源專案的維護者。Docker公司還提供包含支援服務的商業版本的Docker。

    以上是一個簡要介紹。下面針對每個概念進行詳細介紹。此外還包含對容器生態的探討,以及對開放容器計劃(Open Container Initiative, OCI)的介紹。

    1.2 Docker公司

    Docker公司位於舊金山,由法裔美籍開發者和企業家Solumon Hykes創立,其標誌如圖1.1所示。

    有意思的是,Docker公司起初是一家名為dotCloud的平臺即服務(Platform-as-a-Service, PaaS)提供商。底層技術上,dotCloud平臺利用了Linux容器技術。為了方便建立和管理這些容器,dotCloud開發了一套內部工具,之後被命名為“Docker”。Docker就是這樣誕生的!

    2013年,dotCloud的PaaS業務並不景氣,公司需要尋求新的突破。於是他們聘請了Ben Golub作為新的CEO,將公司重新命名為“Docker”,放棄dotCloud PaaS平臺,懷揣著“將Docker和容器技術推向全世界”的使命,開啟了一段新的征程。

    圖1.1 Docker標誌

    公司更名為Docker之後,進行了幾次小規模的未公開價格的收購,來豐富其產品和服務組合。

    至《深入淺出Docker》撰寫時,Docker公司擁有約300~400名僱員,並舉辦名為DockerCon的年度會議。DockerCon的目標是聚攏不斷髮展的容器生態,並促進Docker和容器技術的推廣。

    本書將始終使用“Docker公司”來指代Docker這家公司,其他地方出現的“Docker”都是指容器技術或開源專案。

    注:

    “Docker”一詞來自英國口語,意為碼頭工人(Dock Worker),即從船上裝卸貨物的人。

    1.3 Docker執行時與編排引擎

    多數技術人員在談到Docker時,主要是指Docker引擎。

    Docker引擎是用於執行和編排容器的基礎設施工具。有VMware管理經驗的讀者可以將其類比為ESXi。ESXi是執行虛擬機器的核心管理程式,而Docker引擎是執行容器的核心容器執行時。

    其他Docker公司或第三方的產品都是圍繞Docker引擎進行開發和整合的。如圖2.2所示,Docker引擎位於中心,其他產品基於Docker引擎的核心功能進行整合。

    Docker引擎可以從Docker網站下載,也可以基於GitHub上的原始碼進行構建。無論是開源版本還是商業版本,都有Linux和Windows版本。

    在本書撰寫時,Docker引擎主要有兩個版本:企業版(EE)和社群版(CE)。

    每個季度,企業版和社群版都會發佈一個穩定版本。社群版本會提供4個月的支援,而企業版本會提供12個月的支援。

    社群版還會透過Edge方式釋出月度版。

    圖1.2 圍繞Docker引擎進行開發和整合的產品

    從2017年第一季度開始,Docker版本號遵循YY.MM-xx格式,類似於Ubuntu等專案。例如,2018年6月第一次釋出的社群版本為18.06.0-ce。

    注:

    2017年第一季度以前,Docker版本號遵循大版本號.小版本號的格式。採用新格式前的最後一個版本是Docker 1.13。

    1.4 Docker開源專案(Moby)

    “Docker”一詞也會用於指代開源Docker專案。其中包含一系列可以從Docker官網下載和安裝的工具,比如Docker服務端和Docker客戶端。不過,該專案在2017年於Austin舉辦的DockerCon上正式命名為Moby專案。由於這次改名,GitHub上的docker/docker庫也被轉移到了moby/moby,並且擁有了專案自己的Logo,如圖2.3所示。

    圖1.3 Moby的Logo

    Moby專案的目標是基於開源的方式,發展成為Docker上游,並將Docker拆分為更多的模組化元件。Moby專案託管於GitHub的Moby程式碼庫,包括子專案和工具列表。核心的Docker引擎專案位於GitHub的moby/moby,但是引擎中的程式碼正持續被拆分和模組化。

    作為一個開源專案,其原始碼是公開可得的,在遵循Apache協議2.0的情況下,任何人都可以自由地下載、貢獻、調整和使用。

    如果檢視專案的提交歷史,可以發現其中包含來自如下公司的基礎技術:紅帽、微軟、IBM、思科,以及HPE。此外,還可以看到一些並非來自大公司的貢獻者。

    多數專案及其工具都是基於Golang編寫的,這是谷歌推出的一種新的系統級程式語言,又叫Go語言。使用Go語言的讀者,將更容易為該專案貢獻程式碼。

    Mody/Docker作為開源專案的好處在於其所有的設計和開發都是開放的,並摒棄了私有程式碼閉源開發模式下的陳舊方法。因此釋出過程也是公開進行的,不會再出現某個秘密的版本提前幾個月就宣佈要召開發佈會和慶功會的荒唐情況。Moby/Docker不是這樣運作的,專案中多數內容都是開放並歡迎任何人檢視和作出貢獻的。

    Moby專案以及更廣泛的Docker運動一時間掀起了一波熱潮。GitHub上已經有數以千計的提交請求(pull request),以及數以萬計的基於容器化技術的專案了,更不用說Docker Hub上數十億的映象下載。Moby專案已經給軟體產業帶來了翻天覆地的變化。

    這並非妄想,Docker已經得到了廣泛的應用!

    1.5 容器生態

    Docker公司的一個核心哲學通常被稱為“含電池,但可拆卸”(Batteries included but removable)。

    意思是許多Docker內建的元件都可以替換為第三方的元件,網路技術棧就是一個很好的例子。Docker核心產品內建有網路解決方案。但是網路技術棧是可插拔的,這意味著Docker內建的網路方案可以被替換為第三方的方案。許多人都會這樣使用。

    早期的時候,經常出現第三方外掛比 Docker 提供的內建元件更好的情況。然而這會對Docker公司的商業模式造成衝擊。畢竟,Docker公司需要依靠盈利來維持基業長青。因此,“內建的電池”變得越來越好用了。這也導致了生態內部的緊張關係和競爭的加劇。

    簡單來說,Docker內建的“電池”仍然是可插拔的,然而越來越不需要將它們移除了。

    儘管如此,容器生態在一種良性的合作與競爭的平衡中還是得以繁榮發展。在談及容器生態時,人們經常使用到諸如“co-opetition”[1]與“frenemy”[2]這樣的字眼。這是一個好現象!因為良性的競爭是創新之母。

    1.6 開放容器計劃

    如果不談及開放容器計劃(The Open Container Initiative, OCI)的話,對Docker和容器生態的探討總是不完整的。圖1.4所示為OCI的Logo。

    圖1.4 OCI的Logo

    OCI是一個旨在對容器基礎架構中的基礎元件(如映象格式與容器執行時,如果對這些概念不熟悉的話,不要擔心,本書後續會介紹到它們)進行標準化的管理委員會。

    同樣,如果不談歷史的話,對OCI的探討也是不完整的。和所有的歷史記錄一樣,其版本取決於誰來講述它。所以,以下是我眼中的容器歷史。

    我講述的這段簡短的歷史是,一個名為CoreOS的公司不喜歡Docker的某些行事方式。因此它就建立了一個新的開源標準,稱作“appc”,該標準涉及諸如映象格式和容器執行時等方面。此外它還開發了一個名為rkt(發音“rocket”)的實現。

    兩個處於競爭狀態的標準將容器生態置於一種尷尬的境地。

    這使容器生態陷入了分裂的危險中,同時也令使用者和消費者陷入兩難。雖然競爭是一件好事,但是標準的競爭通常不是。因為它會導致困擾,降低使用者接受度,對誰都無益。

    考慮到這一點,所有相關方都盡力用成熟的方式處理此事,共同成立了OCI——一個旨在管理容器標準的輕量級的、敏捷型的委員會。

    在《深入淺出docker》寫作時,OCI已經發布了兩份規範(標準):映象規範和執行時規範。

    提到這兩項標準時,經常用到的比喻就是鐵軌。它們就像對鐵軌的尺寸和相關屬性達成一致,讓所有人都能自由地建造更好的火車、更好的車廂、更好的訊號系統、更好的車站等。只要各方都遵循標準就是安全的。沒人會希望在鐵軌尺寸問題上存在兩個相互競爭的標準!

    公平地說,這兩個OCI規範對Docker的架構和核心產品設計產生了顯著影響。Docker 1.11版本中,Docker引擎架構已經遵循OCI執行時規範了。

    到目前為止,OCI已經取得了不錯的成效,將容器生態團結起來。然而,標準總是會減慢創新的步伐!尤其是對於超快速發展的新技術來說更是如此。這在容器社群引起了熱烈的討論。以我之見,這是好事!容器技術正在重塑世界,走在技術前列的人們有熱情、有想法,這很正常。期待關於標準和創新有更加熱烈的討論!

    OCI在Linux基金會的支援下運作,Docker公司和CoreOS公司都是主要貢獻者。

  • 8 # 芒鞋輕竹杖

    中文有時會讓人誤解,我覺得James Turnbull (去年已經被微軟拿到碗裡了,docker for windows)的解釋比較通俗易懂,當然和所有的其他技術一樣,親自實踐才是最塊的學習方法

  • 9 # 廬陵歐陽鎀

    、OpenStack 叢集和其他的基礎應用平臺。

    web應用的自動化打包和釋出;自動化測試和持續整合、釋出;在服務型環境中部署和調整資料庫或其他的後臺應用;從頭編譯或者擴充套件現有的OpenShift或Cloud Foundry平臺來搭建自己的PaaS環境。

  • 10 # ScratchLab

    我家是搞養殖的,養了幾十頭羊,有的瘦小,有的強壯。之前,所有羊在一個食槽裡吃飼料,強壯的羊會擠兌瘦小的,不讓其吃。結果就是強壯的愈加強壯,瘦小的愈加瘦小。為了解決這個問題,我為每頭羊分配了一個食槽,每頭羊只能在屬於它的食槽吃飼料,去其他食槽吃就會捱打,一段時間後,每頭羊便可以吃到為其分配的飼料,羊的長勢也就比較均衡了。

    有人的地方就有江湖,羊也一樣。強壯的羊經常欺負瘦小的羊,導致瘦小的羊受傷,為了解決這個問題,我們將經常欺負弱小的羊單獨圈起來,這樣,對於它來說世界就只有它一頭羊了,精力無處發洩,只能撞牆了。原先的羊圈,欺負弱小的情形還在繼續發生,理想的方法是為每頭羊準備一個單獨的羊圈,我將方法提出後,被家裡以成本過高為由否決了。

    我們以程序類比羊,以作業系統類比羊圈,以資源類比飼料。

    程序A為了執行流暢,可能會無限申請記憶體及CPU時間,擠壓了其他程序的資源,導致其他程序執行卡頓,使用者就會認為其他軟體使用者體驗差,進而解除安裝,這是非常不公平的。作業系統的解決方法是可為每個程序分配固定的資源(記憶體、CPU執行時間等),程序不能使用額外的資源。這就相當於為每頭羊分配了一個食槽,裡面放適合它的飼料。在計算機中,這種技術叫CGroups。

    程序是可以看到其他程序的,也可以看到其他程序產生的檔案。程序可呼叫kill、rm殺死其他程序或刪除屬於其他程序的檔案。透過許可權機制可緩解此問題,但是更好的方法是,程序只能看到屬於自己的資源,程序想作惡,都不知道如何下手。在計算機中,這種技術叫做Namespace,將程序放在一個獨立的Namespace中,程序就只能看到屬於它的資源了,相當於為每頭羊準備一個單獨的羊圈。

    透過CGroups和Namespace技術,程序只能使用固定的資源,並認為自己獨享作業系統,這就是容器虛擬化技術。

    容器虛擬化技術是作業系統級虛擬化。檔案系統屬於Namespace的一種,透過容器虛擬化技術,程序A使用Ubuntu16.04的檔案系統,程序B使用Ubuntu22.04的檔案系統,雖然二者使用的核心是同一個,但應用軟體的行為(由軟體、依賴庫、配置檔案等決定)分別與Ubuntu16.04和Ubuntu22.04一致,就可以認為,分別虛擬出了Ubuntu16.04和Ubuntu22.04作業系統。

    Docker整合了上述虛擬化技術,並提供了一系列工具,簡化並自動化容器虛擬化技術使用流程。風雲際會,掀開了雲原生時代的序幕。

    我寫了一個稱作docker.sh 的小專案,該專案旨在透過一系列的實驗使使用者對docker的底層技術,如Namespace、CGroups、rootfs、聯合載入等有一個感性的認識。在此過程中,我們還將透過Shell指令碼一步一步地實現一個簡易的docker,以期使讀者在使用docker的過程中知其然知其所以然。該專案的倉庫地址如下:

    https://github.com/pandengyang/docker.sh.git https://gitee.com/pandengyang/docker.sh.git

    可用於學習 Docker 原理,裡面有Namespace、CGroups的原理及示例的介紹。

  • 11 # 光場空間

    把一臺電腦隔離成很多獨立小環境的技術,現代作業系統和大部分硬體支援。這個新環境就是容器,而管理這個小環境的就是容器管理程式。docker就是其中的一個,還有其它的比如podman,當然沒有這些專用的工具,也能用作業系統的自帶的工具手工建立這個小環境。和虛擬機器不同的是,他是把系統隔離出來的,一個大樓有好多房間,共用的是一個底層硬體和作業系統。而虛擬機器不是,虛擬機器是虛擬出一個完全獨立的作業系統,這個作業系統和宿主機是2個不相干的系統,環境更徹底,缺點是會浪費些資源,犧牲些效能。

  • 中秋節和大豐收的關聯?
  • 什麼是資料分析的漏斗模型?