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