溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Docker的相關(guān)知識(shí)點(diǎn)有哪些

發(fā)布時(shí)間:2021-12-13 11:25:43 來源:億速云 閱讀:135 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“Docker的相關(guān)知識(shí)點(diǎn)有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Docker的相關(guān)知識(shí)點(diǎn)有哪些”吧!

一、歡迎來到Docker世界

A.什么是Docker

1.容器:防止對受保護(hù)資源的訪問,隔離后有資源,除非明確允許

2.容器不是虛擬化:運(yùn)行在Docker容器中的程序接口和主機(jī)的Linux內(nèi)核直接打交道,可以幫助使用已經(jīng)內(nèi)置到操作系統(tǒng)中的容器技術(shù)

3.在隔離的容器中運(yùn)行軟件:使用Linux命名空間和cgroups

4.分發(fā)容器:通過Docker鏡像(是一個(gè)容器中運(yùn)行程序的所有文件的捆綁快照)

B.Docker解決了什么

1.組織有序:Docker保留了通過容器和鏡像進(jìn)行隔離的所有一切

2.提高可移植性:

  • 將軟件以前無法使用的地方徹底解鎖

  • 可在任何系統(tǒng)上運(yùn)行相同的軟件

  • 軟件維護(hù)人員可以集中精力在單一平臺(tái)和一套依賴關(guān)系中編寫他們的軟件

3.保護(hù)你的機(jī)器:容器限制了一個(gè)程序?qū)ζ渌绦驇淼挠绊懛秶?、可訪問的數(shù)據(jù)和系統(tǒng)資源的影響范圍

C.為什么Docker如此重要

1.Docker提供了所謂的抽象:允許你以簡化的方式處理復(fù)雜的工作,在使用Docker的前提下,不用再專注于與安裝應(yīng)用程序相關(guān)的復(fù)雜性和細(xì)節(jié) ,只考慮我們想安裝什么樣的軟件

2.有一個(gè)重要的推廣使用容器和Docker的軟件社區(qū)

3.為PC端所做的像應(yīng)用商店 為移動(dòng)設(shè)備所做的一樣

4.終于開始看到通過操作系統(tǒng)實(shí)現(xiàn)的更好、更先進(jìn)的隔離功能

D.何時(shí)何處使用Docker

1.只能運(yùn)行Linux操作系統(tǒng)上的應(yīng)用程序,限定在Linux服務(wù)器或桌面上運(yùn)行的軟件

2.每天的日常任務(wù)使用Docker有助于保持計(jì)算機(jī)的清潔

3.容器不能改善程序的安全,特別當(dāng)不得不用最高權(quán)限訪問計(jì)算機(jī)的時(shí)候

二、在容器中運(yùn)行軟件

A.從Docker命令行工具獲得幫助

1.docker help

2.docker help cp

B.控制容器:建立一個(gè)網(wǎng)站的監(jiān)控器

1.守護(hù)進(jìn)程:意味著它們將在后臺(tái)運(yùn)行,而不連接到任何輸入或輸出流,非常適合那些在后臺(tái)靜默運(yùn)行的程序,這些程序被稱為守護(hù)程序,使用—detach或-d

2.交互進(jìn)程:—interactive或-I,—tty或-t

C.已解決的問題和PID命名空間

1.每一個(gè)運(yùn)行的程序或進(jìn)程,在Linux機(jī)器都有一個(gè)唯一編號(hào),叫作進(jìn)程標(biāo)識(shí)符(PID),一個(gè)PID命名空間是一組識(shí)別進(jìn)程的數(shù)字。Linux提供了工具可以創(chuàng)建多個(gè)PID命名空間,每個(gè)命名空間擁有一套完整的PID

D.消除元數(shù)據(jù)沖突:構(gòu)建一個(gè)網(wǎng)站農(nóng)場

1.docker create —cidfile /xxx/cid,創(chuàng)建但不運(yùn)行,—cidfile保存cid到指定目錄文件

2.容器需要以其依賴關(guān)系鏈相反的順序來啟動(dòng),—link,循環(huán)依賴是不可能使用Docker容器來構(gòu)建的

E.構(gòu)建與環(huán)境無關(guān)的系統(tǒng)

