過關(guān)斬將之路-docker(IT楓斗者)
1問:什么是docker?有何作用?
1答:是個(gè)容器化平臺(tái),它以容器的形式將應(yīng)用程序和它相關(guān)的依賴都打包在一起,以確保您的應(yīng)用程序在任何環(huán)境中無縫運(yùn)行。
作用:
他將我們開發(fā)的應(yīng)用程序打成個(gè)鏡像,不管是DEV還是QA還是線上,拿走鏡像直接運(yùn)行即可,不會(huì)再出現(xiàn)因?yàn)榄h(huán)境不一致導(dǎo)致程序有問題的情況,減少了扯皮的時(shí)間。
部署簡單方便。
方便我們統(tǒng)一管理應(yīng)用程序以及方便OP動(dòng)態(tài)伸縮。
2問:它與虛擬機(jī)有什么區(qū)別?
2答:
傳統(tǒng)虛擬機(jī),虛擬出一個(gè)硬件,運(yùn)行一個(gè)完整的操作系統(tǒng),然后在這個(gè)操作系統(tǒng)上安裝軟件和部署等操作。
容器內(nèi)的應(yīng)用直接運(yùn)行在宿主機(jī)上,容器是沒有自己內(nèi)核的,也沒有虛擬我們的硬件環(huán)境,多個(gè)容器之間是共享硬件資源和宿主機(jī)內(nèi)核的,所以很輕便。
容器之間彼此隔離,每個(gè)容器內(nèi)部都有一個(gè)屬于自己的文件系統(tǒng),互不影響。
3問:Docker容器有哪幾種狀態(tài)?如何查看Docker容器的狀態(tài)?
3答:運(yùn)行、已暫停、重新啟動(dòng)、已退出。采取?docker ps -a查看容器的狀態(tài)。
4問:Docker的流程是怎樣的?
4答:

5問:Docker的原理是怎么樣的?
5答:Docker是一個(gè)Client-Server結(jié)構(gòu)的系統(tǒng),Docker的守護(hù)進(jìn)程運(yùn)行在主機(jī)上,通過Socket從客戶端訪問,DockerServer接收到Docker Client的指令就會(huì)執(zhí)行對應(yīng)的命令(比如?docker run等)。docker之間互相隔離。

6問:什么是Docker鏡像?
6答:Docker鏡像是Docker容器的源代碼。用于創(chuàng)建容器。使用build命令創(chuàng)建鏡像,并且在使用run啟動(dòng)時(shí)它們將生成容器。鏡像存儲(chǔ)在Docker倉庫中。
7問:Docker鏡像和層有什么區(qū)別?
7答:
鏡像:Docker鏡像是由一系列只讀層構(gòu)建的;
層:每個(gè)層代表鏡像Dockerfile中的一條指令;
重要的是,每個(gè)層只是與之前一層的一組差異層,也就是相同的層就不再重新pull了,節(jié)省了空間。
8問:什么是Docker容器呢?
8答:Docker容器包括應(yīng)用程序及其所有依賴項(xiàng),但與其他容器共享內(nèi)核,在主機(jī)操作系統(tǒng)的用戶空間中作為獨(dú)立進(jìn)程運(yùn)行。Docker容器是Docker鏡像的實(shí)例。
9問:說說Docker的一些常用命令?
9答:

10問:Docker如何停止所有運(yùn)行的容器?
10答:
重點(diǎn)考察的是$符號(hào),相當(dāng)于for循環(huán)遍歷。
docker kill $(docker ps -q)
docker如何清理批量后臺(tái)停止的容器?
docker rm $(docker ps -a -q )
11問:Dockerfile中常用指令有哪些?
11答:

12問:Dockerfile中的COPY和ADD有啥區(qū)別?
12答:
ADD:拷貝文件或目錄到容器中,如果是URL或壓縮包便會(huì)自動(dòng)下載或自動(dòng)解壓;
COPY:拷貝文件或目錄到容器中,跟ADD類似,但不具備自動(dòng)下載或解壓的功能;
13問:如何構(gòu)建一個(gè)dockerfile?
13答:
編寫一個(gè)dockerfile文件
docker build構(gòu)建成一個(gè)鏡像
docker run啟動(dòng)鏡像為容器
docker push發(fā)布鏡像到遠(yuǎn)程倉庫
13問:如何構(gòu)建一個(gè)dockerfile?
13答:
編寫一個(gè)dockerfile文件
docker build構(gòu)建成一個(gè)鏡像
docker run啟動(dòng)鏡像為容器
docker push發(fā)布鏡像到遠(yuǎn)程倉庫
14問:Dockerfile的CMD和ENTRYPOINT的區(qū)別?
14答:兩個(gè)都是運(yùn)行容器時(shí)執(zhí)行的shell命令的功能。區(qū)別:

15問:如何發(fā)布docker鏡像到Dockerhub?
15答:
注冊賬號(hào):https://hub.docker.com/
登錄dockerhub賬號(hào):,然后回車會(huì)讓輸入密碼。
提交鏡像到dockerhub,?docker push 鏡像名稱:TAG
16問:Docker數(shù)據(jù)怎么持久化?
16答:

17問:多個(gè)容器之間怎么實(shí)現(xiàn)數(shù)據(jù)共享?
17答:讓多個(gè)容器之間掛載到同一個(gè)容器的目錄下。命令:

比如容器A掛載xxx目錄到宿主機(jī)/home/work下了,然后容器B和容器C掛載到了容器A的xxx上,這時(shí)候A、B、C三個(gè)容器共享同一份掛載目錄,修改其中一個(gè),其他兩個(gè)會(huì)同步修改,停掉容器且刪除容器后數(shù)據(jù)也不會(huì)丟失!因?yàn)樗谒拗鳈C(jī)上有備份。
18問:為什么需要數(shù)據(jù)共享?
18答:
如果容器太多,每一次都要寫?-v xxx:xxx?,過于復(fù)雜,也容易出錯(cuò),這時(shí)候可以通過?docker create創(chuàng)建共享容器,然后啟動(dòng)的時(shí)候通過?--volumes-from?指定創(chuàng)建的共享容器名稱即可,也就是說可以把上面?-v xxx:xxx?這一串統(tǒng)一放到一個(gè)地方去管理,容器啟動(dòng)的時(shí)候直接引用這個(gè)統(tǒng)一配置即可,方便統(tǒng)一管理。
19問:說說docker的網(wǎng)絡(luò)管理。
19答:
單向容器間通信采取 --link,原理就是在hosts文件里添加映射。
雙向容器間互通采取自定義網(wǎng)絡(luò)的方式,然后將應(yīng)用加入到同網(wǎng)絡(luò)中即可雙向互通。好處在于便于管理,不同集群采取不同網(wǎng)絡(luò)。
