必威电竞|足球世界杯竞猜平台

Docker
來(lái)源:互聯(lián)網(wǎng)

Docker是一個(gè)用于開(kāi)發(fā)、發(fā)布和運(yùn)行應(yīng)用程序的開(kāi)源應(yīng)用容器引擎。可以幫助開(kāi)發(fā)人員在不同的環(huán)境中快速、簡(jiǎn)單、可移植地進(jìn)行應(yīng)用程序開(kāi)發(fā)。Docker最初由Docker公司開(kāi)發(fā),并于2013年發(fā)布。Docker是一個(gè)構(gòu)建在lxc(Linux Containers)之上的,基于進(jìn)程容器(Process container)的輕量級(jí)虛擬容器解決方案。Docker基于操作系統(tǒng)層級(jí)的虛擬化技術(shù),使開(kāi)發(fā)者可以打包其應(yīng)用以及依賴(lài)包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的Linux或Windows機(jī)器上。與傳統(tǒng)的虛擬機(jī)相比,Docker具有輕量、高性能、更快的啟動(dòng)速度、更少的資源占用、更好的移植性和容易部署等優(yōu)點(diǎn)。

發(fā)展歷程

起源階段(2008-2013年)

2008年,由Solomon Hykes、Kamel Founadi和Sebastien Pahl在巴黎創(chuàng)立了一家名為DotCloud的初創(chuàng)公司,該公司旨在為軟件開(kāi)發(fā)人員提供云托管服務(wù)。在接下來(lái)的幾年里,Hykes領(lǐng)導(dǎo)了基于容器的工具的開(kāi)發(fā),以幫助DotCloud加速和擴(kuò)展其運(yùn)營(yíng)。

2013 年,Hykes推出了工具Docker,并將其作為開(kāi)源軟件發(fā)布,供任何人下載、使用和修改。

2014年,Docker公司發(fā)布了Docker 1.0版本,引入了鏡像和容器的概念,并提供了一套完整的命令行工具和API。同年3月,亞馬遜網(wǎng)站宣布在其Elastic Beanstalk產(chǎn)品中添加Docker支持。同年6月,谷歌開(kāi)源了一個(gè)容器節(jié)點(diǎn)管理器,該管理器根據(jù)YAML清單管理一組Docker容器。同年8月,Red Hat發(fā)布了Project Atomic,這是一個(gè)用于運(yùn)行Docker容器的原型系統(tǒng)。

發(fā)展階段(2014-2016年)

2015年,Docker引入了Docker Compose和Docker Swarm。Docker Compose用于定義和管理多容器應(yīng)用程序,而Docker Swarm則是Docker的集群管理和編排工具。同年Docker公司宣布成立了一個(gè)新的非營(yíng)利性組織Docker開(kāi)放容器倡議(OCI),旨在推廣Docker的開(kāi)放標(biāo)準(zhǔn)化和互操作性。OCI不僅包括Docker公司,還包括Red Hat、谷歌、IBM等多個(gè)知名公司。

2016年,Docker推出了Docker for Mac和Docker for Windows,為開(kāi)發(fā)人員提供了在本地環(huán)境中運(yùn)行和測(cè)試Docker容器的工具。同年9月,微軟亞特蘭大舉行的Ignite大會(huì)上宣布全面推出Windows Server 2016,Windows 2016推出了容器功能,并且Windows Server 2016上的容器由 Docker 提供支持。

商業(yè)化階段(2017-至今)

2017年,Docker公司推出了Docker Enterprise Edition(Docker EE),為企業(yè)級(jí)用戶(hù)提供了更為穩(wěn)定和可靠的容器服務(wù)。同年,Docker將版本號(hào)命名方式調(diào)整為基于年份的命名規(guī)則,如17.03、17.06、17.09等。同年10月,在DockerCon EU 2017上,Docker宣布Docker引擎工具將對(duì)Kubernetes提供支持。

2020年,Docker發(fā)布了Docker CLI改進(jìn)版,引入了實(shí)驗(yàn)性功能和命令,提供更強(qiáng)大和靈活的命令行界面

2021年,Docker公司宣布了新的產(chǎn)品訂閱策略,將產(chǎn)品訂閱分為四級(jí),分別為個(gè)人免費(fèi)(Personal)、專(zhuān)業(yè)付費(fèi)版(Pro)、團(tuán)隊(duì)付費(fèi)版(Team)和企業(yè)付費(fèi)版(Business)。對(duì)于擁有超過(guò) 250 名員工或年收入超過(guò) 1000 萬(wàn)美元的公司,必須使用付費(fèi)訂閱模式。2023年4月18日,Docker以145億人民幣的企業(yè)估值入選《2023·胡潤(rùn)全球獨(dú)角獸榜》,排名488。