1.Docker有三個(gè)特定功能建立與環(huán)境無關(guān)的系統(tǒng):

  • 只讀文件系統(tǒng):容器不能更改它所包含的文件,—read-only

  • 環(huán)境變量注入:環(huán)境變量來傳達(dá)相關(guān)信息,包括容器的守護(hù)選項(xiàng)、容器的主機(jī)名,以及他在容器中運(yùn)行程序的實(shí)用信息,—env或-e

  • 存儲(chǔ)卷

*運(yùn)行run -d --name wp3 --link wpdb:mysql -p 80 -v /run/lock/apache2/ -v /run/apache2 -v /tmp/ --read-only wordpress:4,書中少了-v /tmp/

F.建立持久化的容器

1.Docker容器四種狀態(tài):運(yùn)行、已暫停、重新啟動(dòng)、已退出

2.自動(dòng)重啟容器:—restart

3.使用init和supervisor進(jìn)程維持容器的運(yùn)行狀態(tài):init、systemd、runit、upstart、supervisord

G.清理

1.列出所有容器:docker ps -a

2.刪除:docker rm xxx

3.快速全部消除:docker rm -vf $(docker ps -a -q)

三、軟件安裝的簡化

A.選擇所需的軟件

1.倉庫是一個(gè)有名字的鏡像桶,名字類似于URL

2.標(biāo)簽是唯一指定鏡像的重要途徑,也是一種創(chuàng)建有用別名的便利方法

B.查找和安裝軟件

1.docker search xxx

2.注冊服務(wù)器,使用戶可不用考慮鏡像存儲(chǔ)和運(yùn)輸?shù)膯栴}

3.docker load -i,加載鏡像文件,docker save,把鏡像保存到文件

4.docker rmi,刪除鏡像文件

C.安裝文件和隔離

1.鏡像層,一個(gè)鏡像層至少和一個(gè)其他的鏡像相關(guān)聯(lián)

2.鏡像維護(hù)著父/子關(guān)系。在這些依賴關(guān)系中,從父層構(gòu)建形成新的一層。容器中的文件是鏡像所創(chuàng)建容器的所有層合集。鏡像可以與任何其他鏡像有依賴關(guān)系,包括為不同的所有者提供不同倉庫的鏡像

3.Union文件系統(tǒng):容器中正在運(yùn)行的程序?qū)︾R像分層一無所知,仿佛該操作不是在容器中或操作鏡像上運(yùn)行的。從容器角度看,它具有由鏡像所提供文件的獨(dú)占副本。其他工具還有MNT命名空間和chroot系統(tǒng)調(diào)用。

4.Linux內(nèi)核提供了MNT系統(tǒng)命名空間,當(dāng)docker創(chuàng)建一個(gè)容器,這個(gè)新的容器會(huì)有自己的MNT命名空間,以及為鏡像創(chuàng)建新的掛載點(diǎn)

5.chroot通過容器上下文來構(gòu)建鏡像的根文件系統(tǒng)??梢苑乐惯\(yùn)行于容器內(nèi)的任何程序與主機(jī)系統(tǒng)的其他部分有所關(guān)聯(lián)

6.分層文件系統(tǒng)及其工具的優(yōu)點(diǎn):

  • 公共層僅需安裝一次

  • 分層提供了用于依賴管理和隔離的工具

  • 很容易地構(gòu)建專業(yè)的軟件,因?yàn)槟阒灰谀硞€(gè)基本鏡像上做些細(xì)微的變化就可以了

7.Union文件系統(tǒng)的不足:

  • 不同的文件系統(tǒng)對于文件屬性、大小、名稱和字符都有不同的規(guī)則

  • Union文件系統(tǒng)使用一種稱為寫時(shí)復(fù)制的模式,這使得內(nèi)存映射文件(mmap()的系統(tǒng)調(diào)用)的實(shí)現(xiàn)比較困難

8.使用info命令來決定安裝哪些文件系統(tǒng)

四、持久化存儲(chǔ)和卷間狀態(tài)共享

A.存儲(chǔ)卷的簡介

1.存儲(chǔ)卷是容器目錄樹上的掛載點(diǎn),其中一部分主機(jī)目錄樹已經(jīng)被掛載了

2.從語義上來說,存儲(chǔ)卷是一個(gè)數(shù)據(jù)分割和共享的工具,有一個(gè)與容器無關(guān)的范圍或生命周期

