命令相關(guān)
- detach 使用了-t選項打開的交互式容器 的方法:長安ctrl,然后分別按下P鍵和Q鍵,則當前容器會被detach,并退回宿主機的shell。
-
docker logs命令可用來顯示容器日志。容器輸入到標準輸出及標準錯誤輸出的內(nèi)容都會被docker logs日志記錄下來。但是docker logs日志不會自動截斷,因此對于長期運行的程序可能會帶來性能問題。
docker logs container_name
創(chuàng)建沒有獨立PID命名空間的容器的方法:在
docker exec或docker run命令中加上--pid參數(shù),并將其值設(shè)置為hostdocker create命令:創(chuàng)建一個容器,并使之停留在stop狀態(tài)。使用該命令可以獲取以交互模式運行的docker容器的IDdocker run及docker create命令可以帶上一個--cidfile參數(shù),并賦予其一個不存在的文件名,以將新建的容器的ID輸入到指定文件中。如果指定的文件已經(jīng)存在,則docker不會創(chuàng)建新容器。在創(chuàng)建容器時,可以加上
--read-only選項,創(chuàng)建一個帶有只讀文件系統(tǒng)的容器。該參數(shù)可確保容器中的文件不會被改變。由于鏡像啟動時可能需要寫入一些文件。若設(shè)置了該參數(shù)可能會導致容器啟動失敗,對此,需要利用-v參數(shù)設(shè)置一些可寫的volumes以供程序正常運行。創(chuàng)建容器時,
--env(-e)參數(shù)能指定容器的環(huán)境變量,格式為
--env VIRABLE_NAME = VIRABLE_VALUE
創(chuàng)建容器時指定
--restart參數(shù)可以設(shè)定容器在失敗時的重啟策略。多次重試之間,等待時間采用指數(shù)回退發(fā)計算。重啟策略及容器失敗時退出碼詳解可見這篇文章。設(shè)置了次參數(shù)后,若容器運行終止,則容器會進入restarting狀態(tài)。容器創(chuàng)建時,可使用
--entrypoint參數(shù)覆蓋dockerfile中的ENTRYPOINT指令。此時命令行參數(shù)會成為entrypoint指令的參數(shù)。容器創(chuàng)建時,指定
--rm參數(shù),可在容器進入exited狀態(tài)后釋放容器占用的資源。
原理相關(guān)
- docker容器在八個方面進行了隔離:
- PID namespace : 進程標識及能力
- UTS namespace : 主機及域名
- MNT namespace : 文件系統(tǒng)訪問及結(jié)構(gòu)結(jié)構(gòu)
- IPC namespace : 通過共享內(nèi)存進行的進程間通信
- NET namespace : 網(wǎng)絡(luò)訪問及結(jié)構(gòu)
- USR namespace : 用戶名及標識
- chroot() : 控制文件系統(tǒng)根路徑
- cgroups : 資源的保護
PID namespace : 一個可以用來標識進程的數(shù)字的集合
常見的資源沖突問題:
- 兩個進程綁定了同一個網(wǎng)絡(luò)端口
- 兩個進程使用了相同的臨時文件名,該文件名受文件鎖保護無法被共享。
- 兩個進程需使用不同版本的全局共享軟件庫
- 兩個相同的程序需要使用相同的PID文件
- 新的程序修改了已存在的程序使用著的一個全局變量,導致老程序崩潰
-
docker容器狀態(tài)轉(zhuǎn)換機:
容器狀態(tài)轉(zhuǎn)換 docker容器的啟動順序需要與docker容器間的依賴順序相反(例如,容器A 有一個link參數(shù)將容器B link到A之上,則容器B需要在容器A之前啟動,否則docker會報錯。)。因此docker不可能構(gòu)建一個有循環(huán)依賴關(guān)系的容器拓撲。