架構(gòu)

Docker使用客戶(hù)端-服務(wù)器架構(gòu),Docker客戶(hù)端與Docker守護(hù)進(jìn)程進(jìn)行通信以完成Docker的功能??蛻?hù)端用于發(fā)送操作指令,守護(hù)進(jìn)程負(fù)責(zé)處理構(gòu)建、運(yùn)行和分發(fā)Docker容器的任務(wù)。Docker客戶(hù)端和守護(hù)進(jìn)程可以在同一系統(tǒng)上運(yùn)行,也可以通過(guò)網(wǎng)絡(luò)連接到遠(yuǎn)程的Docker守護(hù)進(jìn)程。客戶(hù)端和守護(hù)進(jìn)程之間使用REST API通過(guò)UNIX套接字或網(wǎng)絡(luò)接口進(jìn)行通信。另外,Docker還提供了Docker Compose作為另一個(gè)客戶(hù)端工具,它可以處理由一組容器組成的應(yīng)用程序。Docker架構(gòu)圖如下圖所示。

Docker守護(hù)進(jìn)程 (Docker Daemon)

Docker守護(hù)進(jìn)程也稱(chēng)為Docker引擎,是運(yùn)行在主機(jī)上的后臺(tái)服務(wù)。它負(fù)責(zé)管理Docker對(duì)象(鏡像、容器、網(wǎng)絡(luò)等),接收來(lái)自Docker客戶(hù)端的命令,并執(zhí)行相應(yīng)的操作。

在Docker守護(hù)進(jìn)程中還存在著Docker鏡像(Docker Image)、Docker容器(Docker Container)、Docker注冊(cè)表(Docker Registry)、數(shù)據(jù)卷(Volume)等重要組件。

Docker鏡像(Docker Image)

Docker鏡像是一個(gè)輕量級(jí)的、可移植的打包格式,它包含了運(yùn)行應(yīng)用程序所需的所有文件和配置。Docker鏡像可以通過(guò)Dockerfile定義,也可以從Docker Hub等鏡像倉(cāng)庫(kù)中獲取。

Docker容器(Docker Container)

Docker容器是由Docker鏡像啟動(dòng)的運(yùn)行實(shí)例,它包含了應(yīng)用程序和運(yùn)行時(shí)所需的所有依賴(lài)項(xiàng)。Docker容器是輕量級(jí)、可隨時(shí)啟動(dòng)和停止的,同時(shí)也具有良好的隔離性和可移植性。

Docker注冊(cè)表(Docker Registry)

Docker注冊(cè)表用于存儲(chǔ)Docker鏡像的倉(cāng)庫(kù)。默認(rèn)情況下,Docker官方提供了一個(gè)公共注冊(cè)表(Docker Hub),開(kāi)發(fā)者可以從中獲取常用的鏡像。此外,也可以搭建私有的Docker注冊(cè)表來(lái)存儲(chǔ)和共享自己的鏡像。

數(shù)據(jù)卷(Volume)

數(shù)據(jù)卷是解決容器持久化數(shù)據(jù)的問(wèn)題的一種機(jī)制。在容器中,當(dāng)刪除容器時(shí),容器內(nèi)部產(chǎn)生的需要持久化的數(shù)據(jù)也會(huì)被刪除,這會(huì)導(dǎo)致數(shù)據(jù)的丟失。為了解決這個(gè)問(wèn)題,可以使用數(shù)據(jù)卷將數(shù)據(jù)持久化到宿主機(jī)上,實(shí)現(xiàn)容器與宿主機(jī)之間的數(shù)據(jù)共享。數(shù)據(jù)卷允許將宿主機(jī)上的目錄或文件與容器中的目錄進(jìn)行映射,容器中的應(yīng)用程序在容器的目錄中讀寫(xiě)數(shù)據(jù)時(shí),對(duì)應(yīng)的操作便會(huì)同步到宿主機(jī)上的目錄中,從而實(shí)現(xiàn)數(shù)據(jù)的持久化。例如,對(duì)于數(shù)據(jù)庫(kù)容器,可以將數(shù)據(jù)存儲(chǔ)到宿主機(jī)上的實(shí)際磁盤(pán)中,以確保數(shù)據(jù)的持久性。Docker 提供了多種與 Volume 相關(guān)的命令,允許用戶(hù)創(chuàng)建、管理和刪除卷。此外,Volume 的隔離特性確保了宿主機(jī)和容器之間的安全性,減少了對(duì)宿主機(jī)文件系統(tǒng)的依賴(lài),從而提高了應(yīng)用的可移植性和數(shù)據(jù)的可靠性。