3.鏡像適合打包和分發(fā)相對靜態(tài)的文件,如程序;存儲(chǔ)卷則持有動(dòng)態(tài)或?qū)iT數(shù)據(jù)。這種區(qū)別使得鏡像可重用,數(shù)據(jù)也可以簡單分享

B.存儲(chǔ)卷的類型

1.綁定掛載卷

  • 指向主機(jī)文件系統(tǒng)上用戶指定的位置,在主機(jī)提供的文件或目錄需要掛載到容器的特定位置時(shí),非常有用

  • 使用-v(—volume)選項(xiàng)和位置映射來創(chuàng)建綁定掛載點(diǎn),映射以冒號(hào)分隔,映射鍵(冒號(hào)前)是主機(jī)文件系統(tǒng)上的一個(gè)絕對路徑,鍵值(冒號(hào)后)是容器中掛載的目標(biāo)存儲(chǔ)位置

  • run -d --name bmweb -v ~/MyProject/docker/4:/usr/local/apache2/htdocs -p 8080:80 httpd

  • 可以添加:ro將掛載卷和存儲(chǔ)卷設(shè)為只讀

  • ~/MyProject/docker/4:/usr/local/apache2/htdocs:ro

  • 兩個(gè)問題:將可移植容器綁定到特定主機(jī)的文件系統(tǒng);創(chuàng)造了與其他容器發(fā)生沖突的機(jī)會(huì)

  • 綁定掛載卷比較適合需要使用特殊掛載點(diǎn)的工作站或機(jī)器,在通用平臺(tái)或硬件池避免這類綁定

2.Docker管理卷:使用管理卷是一種在文件系統(tǒng)特定位置解耦卷的方法

C.共享存儲(chǔ)卷

1.—volumes-from標(biāo)志,復(fù)制任何本卷所引用的源容器到新的容器中,復(fù)制卷始終具有相同的掛載點(diǎn)

2.有三種情況下不能使用—volumes-from:

  • 如果你構(gòu)建的容器需要共享卷掛載到不同的位置,就不能使用

  • 源卷之間彼此沖突,或者有新的卷規(guī)格

  • 如果你需要更改卷的寫權(quán)限,就不能使用

D.管理卷的生命周期

1.管理卷的生命周期獨(dú)立于任何容器,但截至目前,你只能通過容器來引用它們

2.管理卷是二等實(shí)體,你沒有辦法分享或刪除特定的管理卷,因?yàn)槟銢]有辦法指定一個(gè)管理卷,如果你不使用綁定掛載卷,只創(chuàng)建了管理存儲(chǔ)卷的話,那么只能通過它們的容器來區(qū)分

3.區(qū)分存儲(chǔ)卷最好的方法是為每個(gè)管理卷定義一個(gè)容器

4.使用-v運(yùn)行docker rm命令將試圖刪除目標(biāo)容器中引用的任何管理卷,如果刪除每一個(gè)已引用被處理卷的容器,但沒有使用-v標(biāo)志,就會(huì)產(chǎn)生孤立卷,移除孤立卷需要一系列手工操作

E.存儲(chǔ)卷的高級容器模式

1.卷容器模式:一個(gè)容器,只是提供卷的句柄,不需要運(yùn)行,因?yàn)橥V箷r(shí)容器仍能保證存儲(chǔ)卷的引用

2.卷容器對于數(shù)據(jù)句柄的維護(hù)非常重要,即使單個(gè)容器對數(shù)據(jù)具有一定的獨(dú)占訪問權(quán)限,這些句柄仍使其輕松地備份、恢復(fù)和遷移數(shù)據(jù)

3.當(dāng)你控制并能夠使掛載點(diǎn)的命名慣例標(biāo)準(zhǔn)化,那么存儲(chǔ)卷容器將會(huì)最有用,這是因?yàn)槊恳粋€(gè)容器從卷容器復(fù)制卷并繼承了掛載點(diǎn)的定義,具有特定要求的鏡像應(yīng)清楚地傳達(dá)其文檔中的內(nèi)容或找到一種可編程的方法

