讓Docker使用更方便的Exec
我們?cè)趹?yīng)用容器的過(guò)程中,無(wú)論是在通過(guò)Dockerfile在調(diào)試構(gòu)建鏡像的過(guò)程,還是容器運(yùn)行一段時(shí)間想查看內(nèi)部結(jié)構(gòu),我們還是希望能像操作本地機(jī)器一樣,實(shí)時(shí)的查看容器內(nèi)部文件,代碼或者日志?;蚴切薷奈募?,拷貝文件目錄等等。
- 訪問(wèn)容器內(nèi)部,目前有兩種方法
1. Docker自帶的exec命令
2. Nsenter工具
- 來(lái)說(shuō)說(shuō)Docker exec 命令方式訪問(wèn)
- 如圖所示,簡(jiǎn)單的ls命令。Linux系統(tǒng)自帶的命令都可以通過(guò)這種方式運(yùn)行。文件放錯(cuò)位置了,mv一下,查看log,就cat log.log一下,等等。
Exec加點(diǎn)料
- 簡(jiǎn)單的操作不能滿足我們對(duì)他的好奇...
- 我們運(yùn)行一下 docker exec -ti 61f ps -ef
- 發(fā)現(xiàn)只有3個(gè)進(jìn)程,進(jìn)程1是CMD命令啟動(dòng)的腳本;進(jìn)程2是腳本啟動(dòng)的程序;進(jìn)程3是我們運(yùn)行ps -ef的進(jìn)程。
- 出于好奇,我又docker exec 9fe0 kill 15
- 容器從此就停止了...
- 原因是殺掉進(jìn)程后,Dockerfile指定的CMD["/run.sh"]腳本運(yùn)行結(jié)束,CMD入口已經(jīng)退出,導(dǎo)致容器退出。
問(wèn)題還沒結(jié)束
- Kubernetes是一個(gè)基于docker的容器集群管理系統(tǒng),它的一大特點(diǎn)是擁有Replication Controllers,他的作用主要是保持所起動(dòng)的Pod數(shù)量不變(pod里面裝的是container)。我猜想如果類似的kill掉容器內(nèi)部的進(jìn)程,那么kubernetes應(yīng)該會(huì)讓這個(gè)container重新啟動(dòng)。于是就來(lái)動(dòng)手試試。
- 時(shí)速云他們應(yīng)用了kubernetes,并且提供了客戶端tce可以使用exec功能。運(yùn)行 tce exec bbb-145fv-zkdqz ps -ef
- tce exec bbb-145fv-zkdqz kill 15
沒有重啟??
- 再次運(yùn)行 tce exec bbb-145fv-zkdqz ps -ef
- 又出現(xiàn)了。
- 由此可見Kubernentes的Replication Controllers還是很強(qiáng)大的。保證了集群中有指定數(shù)量的pod副本在運(yùn)行。
原文鏈接:http://www.searchcloudcomputing.com.cn/showcontent_90209.htm