Docker客戶(hù)端(Docker Client)

Docker客戶(hù)端是用于與Docker引擎進(jìn)行交互的工具,它通過(guò)Docker API與Docker引擎進(jìn)行通信。Docker客戶(hù)端可以在本地或遠(yuǎn)程主機(jī)上運(yùn)行,可以通過(guò)命令行界面或者Docker API來(lái)操作Docker引擎。一個(gè)Docker客戶(hù)端可以與多個(gè)Docker引擎通信。

核心實(shí)現(xiàn)原理

Linux下的核心實(shí)現(xiàn)原理

Docker利用Linux內(nèi)核的命名空間(Namespaces),控制組(Control Groups)和層功能(Layer Capabilities)實(shí)現(xiàn)容器技術(shù)。命名空間確保了容器之間以及容器與主機(jī)之間的隔離性,通過(guò)隔離進(jìn)程 ID、文件系統(tǒng)、網(wǎng)絡(luò)、用戶(hù)和其他資源,使每個(gè)容器仿佛在獨(dú)立的操作系統(tǒng)上運(yùn)行??刂平M則用于限制和管理容器的資源使用,如 CPU、內(nèi)存、網(wǎng)絡(luò)帶寬等,確保不同容器之間的資源分配合理且互不干擾。通過(guò)聯(lián)合文件系統(tǒng)(如OverlayFS)實(shí)現(xiàn)鏡像的分層存儲(chǔ),使得容器的創(chuàng)建和啟動(dòng)更加高效,并且減少了存儲(chǔ)空間的占用。

Windows下的核心實(shí)現(xiàn)原理

在Windows下,Docker利用Hyper-V虛擬化技術(shù)作為容器運(yùn)行時(shí)的后端,并結(jié)合Windows容器技術(shù)來(lái)實(shí)現(xiàn)容器的隔離和高效運(yùn)行。同時(shí),通過(guò)引入Compute Services提供的容器的管理功能對(duì)容器進(jìn)行管理。

生態(tài)系統(tǒng)

Docker是一個(gè)強(qiáng)大的容器化平臺(tái),它不僅僅是一個(gè)容器技術(shù),而是一個(gè)生態(tài)系統(tǒng),包括許多相關(guān)工具和服務(wù),使得Docker容器更加易于使用和擴(kuò)展。以下是Docker生態(tài)系統(tǒng)的一些主要組件和工具。

Docker Hub

Docker Hub是Docker官方提供的基于云的容器鏡像倉(cāng)庫(kù),是世界上最大的容器鏡像存儲(chǔ)庫(kù),開(kāi)發(fā)人員可以從中獲取并分發(fā)所需的鏡像。Docker Hub支持從GitHub或Bitbucket倉(cāng)庫(kù)中自動(dòng)生成鏡像,并在更新代碼后自動(dòng)觸發(fā)構(gòu)建,還提供了自動(dòng)構(gòu)建服務(wù)和私有倉(cāng)庫(kù)等功能。

Docker Compose

Docker Compose是一個(gè)部署工具,可以通過(guò)一個(gè)單獨(dú)的配置文件來(lái)定義和運(yùn)行多個(gè)Docker容器。使用Docker Compose可以快速地構(gòu)建和啟動(dòng)復(fù)雜的多容器應(yīng)用程序,例如Web應(yīng)用程序和數(shù)據(jù)庫(kù)應(yīng)用程序等。

Docker Swarm

Docker Swarm是Docker的官方集群管理工具,它可以將多個(gè)Docker主機(jī)組成一個(gè)集群,以實(shí)現(xiàn)容器的高可用性和負(fù)載均衡。Docker Swarm還提供了內(nèi)置的服務(wù)發(fā)現(xiàn)和容器編排功能,可以方便地管理和擴(kuò)展容器應(yīng)用程序。

Docker Machine

Docker Machine是一個(gè)管理工具,通過(guò)它可以在多種環(huán)境中無(wú)縫部署和運(yùn)行Docker容器,并在本地或云平臺(tái)上快速地創(chuàng)建和管理Docker主機(jī)。使用Docker Machine可以簡(jiǎn)化部署和管理Docker容器集群的過(guò)程,同時(shí)也可以方便地在開(kāi)發(fā)和測(cè)試環(huán)境中使用Docker,為生產(chǎn)提供支持。