4.數(shù)據(jù)打包的存儲(chǔ)卷容器:將容器中的數(shù)據(jù)打包以此增加其價(jià)值,它描述了鏡像是如何被用于分發(fā)靜態(tài)資源,比如在由其他鏡像構(gòu)建的容器中使用的配置或代碼。數(shù)據(jù)打包的卷容器將鏡像中的靜態(tài)內(nèi)容復(fù)制到其定義的存儲(chǔ)卷,這些容器可用于分發(fā)關(guān)鍵架構(gòu)信息

5.多態(tài)工具就是以一致性的方式進(jìn)行交互,但可能有幾個(gè)實(shí)現(xiàn),分別做不同的事情,使用存儲(chǔ)卷,可以注入不同的行為到容器中,而無需修改其鏡像

五、網(wǎng)絡(luò)訪問

A.網(wǎng)絡(luò)相關(guān)背景知識(shí)

B.Docker的網(wǎng)絡(luò)

1.Docker關(guān)心兩種類型的網(wǎng)絡(luò):單主機(jī)虛擬網(wǎng)絡(luò)和多主機(jī)虛擬網(wǎng)絡(luò)。本地虛擬網(wǎng)絡(luò)用來提供容器的隔離。多主機(jī)虛擬網(wǎng)絡(luò)構(gòu)建了一個(gè)抽象的覆蓋網(wǎng)絡(luò),在這個(gè)網(wǎng)絡(luò)中,任何容器相對于網(wǎng)絡(luò)上的其他容器都擁有獨(dú)立的、可路由的IP地址

2.Docker使用操作系統(tǒng)的底層特性構(gòu)建了一個(gè)特殊的、可定制的虛擬網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),每個(gè)容器各自擁有一個(gè)本地回環(huán)接口和一個(gè)分享的以太網(wǎng)接口,其中以太網(wǎng)接口連接著在主機(jī)命名空間上的另一個(gè)虛擬接口

3.四種網(wǎng)絡(luò)容器原型:Closed容器、Joined容器、Bridged容器、Open容器

C.Closed容器

1.運(yùn)行在這種容器中的進(jìn)程只能夠訪問本地回環(huán)接口,如果進(jìn)程只需要和本身或者和其他本地進(jìn)程通信的話,選擇這一種是非常合適的

2.在docker run命令后添加—net none作為參數(shù)來告訴Docker創(chuàng)建一個(gè)Closed容器

D.Bridged容器

1.擁有兩個(gè)接口,一個(gè)私有的本地回環(huán)接口,另外一個(gè)私有接口通過網(wǎng)橋連接到主機(jī)的其他容器

2.默認(rèn)或使用—net bridge選項(xiàng)

3.使用—hostname選項(xiàng),可以設(shè)置一個(gè)新容器的主機(jī)名;使用—dns設(shè)置DNS服務(wù)器ip;—dns-search允許你指定一個(gè)DNS查找 域,這個(gè)查找域就像host名的一個(gè)默認(rèn)后綴;—add-host,能自定義從主機(jī)名到IP地址的映射關(guān)系

4.所有的自定義轉(zhuǎn)換關(guān)系都保存在容器中的/etc/hosts文件中

5.Bridged容器默認(rèn)不能夠被主機(jī)網(wǎng)絡(luò)訪問,被主機(jī)的防火墻保護(hù)了起來,默認(rèn)的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)沒有提供任何從主機(jī)外部接口到容器接口的路由

6.-p或—publish選項(xiàng),能夠在主機(jī)網(wǎng)絡(luò)棧上的端口和容器端口之間創(chuàng)建映射關(guān)系;使用-P或—publish-all,會(huì)告訴Docker daemon去創(chuàng)建作用于容器所有的端口,將容器的商品都暴露出去;—expose選項(xiàng),能設(shè)置容器想要開放的端口;docker port 命令會(huì)輸出一個(gè)列表,每一行對應(yīng)一個(gè)端口映射

7.默認(rèn)情況下,容器對本地的其他容器是完全開放的;使用docker -d —icc=false可以選擇關(guān)閉容器之間的網(wǎng)絡(luò)連接

8.docker -d —big “ip”可以設(shè)置docker創(chuàng)建網(wǎng)橋接口的IP地址,也可以使用docker -d -fixed-cidr “"無類域內(nèi)路由(CIDR)地址來設(shè)置子網(wǎng)的大小;docker -d -mtu 1200來設(shè)置設(shè)置最大傳輸單元(MTU);-b或-bridge來使用Linux自定義網(wǎng)橋

