用了這么多年Docker,殊不知你還有這么多彎彎繞!
單體應(yīng)用拆分成微服務(wù)后,能夠?qū)崿F(xiàn)快速開(kāi)發(fā)迭代,但因?yàn)樾》?wù)太多,導(dǎo)致測(cè)試和部署的成本提高。
單體應(yīng)用中,將Spring Boot工程打包成一個(gè)war包,然后部署在Linux服務(wù)器的Tomcat中就可以了。
拆分成微服務(wù)后,修改一個(gè)需求,可能會(huì)涉及多個(gè)微服務(wù),這個(gè)時(shí)候,被修改過(guò)的代碼都需要重新測(cè)試、打包、部署、上線發(fā)布。無(wú)形之中,給現(xiàn)場(chǎng)運(yùn)維人員增加了成倍的工作壓力。
微服務(wù)通常會(huì)在共有云上創(chuàng)建ECS進(jìn)行擴(kuò)容,ECS通常只包含了基本的操作系統(tǒng)環(huán)境,沒(méi)有包含運(yùn)行java的環(huán)境jdk,就需要在ECS上安裝jdk,而且每個(gè)服務(wù)依賴的jdk版本可能也不會(huì)相同,一般情況下,都會(huì)采用jdk8,但有些喜愛(ài)前言技術(shù)的項(xiàng)目經(jīng)理,可能要試一下jdk21,畢竟也是一個(gè)長(zhǎng)期穩(wěn)定的大版本。
而容器技術(shù)可以解決上面的兩個(gè)問(wèn)題(代碼部署難、缺環(huán)境)。
時(shí)下容器技術(shù)最火的當(dāng)屬Docker,很多小伙伴也用了多年,只知道它是容器技術(shù),可以將程序和依賴打到Docker里,然后發(fā)布在Linux服務(wù)器中,就完成了程序的部署,一次構(gòu)建、到處運(yùn)行,很牛逼,至于其它的,就不知道了,也不想知道~
一、神之容器 Docker
Docker是一個(gè)開(kāi)源的應(yīng)用容器引擎,讓開(kāi)發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的鏡像中,然后發(fā)布到任何流行的Linux或Windows操作系統(tǒng)的機(jī)器上,也可以實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。
Docker屬于Linux容器的一種封裝,提供簡(jiǎn)單易用的容器使用接口。它是目前最流行的Linux容器解決方案。
一個(gè)完整的Docker由以下七個(gè)部分組成:
- Docker Client 客戶端。
- Docker Daemon 守護(hù)進(jìn)程,提供Docker Server,用于接收Docker Client的請(qǐng)求,Docker Server 通過(guò)路由Router與分發(fā)調(diào)度,找到相應(yīng)的 Handler 來(lái)執(zhí)行請(qǐng)求。
- Docker Image 鏡像,包含Distribution(分發(fā))、Layer(層)、Image(鏡像)、Registry(注冊(cè)中心)、Reference(引用)。
- Docker Driver 驅(qū)動(dòng),Docker架構(gòu)中的驅(qū)動(dòng)模塊,它主要通過(guò)與Docker守護(hù)進(jìn)程進(jìn)行交互,實(shí)現(xiàn)對(duì)Docker容器執(zhí)行環(huán)境的定制和管理。
- Docker Graph 內(nèi)部數(shù)據(jù)庫(kù),Docker Graph是Docker中的一種數(shù)據(jù)結(jié)構(gòu),用于記錄和跟蹤Docker鏡像和容器之間的關(guān)系;
- Libcontainer 函數(shù)庫(kù),Libcontainer是Docker的底層容器管理庫(kù),它提供了一組接口和函數(shù),用于創(chuàng)建和管理容器。Libcontainer直接與內(nèi)核交互,負(fù)責(zé)容器的命名空間、cgroup、網(wǎng)絡(luò)設(shè)備等底層操作。
- Docker Container 容器,Docker Container是Docker中的容器實(shí)例,它是通過(guò)Driver和Libcontainer共同協(xié)作創(chuàng)建出來(lái)的。Driver提供了容器的運(yùn)行環(huán)境定制,而Libcontainer則負(fù)責(zé)容器的具體創(chuàng)建和管理操作。
二、Docker架構(gòu)圖
- 用戶使用 Docker Client(客戶端) 與 Docker Daemon 建立通信,并發(fā)送請(qǐng)求給后者,客戶端和守護(hù)程序之間通過(guò)REST API進(jìn)行通信,可以使用UNIX套接字或網(wǎng)絡(luò)接口;
- Docker Daemon(后臺(tái)守護(hù)進(jìn)程)提供Docker Server,用于接收Docker Client的請(qǐng)求,Docker Server 通過(guò)路由Router與分發(fā)調(diào)度,找到相應(yīng)的 Handler 來(lái)執(zhí)行請(qǐng)求,Docker Daemon提供Docker Engine,Engine是Docker 架構(gòu)中的運(yùn)行引擎,在Docker Engine中,一個(gè)Job可以被認(rèn)為是內(nèi)部最基本的工作執(zhí)行單元。Docker可以做的每一項(xiàng)工作,都可以抽象為一個(gè)Job。例如,在容器內(nèi)部運(yùn)行一個(gè)進(jìn)程,這是一個(gè)Job;創(chuàng)建一個(gè)新的容器,這也是一個(gè)Job。
- Docker Image 鏡像,包含Distribution(分發(fā))、Layer(層)、Image(鏡像)、Registry(注冊(cè)中心)、Reference(引用)。
- Docker Driver 驅(qū)動(dòng),Docker架構(gòu)中的驅(qū)動(dòng)模塊,它主要通過(guò)與Docker守護(hù)進(jìn)程進(jìn)行交互,實(shí)現(xiàn)對(duì)Docker容器執(zhí)行環(huán)境的定制和管理;
- 當(dāng)需要容器鏡像時(shí),則從 Registry(注冊(cè)中心) 中下載鏡像,并通過(guò)鏡像管理驅(qū)動(dòng) Graphdriver 將下載鏡像以 Graph 的形式存儲(chǔ);
- Docker Graph 內(nèi)部數(shù)據(jù)庫(kù),Docker Graph是Docker中的一種數(shù)據(jù)結(jié)構(gòu),用于記錄和跟蹤Docker鏡像和容器之間的關(guān)系;
- 一個(gè) Repository 表示某類鏡像的倉(cāng)庫(kù),同一個(gè) Repository 內(nèi)的鏡像用 Tag 來(lái)區(qū)分,一個(gè) Registry 包含多個(gè)Repository,一個(gè) Repository 包含同類型的多個(gè) Image,并存儲(chǔ)著每一個(gè)容器鏡像的具體信息;GraphDB是一個(gè)基于SQLite的小型圖數(shù)據(jù)庫(kù),記錄容器鏡像之間的關(guān)系;
- rootfs是Docker容器的根文件系統(tǒng),它位于bootfs之上,表現(xiàn)為Docker容器的根目錄,包含基本的文件和目錄。在Docker中,rootfs由內(nèi)核掛載為“只讀”模式,而后通過(guò)“聯(lián)合掛載”技術(shù)額外掛載一個(gè)“可寫”層;
- 通過(guò) Networkdriver 完成Docker容器網(wǎng)絡(luò)環(huán)境的配置,其中包括Docker啟動(dòng)時(shí)為Docker環(huán)境創(chuàng)建網(wǎng)橋等功能;
- Docker Execdriver是Docker容器的執(zhí)行驅(qū)動(dòng),負(fù)責(zé)創(chuàng)建容器運(yùn)行命名空間,負(fù)責(zé)容器資源使用的統(tǒng)計(jì)與限制,負(fù)責(zé)容器內(nèi)部進(jìn)程的真正運(yùn)行等;
- Libcontainer是Docker的底層容器管理庫(kù),它提供了一組接口和函數(shù),用于創(chuàng)建和管理容器。Libcontainer直接與內(nèi)核交互,負(fù)責(zé)容器的命名空間、cgroup、網(wǎng)絡(luò)設(shè)備等底層操作;
- Docker Container是Docker中的容器實(shí)例,它是通過(guò)Driver和Libcontainer共同協(xié)作創(chuàng)建出來(lái)的。Driver提供了容器的運(yùn)行環(huán)境定制,而Libcontainer則負(fù)責(zé)容器的具體創(chuàng)建和管理操作。Docker Container是Docker架構(gòu)中服務(wù)交付的最終體現(xiàn)形式。實(shí)現(xiàn)“一次構(gòu)建,到處運(yùn)行”的目標(biāo),大大提高了應(yīng)用程序的部署效率和可移植性。
1、Docker Client 客戶端
Docker Client是Docker的客戶端工具,也被稱為Docker命令行界面(CLI)。它是用戶與Docker平臺(tái)進(jìn)行交互的主要方式。
Docker Client 的主要作用如下:
- 用戶交互界面:Docker Client提供了用戶友好的命令行交互界面,用戶可以通過(guò)輸入命令來(lái)執(zhí)行各種Docker操作,例如創(chuàng)建容器、啟動(dòng)容器、停止容器、構(gòu)建鏡像等。
- 容器管理:通過(guò)Docker Client,用戶可以方便地管理Docker容器??梢詣?chuàng)建新的容器、啟動(dòng)、停止、重啟容器,并且還可以查看容器的日志、狀態(tài)等信息。
- 鏡像管理:Docker Client也允許用戶管理Docker鏡像。用戶可以搜索、下載、構(gòu)建、刪除鏡像等操作,以滿足應(yīng)用程序部署的需求。
- 資源配置:用戶可以通過(guò)Docker Client配置容器的運(yùn)行資源,例如CPU、內(nèi)存等。這樣可以確保容器在運(yùn)行時(shí)具有合適的資源配置。
- 網(wǎng)絡(luò)通信:Docker Client可以與Docker Daemon進(jìn)行通信,發(fā)送請(qǐng)求并接收響應(yīng)。它使用REST API或其他通信協(xié)議與Docker Daemon進(jìn)行交互,從而實(shí)現(xiàn)對(duì)Docker容器的遠(yuǎn)程管理。
Docker Client是用戶與Docker平臺(tái)進(jìn)行交互的重要工具。它提供了命令行界面,讓用戶能夠方便地管理Docker容器和鏡像,并進(jìn)行資源配置和網(wǎng)絡(luò)通信等操作。
2、Docker Daemon 守護(hù)進(jìn)程
Docker Daemon是Docker的守護(hù)進(jìn)程,它是Docker平臺(tái)的后臺(tái)服務(wù)組件,充當(dāng)服務(wù)器角色。
Docker Daemon 的主要作用如下:
- 容器管理:Docker Daemon負(fù)責(zé)創(chuàng)建、啟動(dòng)、停止、刪除和管理Docker容器。它接收來(lái)自Docker客戶端的請(qǐng)求,并根據(jù)請(qǐng)求執(zhí)行相應(yīng)的容器管理操作。
- 鏡像管理:Docker Daemon也管理Docker鏡像。它可以下載、上傳、構(gòu)建和刪除鏡像,并管理鏡像的版本控制和安全性。
- 網(wǎng)絡(luò)資源管理:Docker Daemon負(fù)責(zé)創(chuàng)建和管理Docker容器的網(wǎng)絡(luò)環(huán)境。它配置和管理容器的網(wǎng)絡(luò)設(shè)置,確保容器之間的通信和互相訪問(wèn)。
- 數(shù)據(jù)卷管理:Docker Daemon還管理容器的數(shù)據(jù)卷,用于持久化存儲(chǔ)容器中的數(shù)據(jù),保證數(shù)據(jù)的可靠性和持久性。
Docker Daemon是Docker平臺(tái)的核心組件,提供容器、鏡像、網(wǎng)絡(luò)和數(shù)據(jù)卷的管理功能。它扮演著守護(hù)進(jìn)程的角色,確保Docker平臺(tái)的正常運(yùn)行和管理。
3、鏡像(Image)
在Docker鏡像中,Distribution、Layer、Image、Registry和Reference各自扮演了重要角色。
- Distribution(分發(fā)):通常涉及到Docker鏡像的分發(fā)和運(yùn)輸。Docker鏡像可以通過(guò)不同的方式進(jìn)行分發(fā),例如直接從Registry下載,或者通過(guò)特定的工具導(dǎo)入和導(dǎo)出;
- Layer(層):Docker鏡像由多個(gè)layer層組成,每層都是一個(gè)只讀的文件系統(tǒng)。這種分層設(shè)計(jì)可以實(shí)現(xiàn)共享和復(fù)用,提高效率。當(dāng)鏡像中的文件發(fā)生變化時(shí),Docker只會(huì)下載發(fā)生變化的層,而不是整體鏡像,節(jié)省了時(shí)間和寬帶;
- Image(鏡像):鏡像是Docker的核心,它是運(yùn)行容器的基礎(chǔ)。鏡像包含了運(yùn)行應(yīng)用程序的所有文件和依賴,是一個(gè)只讀模板,可以通過(guò)鏡像創(chuàng)建新的容器實(shí)例;
- Registry(注冊(cè)中心):Registry是存儲(chǔ)和管理Docker鏡像的服務(wù)器。它是用戶上傳、下載、管理Docker鏡像的地方。例如Dokcer Hub就是一個(gè)公共的Registry;
- Reference(引用):引用指的是Docker鏡像的一種標(biāo)識(shí),通過(guò)引用,用戶可以指定需要操作的特定鏡像;
4、Docker Driver 驅(qū)動(dòng)模塊
Docker Driver是Docker的驅(qū)動(dòng)模塊,主要負(fù)責(zé)驅(qū)動(dòng)Docker容器的運(yùn)行。它通過(guò)與操作系統(tǒng)的交互,實(shí)現(xiàn)對(duì)Docker容器的創(chuàng)建、啟動(dòng)、運(yùn)行和管理等操作。
Docker Driver 的主要作用如下:
- 容器創(chuàng)建與啟動(dòng):Driver負(fù)責(zé)根據(jù)用戶的指令創(chuàng)建新的容器實(shí)例,并啟動(dòng)它們。它會(huì)與底層操作系統(tǒng)交互,設(shè)置好容器運(yùn)行所需的各種環(huán)境和資源。
- 容器運(yùn)行環(huán)境定制:Driver可以根據(jù)用戶的需求定制容器的運(yùn)行環(huán)境。這包括網(wǎng)絡(luò)配置、存儲(chǔ)掛載、進(jìn)程管理等,確保容器在特定的環(huán)境中按照預(yù)期運(yùn)行。
- 容器狀態(tài)管理:Driver維護(hù)著容器的狀態(tài)信息,包括容器的運(yùn)行狀態(tài)、資源使用情況等。它可以提供容器狀態(tài)的查詢和監(jiān)控功能,讓用戶了解容器的實(shí)時(shí)狀態(tài)。
- 容器資源管理:Driver還負(fù)責(zé)管理容器的資源,如CPU、內(nèi)存、磁盤空間等。它可以對(duì)容器使用的資源進(jìn)行限制和控制,確保容器不會(huì)超出預(yù)設(shè)的資源限制。
Docker Driver是Docker中非常重要的組件,它通過(guò)與操作系統(tǒng)的交互,實(shí)現(xiàn)了Docker容器的創(chuàng)建、運(yùn)行和管理等功能,為Docker平臺(tái)的正常運(yùn)行提供了底層支持。
5、Docker Graph內(nèi)部數(shù)據(jù)庫(kù)
Docker Graph是Docker中的一種數(shù)據(jù)結(jié)構(gòu),用于記錄和跟蹤Docker鏡像和容器之間的關(guān)系。
Docker Graph 的主要作用如下:
- 關(guān)系追蹤:Docker Graph能夠記錄容器和鏡像之間的關(guān)系,包括哪個(gè)鏡像被用來(lái)創(chuàng)建哪個(gè)容器,容器之間是否存在依賴關(guān)系等。這種關(guān)系追蹤使得用戶能夠更好地理解和管理容器與鏡像之間的關(guān)聯(lián)。
- 資源管理:通過(guò)Docker Graph,用戶可以更方便地進(jìn)行資源管理,例如查找和刪除不再需要的鏡像和容器。它提供了一種全局視圖,幫助用戶了解整個(gè)Docker環(huán)境中的資源利用情況。
- 性能優(yōu)化:Docker Graph可以提供一些性能方面的優(yōu)化。通過(guò)分析和理解Graph中的關(guān)系,Docker可以智能地選擇最合適的鏡像層和緩存策略,從而提高鏡像構(gòu)建和容器啟動(dòng)的速度。
Docker Graph在Docker的較新版本中可能已經(jīng)被替代或集成到其他組件中,因此具體實(shí)現(xiàn)和用法可能會(huì)因版本而異。
6、Docker Libcontainer函數(shù)庫(kù)
Docker Libcontainer函數(shù)庫(kù)中包含:
- namespaces:namespaces技術(shù)用于實(shí)現(xiàn)Docker容器之間的隔離。通過(guò)namespaces,可以實(shí)現(xiàn)網(wǎng)絡(luò)、通信、文件、權(quán)限等對(duì)象的隔離,確保容器在獨(dú)立的環(huán)境中運(yùn)行,并且相互之間不會(huì)產(chǎn)生干擾。這種隔離機(jī)制有助于提高容器的安全性和穩(wěn)定性。
- Cgroups:Cgroups(Control Groups)用于對(duì)Docker容器所占用的系統(tǒng)資源進(jìn)行限制和管理。它可以控制容器的CPU、內(nèi)存、磁盤I/O等資源的使用量,確保容器不會(huì)消耗過(guò)多的資源,從而防止系統(tǒng)過(guò)載或資源耗盡。
- netlink:netlink是Linux內(nèi)核提供的一種用于內(nèi)核與用戶空間進(jìn)程之間通信的機(jī)制。在Docker Libcontainer中,netlink主要用于完成Docker容器的網(wǎng)絡(luò)環(huán)境配置和創(chuàng)建。它使得容器能夠與網(wǎng)絡(luò)進(jìn)行交互,實(shí)現(xiàn)網(wǎng)絡(luò)通信和功能。
- capabilities:capabilities機(jī)制用于在Docker容器內(nèi)部對(duì)進(jìn)程的權(quán)限進(jìn)行更精細(xì)的控制。它將超級(jí)用戶root的權(quán)限分割成各種不同的capabilities權(quán)限,允許根據(jù)需求將特定的權(quán)限授予容器內(nèi)的進(jìn)程。這種權(quán)限管理方式增強(qiáng)了容器的安全性,防止?jié)撛诘陌踩┒春凸簟?/li>
這些組件和技術(shù)在Libcontainer中協(xié)作,共同實(shí)現(xiàn)了Docker容器的隔離、資源管理、網(wǎng)絡(luò)通信和權(quán)限控制等功能,為Docker平臺(tái)的穩(wěn)定性和安全性提供了重要支持。
7、Docker Container 容器實(shí)例
Docker Container是Docker中的容器實(shí)例,它是通過(guò)Driver和Libcontainer共同協(xié)作創(chuàng)建出來(lái)的。Driver提供了容器的運(yùn)行環(huán)境定制,而Libcontainer則負(fù)責(zé)容器的具體創(chuàng)建和管理操作。Docker Container是Docker架構(gòu)中服務(wù)交付的最終體現(xiàn)形式。實(shí)現(xiàn)“一次構(gòu)建,到處運(yùn)行”的目標(biāo),大大提高了應(yīng)用程序的部署效率和可移植性。
Docker Container 的主要作用如下:
- 應(yīng)用程序的隔離運(yùn)行:Docker Container提供了輕量級(jí)、獨(dú)立的運(yùn)行環(huán)境,使得應(yīng)用程序可以在隔離的容器中運(yùn)行,避免不同應(yīng)用之間的干擾和沖突;
- 環(huán)境一致性:因?yàn)镈ocker Container包含了應(yīng)用程序及其依賴項(xiàng),所以可以確保在任何環(huán)境中都能以相同的方式運(yùn)行,提高了應(yīng)用的可移植性和穩(wěn)定性;
- 資源控制和隔離:Docker Container允許對(duì)每個(gè)容器進(jìn)行資源限制,例如CPU、內(nèi)存等。這樣可以防止某個(gè)容器消耗過(guò)多資源,確保系統(tǒng)的穩(wěn)定運(yùn)行;
- 快速部署和擴(kuò)展:Docker Container的輕量級(jí)特性使得它可以快速啟動(dòng)和停止,非常適合于云計(jì)算和微服務(wù)架構(gòu)中的快速部署和橫向擴(kuò)展;
- 版本控制和回滾:通過(guò)標(biāo)記和版本控制,可以輕松管理和回滾容器的版本,提高了應(yīng)用程序的版本管理和部署的靈活性;
- 安全性增強(qiáng):Docker Container提供了隔離的運(yùn)行環(huán)境,可以減少系統(tǒng)漏洞和攻擊面,提高應(yīng)用程序的安全性。
Docker Container是Docker技術(shù)的核心組件之一,它提供了輕量級(jí)、隔離的運(yùn)行環(huán)境,用于部署、運(yùn)行和管理應(yīng)用程序。它的出現(xiàn)改變了傳統(tǒng)應(yīng)用部署和運(yùn)維的方式,提高了開(kāi)發(fā)、測(cè)試、運(yùn)維的效率和質(zhì)量。
三、Docker安裝
1、卸載Docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、需要的安裝包
yum install -y yum-utils
3、設(shè)置鏡像倉(cāng)庫(kù)
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
用國(guó)內(nèi)的。
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新軟件包索引。
yum mackecache fast
4、安裝Docker相關(guān)
ce社區(qū)版,ee企業(yè)版,推薦安裝企業(yè)版。
yum install docker-ce docker-ce-cli containerd.io。
5、啟動(dòng)Docker
systemctl start docker
6、使用docker version查看版本
7、啟動(dòng)hello world鏡像
docker run hello-world
8、卸載
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
四、run的流程和docker原理
1、run的流程
2、與傳統(tǒng)虛擬化方式對(duì)比
這就是Docker為何比虛擬化更快的原因,Docker有著比虛擬機(jī)更少的抽象層,docker利用的是宿主機(jī)的內(nèi)核,VM需要的是Guest OS。
五、Docker鏡像常用命令
1、基本命令
docker version
docker info
docker 命令 --help #萬(wàn)能命令
docker images。
解釋:
- REPOSITORY:鏡像的倉(cāng)庫(kù)源。
- TAG:鏡像的標(biāo)簽。
- IMAGE ID:鏡像的ID。
- CREATE:鏡像的創(chuàng)建時(shí)間。
- SIZE:鏡像的大小。
可選項(xiàng)
- -a:列出全部的鏡像。
- -q:只顯示鏡像的ID。
2、搜索鏡像
docker search。
可選項(xiàng)
--filter-STATUS-3000 #搜索大于3000的。
3、下載鏡像
指定版本下載。
docker pull 鏡像名[:tag]。
4、刪除鏡像
docker rmi -f 鏡像id。
六、docker容器常用命令
1、下載容器
docker pull centos。
2、docker run [可選參數(shù)] image
參數(shù)說(shuō)明:
- --name:容器名稱。
- -d:后臺(tái)方式運(yùn)行。
- -it:使用交互方式運(yùn)行,進(jìn)入容器查看內(nèi)容(例如:docker run -it centos /bin/bash)。
- -p :指定容器的端口號(hào) -p 8080:8080(主機(jī)端口:容器端口)。
3、列出所有的運(yùn)行的容器
docker ps [參數(shù)]。
- -a:列出當(dāng)前正在運(yùn)行的容器。
- -n :顯示最近創(chuàng)建的容器。
- -q :只顯示容器的編號(hào)。
例如:docker ps -aq,顯示當(dāng)前正在運(yùn)行的容器的編號(hào)。
4、刪除容器
- docker rm 容器id :不能刪除正在運(yùn)行的容器。
- docker rm -f $(docker ps -a) :刪除所有的容器。
- docker ps -a -q|xargs docker rm :刪除所有的容器。
5、啟動(dòng)和停止容器
- docker start 容器id。
- docker restart 容器id。
- docker stop 容器id。
- docker kill 容器id,強(qiáng)制停止。
6、進(jìn)入當(dāng)前正在運(yùn)行的容器
- 方式一:docker exec -it 容器id /bin/bash,進(jìn)入容器后開(kāi)啟一個(gè)新的終端(常用)。
- 方式二:docker attach 容器id,進(jìn)入容器當(dāng)前正在執(zhí)行的終端。
7、從容器內(nèi)拷貝文件到主機(jī)
docker cp 容器id:容器內(nèi)路徑 主機(jī)路徑。
例如:docker cp 容器id:/home/test.java /home。
8、其它常用命令
后臺(tái)啟動(dòng)容器 -d。
查看日志命令。
docker logs --help。
顯示指定行數(shù)的日志:
docker logs -tf --tail 10 容器id。
-f:內(nèi)容,,,-t:時(shí)間。
例如:循環(huán)執(zhí)行。
docker run -d centos /bin/sh -c "while;do echo hello world;sleep 1;done"。
顯示容器中的進(jìn)行信息。
查看docker內(nèi)部的進(jìn)程信息:docker top 容器id。
查看容器的元數(shù)據(jù)。
docker inspect --help。
顯示容器的所有信息:
docker inspect 容器id。
七、docker常用命令小結(jié)
常用命令 | 命令含義 |
attach | 當(dāng)前shell下attach連接指定運(yùn)行鏡像 |
build | 通過(guò)Dockerfile定制鏡像 |
commit | 提交當(dāng)前容器為新的鏡像 |
cp | 從容器中拷貝指定文件或者目錄到宿主機(jī)中 |
create | 創(chuàng)建一個(gè)新的容器,同run 但不啟動(dòng)容器 |
diff | 查看docker容器變化 |
events | 從docker服務(wù)獲取容器實(shí)時(shí)事件 |
exec | 在已存在的容器上運(yùn)行命令 |
export | 導(dǎo)出容器的內(nèi)容流作為一個(gè)tar歸檔文件(對(duì)應(yīng)import) |
history | 展示一個(gè)鏡像形成歷史 |
images | 列出系統(tǒng)當(dāng)前鏡像 |
import | 從tar包中的內(nèi)容創(chuàng)建一個(gè)新的文件系統(tǒng)映像(對(duì)應(yīng)export) |
info | 顯示系統(tǒng)相關(guān)信息 |
inspect | 查看容器詳細(xì)信息 |
kill | 強(qiáng)制停止指定docker容器 |
load | 從一個(gè)tar包中加載一個(gè)鏡像(對(duì)應(yīng)save) |
login | 注冊(cè)或者登陸一個(gè)docker源服務(wù)器 |
logout | 從當(dāng)前Docker registry退出 |
logs | 輸出當(dāng)前容器日志信息 |
pause | 暫停容器 |
port | 查看映射端口對(duì)應(yīng)的容器內(nèi)部源端口 |
ps | 列出容器列表 |
pull | 從docker鏡像源服務(wù)器拉取指定鏡像或者庫(kù)鏡像 |
push | 推送指定鏡像或者庫(kù)鏡像至docker源服務(wù)器 |
rename | 重命名容器 |
restart | 重啟運(yùn)行的容器 |
rm | 移除一個(gè)或者多個(gè)容器 |
rmi | 移除一個(gè)或多個(gè)鏡像(無(wú)容器使用該鏡像才可以刪除,否則需要?jiǎng)h除相關(guān)容器才可以繼續(xù)或者-f強(qiáng)制刪除) |
run | 創(chuàng)建一個(gè)新的容器并運(yùn)行一個(gè)命令 |
save | 保存一個(gè)鏡像為一個(gè)tar包(對(duì)應(yīng)load) |
search | 在docker hub中搜索鏡像 |
start | 啟動(dòng)容器 |
stats | 統(tǒng)計(jì)容器使用資源 |
stop | 停止容器 |
tag | 給鏡像打標(biāo)簽 |
top | 查看容器中運(yùn)行的進(jìn)程信息 |
unpause | 取消暫停容器 |
version | 查看容器版本號(hào) |
wait | 截取容器停止時(shí)的退出狀態(tài)值 |