優(yōu)缺點(diǎn)以及應(yīng)用場(chǎng)景

優(yōu)勢(shì)

簡(jiǎn)化開(kāi)發(fā)生命周期

響應(yīng)式部署和擴(kuò)展

Docker基于容器的平臺(tái)具有高度可移植性,可以在各種環(huán)境中運(yùn)行,如開(kāi)發(fā)人員的本地機(jī)器、數(shù)據(jù)中心、云服務(wù)商等。這使得動(dòng)態(tài)管理工作負(fù)載變得容易,可以根據(jù)業(yè)務(wù)需求實(shí)時(shí)擴(kuò)展或拆除應(yīng)用程序和服務(wù)。

在相同硬件上運(yùn)行更多工作負(fù)載

Docker的輕量和高效性使得在相同的硬件上能夠運(yùn)行更多的工作負(fù)載成為可能。相比于傳統(tǒng)的基于管理程序的虛擬機(jī),Docker提供了更經(jīng)濟(jì)高效的解決方案,能夠在同樣的服務(wù)器容量下實(shí)現(xiàn)更多的業(yè)務(wù)目標(biāo),適用于高密度環(huán)境和中小型部署。

缺點(diǎn)

安全性問(wèn)題

容器技術(shù)在容器安全方面存在一些重要問(wèn)題。容器安全首次被列入高德納(高德納咨詢(xún)公司)年度十大安全項(xiàng)目,進(jìn)一步確認(rèn)了其在安全研究和應(yīng)用方面的廣泛性。尤其在微服務(wù)架構(gòu)和DevOps開(kāi)發(fā)模式的流行下,越來(lái)越多的開(kāi)發(fā)人員采用了容器技術(shù)。然而,容器技術(shù)作為一種新型技術(shù)革命,不僅僅面臨傳統(tǒng)主機(jī)安全問(wèn)題,還帶來(lái)了新的安全威脅,Docker的安全性問(wèn)題主要在以下幾個(gè)方面。

逃逸安全風(fēng)險(xiǎn)

Docker容器的逃逸安全風(fēng)險(xiǎn)包括危險(xiǎn)配置、隔離不完善和內(nèi)核漏洞等。危險(xiǎn)配置可能使攻擊者獲得逃逸的機(jī)會(huì),隔離不完善可能導(dǎo)致關(guān)鍵信息泄露,而內(nèi)核漏洞可能使攻擊者逃離容器并訪(fǎng)問(wèn)宿主機(jī)。

鏡像安全風(fēng)險(xiǎn)

鏡像是Docker容器的靜態(tài)表示形式,其安全性影響著容器的運(yùn)行時(shí)安全。鏡像腳本安全威脅可能導(dǎo)致容器中的漏洞或惡意利用,而鏡像漏洞安全威脅涉及鏡像中軟件的CVE漏洞和惡意上傳的鏡像。

網(wǎng)絡(luò)安全風(fēng)險(xiǎn)

Docker容器的網(wǎng)絡(luò)默認(rèn)采用橋接方式連接,但容器之間的通信未進(jìn)行過(guò)濾,容易受到ARP欺騙和MAC泛洪攻擊。惡意使用容器中的內(nèi)核資源也可能影響其他容器的正常運(yùn)行。

應(yīng)用場(chǎng)景

Docker可以用來(lái)構(gòu)建和管理開(kāi)發(fā)環(huán)境,確保開(kāi)發(fā)環(huán)境的一致性和可移植性。開(kāi)發(fā)人員可以使用Docker容器在他們的本地環(huán)境中運(yùn)行應(yīng)用程序,而不會(huì)影響其他應(yīng)用程序或主機(jī)。

Docker可以用來(lái)構(gòu)建和管理測(cè)試環(huán)境,確保測(cè)試環(huán)境的一致性和可移植性。測(cè)試人員可以使用Docker容器在不同的環(huán)境中測(cè)試應(yīng)用程序,而不需要進(jìn)行任何修改。

Docker可以用來(lái)支持持續(xù)集成和持續(xù)部署流程。開(kāi)發(fā)人員可以使用Docker容器來(lái)構(gòu)建和打包應(yīng)用程序,而DevOps團(tuán)隊(duì)可以使用Docker容器來(lái)部署應(yīng)用程序到各種不同的環(huán)境中。