E.Joined容器

1.當(dāng)你想要不同容器上的程序通過本地回環(huán)接口進(jìn)行通信時(shí);當(dāng)一個(gè)容器中的程序?qū)⒁淖僇oined網(wǎng)絡(luò)棧,而另外一個(gè)程序?qū)⒁褂媚莻€(gè)被改變的網(wǎng)絡(luò)棧時(shí);當(dāng)你想要監(jiān)控另外一個(gè)容器中某個(gè)程序的網(wǎng)絡(luò)流量時(shí);

F.Open容器

1.—net host命令創(chuàng)建,對主機(jī)網(wǎng)絡(luò)有完全的訪問權(quán),沒有提供任何隔離

G.跨容器依賴

1.鏈接——本地服務(wù)發(fā)現(xiàn):當(dāng)新容器被創(chuàng)建時(shí),目標(biāo)容器必須正在運(yùn)行,會(huì)發(fā)生三件事:

  • 描述目標(biāo)容器的環(huán)境變量會(huì)被創(chuàng)建

  • 鏈接的別名和對應(yīng)的目標(biāo)容器的IP地址會(huì)被添加到DNS覆蓋列表中

  • 如果跨容器通訊被禁止了,Docker會(huì)添加特定的防火 墻規(guī)則來允許被鏈接 的容器間的通信

2.當(dāng)跨容器通信(ICC)被允許時(shí),—expose選項(xiàng)為容器端口到主機(jī)端口的映射,當(dāng)ICC被禁止時(shí),—expose選項(xiàng)成了定義防火墻規(guī)則 和在網(wǎng)絡(luò)上顯式聲明容器接口的一個(gè)工具

3.—link 容器名:別名,鏈接

4.只有正確恰當(dāng)?shù)呐渲?、?qiáng)大的網(wǎng)絡(luò)規(guī)則設(shè)置,加上服務(wù)依賴的聲明,才能構(gòu)造一個(gè)深度安全防御的系統(tǒng)

5.鏈接的本質(zhì)就是靜態(tài)的、具有方向性和無傳遞性的依賴;鏈接通過檢測目的容器的網(wǎng)絡(luò)信息(IP地址和開放端口),然后將這些信息注入新容器中

六、隔離——限制危險(xiǎn)

A.資源分配

1.內(nèi)存-m或-memory,可用單位有b,k,m和g,內(nèi)存限制并不是內(nèi)存保留,而是防止容器使用超出具體大小的內(nèi)存資源

2.cpu權(quán)重,—cup-shares=整數(shù);cup限定指定的CPU,—cpuset-cpus;

3.設(shè)備授權(quán),使用—device選項(xiàng)來指定一個(gè)設(shè)備的集合,這些設(shè)備會(huì)被掛載進(jìn)新容器中,選項(xiàng)的值必須 是主機(jī)操作系統(tǒng)上的設(shè)備文件到新容器中位置的映射

B.共享內(nèi)存

1.Linux的IPC命名空間分區(qū)共享內(nèi)存單元,比如說命名的共享內(nèi)存塊、信號(hào)量和消息隊(duì)列,默認(rèn)情況下Docker為每一個(gè)容器創(chuàng)建了一個(gè)獨(dú)立的IPC命名空間

2.—ipc選項(xiàng)支持創(chuàng)建的新容器的IPC命名空間和另外一個(gè)目標(biāo)容器是一樣的

3.—ipc host,可以和運(yùn)行在主機(jī)上的進(jìn)程通信,屬于開放內(nèi)存容器

C.理解用戶

1.提供了-u或—user選項(xiàng)來設(shè)置run-as用戶,可以設(shè)置用戶和用戶組,-u nobody:default或-u 10000:20000

2.除非你想要主機(jī)的文件能夠被容器訪問,否則不要將文件以卷的形式掛載到容器上

D.能力——操作系統(tǒng)功能的授權(quán)

1.通過—cap-drop選項(xiàng)為容器去除能力,通過—cap-add選項(xiàng)能夠增添能力

E.運(yùn)行特權(quán)容器

1.特權(quán)容器維持它們自己的文件系統(tǒng)和網(wǎng)絡(luò)隔離,但卻擁有對設(shè)備和共享內(nèi)存的全部訪問權(quán),還具備全部的系統(tǒng)能力