Docker可以用來(lái)支持微服務(wù)架構(gòu),將應(yīng)用程序拆分為多個(gè)小型服務(wù),每個(gè)服務(wù)運(yùn)行在一個(gè)獨(dú)立的Docker容器中,從而實(shí)現(xiàn)服務(wù)的解耦和獨(dú)立部署,以及不同服務(wù)之間資源的隔離。這可以使應(yīng)用程序更容易管理和擴(kuò)展,同時(shí)也可以提高可用性和可靠性。

Docker可以用來(lái)支持多租戶(hù)應(yīng)用程序,每個(gè)租戶(hù)可以運(yùn)行在一個(gè)獨(dú)立的Docker容器中。這可以使應(yīng)用程序更易于管理和隔離,同時(shí)也可以提高安全性和可靠性。

應(yīng)用實(shí)例

AWS 亞馬遜網(wǎng)站 ECR和Amazon ECR Public:AWS客戶(hù)可以使用高可用性和高性能的容器構(gòu)件注冊(cè)表,與他們的容器應(yīng)用程序一起使用。通過(guò)使用Docker官方鏡像和Amazon ECR Public,AWS客戶(hù)可以獲得高可用性和快速下載的優(yōu)勢(shì)。

Datadog:Datadog超過(guò)一半的應(yīng)用程序在容器化基礎(chǔ)設(shè)施上運(yùn)行,并且Docker Hub是容器鏡像的主要來(lái)源。數(shù)據(jù)狗被認(rèn)可為Docker認(rèn)證發(fā)布者,他們提供安全可靠的容器鏡像,用于監(jiān)控基礎(chǔ)設(shè)施和應(yīng)用程序的性能。

威睿:VMware加入了Docker Verified Publisher計(jì)劃,使開(kāi)發(fā)人員能夠通過(guò)容器訪(fǎng)問(wèn)VMware提供的工件,并安全地采用他們的開(kāi)源技術(shù)。特別是VMware Tanzu的客戶(hù)可以從更廣泛的補(bǔ)充服務(wù)中受益,以便快速推出應(yīng)用程序。

版本演進(jìn)

與其它容器技術(shù)的對(duì)比

參考資料 >

Develop faster..docker官網(wǎng).2023-05-14

Contact Docker.docker官網(wǎng).2023-06-19

..2023-06-19

Get Docker.Docker官網(wǎng).2023-05-19

docker rise fall rebirth.businessinsider.2023-05-19

Docker 1.0 Released at DockerCon.infoq.2023-06-05

Amazon Adds Docker Support to Elastic Beanstalk.infoq.2023-06-08

Everything at Google Runs in Containers.infoq.2023-06-08

Red Hat Releases Project Atomic.infoq.2023-06-08

docker compose.Docker官網(wǎng).2023-06-01

Swarm mode overview.docker官網(wǎng).2023-06-01

Open Container Initiative.OCI.2023-06-05

What is Docker Enterprise and why do we need it?.dockerlabs.2023-06-05

Release notes for previous versions.docker官網(wǎng).2023-06-08

Introducing Docker for Windows Server 2016.docker官網(wǎng).2023-06-08

Biggest Announcements of DockerCon EU 2017.autoize.2023-06-08

Docker Engine 19.03 release notes.Docker官網(wǎng).2023-06-05

Docker Now Requiring Paid Subscription for Large Businesses.infoq.2023-06-08

Pricing and Subscriptions.docker官網(wǎng).2023-06-05

Docker overview.Docker官網(wǎng).2023-06-01

Docker 架構(gòu)及工作原理.Docker官網(wǎng).2023-06-01

docker-hub verview.docker官網(wǎng).2023-06-01

docker machine.docker machine github.2023-06-01

Docker容器安全性分析與增強(qiáng)方案研究.國(guó)家保密局.2023-06-05

Docker Expands Trusted Content Offerings for Developers.Docker官網(wǎng).2023-06-05

Docker Engine release notes.Docker官網(wǎng).2023-06-05

Docker Engine 17.03 release notes.Docker官網(wǎng).2023-06-05

Docker Engine 17.09 release notes.Docker官網(wǎng).2023-06-05

Docker Engine 18.01 release notes.Docker官網(wǎng).2023-06-05

Docker Engine 20.10 release notes.Docker官網(wǎng).2023-06-05

Docker Engine 23.0 release notes.Docker官網(wǎng).2023-06-05

Docker Engine 24.0 release notes.Docker官網(wǎng).2023-06-05

Linux容器-LXC.linuxcontainers.2023-06-08

Linux.linuxcontainers.2023-06-21

Featured links.redhat.2023-06-08

rkt倉(cāng)庫(kù).github.2023-06-08

Name already in use.github.2023-06-08

生活家百科家居網(wǎng)