2.使用—privileged選項(xiàng)來開啟這種模式

F.使用加強(qiáng)工具創(chuàng)建更健壯的容器

1.Docker提供了一個(gè)在容器創(chuàng)建或者運(yùn)行時(shí)指定Linux安全模塊(LSM)的選項(xiàng),LSM是Linux采用的一個(gè)框架,用作操作系統(tǒng)和安全供應(yīng)商之間的接口層。AppArmor和SELinux都是LSM的供應(yīng)商

2.通過—security-opt選項(xiàng)來設(shè)置

3.通過—exec-driver=lxc來使用LXC,一旦被配置為LXC可以使用—lxc-conf來設(shè)置LXC的配置

G.因地制宜的構(gòu)建容器

1.應(yīng)用:確保運(yùn)行應(yīng)用的用戶具有有限的權(quán)限;限制 瀏覽器的系統(tǒng)能力;限制應(yīng)用的CPU和內(nèi)存資源;

七、在鏡像中打包軟件

A.從容器構(gòu)建鏡像

1.從一個(gè)容器構(gòu)建一個(gè)鏡像的基本工作流包含三部分:

  • 需要從一個(gè)已存在的鏡像創(chuàng)建一個(gè)容器

  • 修改這個(gè)容器的文件系統(tǒng)

  • 一旦改動(dòng)完成,那么就要將這些改動(dòng)提交(commit)

2.審查文件的改動(dòng):docker diff xxxx

3.docker commit命令從被修改的容器上創(chuàng)建新鏡像,最好使用-a為新鏡像指定作者信息,使用-m選項(xiàng)能夠設(shè)置關(guān)于提交的信息

4.docker run —entrypoint,指定入口點(diǎn),一個(gè)入口點(diǎn)就是一個(gè)程序,它會(huì)在容器啟動(dòng)時(shí)被執(zhí)行,如果沒有設(shè)置,那么默認(rèn)的命令會(huì)被直接執(zhí)行,如果被設(shè)置,那么默認(rèn)的命令和它的參數(shù)就會(huì)作為參數(shù)傳遞給入口點(diǎn)

5.當(dāng)使用docker commit命令,就向鏡像提交了一個(gè)新的文件層,但不是只有文件系統(tǒng)快照被提交,每一層都包含描述執(zhí)行上下文(execution context)的元數(shù)據(jù)

B.深入Docker鏡像和層

1.聯(lián)合文件系統(tǒng)由多個(gè)層組成,每當(dāng)對聯(lián)合文件系統(tǒng)改動(dòng)一次,改動(dòng)會(huì)被記錄到一個(gè)新的層中,這個(gè)新層放置于所有層的最上面

2.當(dāng)從聯(lián)合文件系統(tǒng)讀取一個(gè)文件時(shí),系統(tǒng)會(huì)從存在該文件的、最上面的一層中讀取

3.大多數(shù)的聯(lián)合文件系統(tǒng)采用了寫時(shí)復(fù)制(copy-on-write)的技術(shù),如果你將它理解為改動(dòng)時(shí)復(fù)制(copy-on-change)會(huì)更好理解。當(dāng)只讀層(read-only layer)上一個(gè)文件被修改了,那么這整個(gè)文件會(huì)在改動(dòng)發(fā)生之前被復(fù)制到最上面的可寫層(writable layer),這對運(yùn)行時(shí)性能和鏡像的大小會(huì)有負(fù)面影響

4.一個(gè)鏡像由多個(gè)層以棧的形式組成,首先給出一個(gè)頂層作為起始點(diǎn),然后根據(jù)每層元數(shù)據(jù)中的父層ID將多個(gè)層由上而下地連接起來,從某些起始層開始,遍歷尋找它們的依賴層

5.倉庫和標(biāo)簽通過docker tag、docker commit、docker build命令創(chuàng)建

docker commit xxx 倉庫/容器名:標(biāo)簽

docker tag 倉庫/容器名:標(biāo)簽 xxxxx

6.聯(lián)合文件系統(tǒng)實(shí)際上會(huì)在最頂層添加一個(gè)文件來標(biāo)記一個(gè)文件被刪除,原始的文件和任何文件副本依舊保留在鏡像的其他層中,聯(lián)合文件系統(tǒng)可能有一個(gè)層數(shù)量的限制,42層限制在使用AUFS系統(tǒng)的計(jì)算機(jī)上很常見,可以使用docker history命令來查看一個(gè)鏡像的所有層

C.導(dǎo)出和導(dǎo)入扁平文件系統(tǒng)

1.socket export命令會(huì)將扁平的聯(lián)合文件系統(tǒng)的所有內(nèi)容導(dǎo)出到標(biāo)準(zhǔn)輸出或者一個(gè)壓縮文件上,如果需要在容器上下文外使用鏡像中的文件系統(tǒng),這是非常有幫助的

2.docker import命令會(huì)將壓縮格式的內(nèi)容導(dǎo)入到一個(gè)新鏡像中,能夠識(shí)別多種壓縮或未壓縮的壓縮文件格式,是一個(gè)將最小文件集合導(dǎo)入到新鏡像的簡單方法

D.版本控制的最佳實(shí)踐

1.在Docker中,維護(hù)同一個(gè)軟件的多個(gè)版本的關(guān)鍵是設(shè)置正確的倉庫標(biāo)簽,每個(gè)倉庫包含多個(gè)標(biāo)簽,多個(gè)標(biāo)簽?zāi)軌蛑赶蛲粋€(gè)鏡像,這兩點(diǎn)是實(shí)用標(biāo)簽框架的核心

2.版本控制系統(tǒng)的最小單元要和實(shí)際軟件迭代的最小單元保持一致

3.latest標(biāo)簽指向最新的穩(wěn)定版本,而不是測試版本

4.如果軟件依賴變?nèi)チ?,或者軟件需要基于多個(gè)底層系統(tǒng)發(fā)布,那么這些依賴應(yīng)該要被包含到你的標(biāo)簽框架中

八、構(gòu)建自動(dòng)化和高級鏡像設(shè)置

A.使用Dockerfile打包Git

1.docker build -t ubuntu:auto . ,—tag或-t選項(xiàng)的值指定想要使用的完事倉庫設(shè)計(jì),—file或-f能夠設(shè)置Dockerfile的名字

2.Dockerfile文件:

  • FROM ubuntu:latest,告訴Docker從最新的ubuntu鏡像創(chuàng)建新鏡像

  • MAINTAINER,設(shè)置鏡像維護(hù)者的名字和郵箱

  • RUN apt-get install -y git,運(yùn)行命令

  • ENTRYPOINT [“git”],將鏡像的入口點(diǎn)設(shè)置為git

3.構(gòu)建程序能夠緩存每一步的結(jié)果,當(dāng)運(yùn)行完幾個(gè)指令,下一條指令出現(xiàn)問題時(shí),構(gòu)建程序能夠在問題被修復(fù)后,從同一步重新啟動(dòng)

B.Dockerfile入門

1.Dockerfile文件

  • ENV,類似于docker run 命令中的—env,設(shè)置鏡像的環(huán)境變量

  • LABEL用來定義鍵值對,被記錄為鏡像或容器的額外元數(shù)據(jù),和—label功能一致

  • WORKDIR,與—workdir一致,生成一個(gè)默認(rèn)工作目錄

  • EXPOSE指令與—expose一致,對外開放端口

  • COPY,從鏡像被創(chuàng)建的文件系統(tǒng)上復(fù)制文件到容器中,需要兩個(gè)參數(shù),最后一個(gè)參數(shù)是目的目錄,其他則為源文件,任何被復(fù)制文件都會(huì)成為root用戶,如果任何一個(gè)參數(shù)包含了空格,必須使用exec格式

  • VOLUME,與—volume一致,參數(shù)中的每一個(gè)值都會(huì)在產(chǎn)生的新層中被創(chuàng)建為一個(gè)新的卷定義

  • CMD,與ENTRYPOINT相關(guān),在容器中啟動(dòng)一個(gè)進(jìn)程

  • ADD,類似于COPY,如果指定了一個(gè)URL,會(huì)拉取遠(yuǎn)程源文件,會(huì)將被判定為存檔文件的源中的文件提取出來

C.注入下游鏡像在構(gòu)建時(shí)發(fā)生的操作

1.如果生成的鏡像被作為另一個(gè)構(gòu)建的基礎(chǔ)鏡像,則ONBUILD指令定義了需要被執(zhí)行的那些指令,跟隨在ONBUILD后的指令不會(huì)在包含它們的Dockerfile被構(gòu)建時(shí)被執(zhí)行,這些指令會(huì)被記錄在生成鏡像的元數(shù)據(jù)ContainerConfig.OnBuild下

D.使用啟動(dòng)腳本和多進(jìn)程容器

1.基于UNIX的計(jì)算機(jī)通常會(huì)先啟動(dòng)一個(gè)初始化(init進(jìn)程)。這個(gè)init進(jìn)程負(fù)責(zé)啟動(dòng)所有其他的系統(tǒng)服務(wù),讓它們持續(xù)運(yùn)行,然后負(fù)責(zé)關(guān)閉它們

2.主流的工具包括runit、Busybox init、Supervisord和DAEMON工具

E.加固應(yīng)用鏡像

1.包含盡量少的組件 ,構(gòu)建最小化的鏡像;強(qiáng)制基于某個(gè)特定鏡像來構(gòu)建鏡像;擁有一個(gè)合適的默認(rèn)用戶;去除root用戶提權(quán)的通用途徑;

2.包含有摘要組件的鏡像ID被稱為內(nèi)容可尋址鏡像標(biāo)識(shí)符(CAID),它引入的是一個(gè)包含特殊內(nèi)容的特殊層

3.如果你構(gòu)建的鏡像被設(shè)計(jì)用來運(yùn)行某些特定的應(yīng)用程序,那么默認(rèn)配置應(yīng)該盡可能地削減用戶權(quán)限,但要注意確定時(shí)間,避免用戶缺少權(quán)限導(dǎo)致Dockerfile中余下腳本無法執(zhí)行

九、公有的私有軟件分發(fā)

A.通過托管Registry發(fā)布

1.docker login(Docker Hub網(wǎng)站賬號(hào))

2.docker build -t 帳號(hào)名(Docker Hub帳號(hào))/項(xiàng)目名

3.docker push 帳號(hào)名/項(xiàng)目名

B.私有Registry介紹

1.Docker Registry軟件(稱為Distribution),這款軟件的可用性和寬容的許可證讓運(yùn)行自己的Registry的成本非常低廉,可以通過Docker Hub運(yùn)行,易于在非生產(chǎn)環(huán)境下使用

C.鏡像的手動(dòng)發(fā)布和分發(fā)

1.docker build命令來創(chuàng)建一個(gè)鏡像,用docker save命令或者docker export命令來創(chuàng)建一個(gè)鏡像文件

2.一旦有了鏡像文件,就可以使用docker load或者import命令完成傳輸

D.鏡像源代碼分發(fā)工作流程

1.僅包含一個(gè)Dockerfile和你的項(xiàng)目源代碼

2.使用git保存一個(gè)Dockerfile即可,與所有的Docker分發(fā)工具是脫離的,僅令依靠鏡像構(gòu)建器

十、運(yùn)行自定義Registry

A.運(yùn)行個(gè)人Registry

1.關(guān)鍵組件:

registry的基礎(chǔ)鏡像是基于Debian的,已經(jīng)更新了依賴關(guān)系

主程序被命名為registry,并在PATH路徑上可用

默認(rèn)的配置文件為config.yml

十一、Docker Compose聲明式環(huán)境

A.Docker Compose

1.Compose是一個(gè)用于定義、啟動(dòng)和管理服務(wù)的工具,其中一個(gè)服務(wù)可以定義為Docker容器的一個(gè)或多個(gè)副本,在YAML文件中定義了服務(wù)和服務(wù)系統(tǒng),并通過命令行docker-compose進(jìn)行管理

十二、Docker Machine和Swarm集群

1.Docker Machine可以構(gòu)建一個(gè)分布式系統(tǒng),創(chuàng)建和移除啟用了Docker的主機(jī)集群

2.Swarm集群由兩類機(jī)器組成,以管理模式運(yùn)行Swarm的機(jī)器稱為manager,而運(yùn)行Swarm代理的機(jī)器稱為node,為集群處理容器調(diào)度問題

感謝各位的閱讀,以上就是“Docker的相關(guān)知識(shí)點(diǎn)有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Docker的相關(guān)知識(shí)點(diǎn)有哪些這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI