Docker容器無疑是最近十年來最引人注目的技術之一,由於有了它,對咱們思考設計、開發和運維軟件的方式產生了很是有益的影響。數據庫
可是就像每個開發工具同樣,爲了充分利用這些工具,須要注意一些使用中問題,Docker容器也是如此。下面是您須要關注的一些地方:安全
一個進程,一個Docker容器網絡
每一個Docker容器的核心都是一個進程,儘管每一個Docker容器可使用多個進程,可是這種方法不值得推薦。爲了提升效率,每一個容器應該只有一個特定的目標進程。其中一個很是重要的緣由是若是隻使用一個進程的話想在其餘項目中遷移使用該Docker將變得容易不少。運維
儘管在容器中運行多個進程在技術上是可行的,可是單進程體系結構具備顯著的優點,具體說來:工具
易擴展開發工具
若是容器被隔離到一個單一的功能,水平調整容器會容易得多。 假設您須要另外一個Tomcat容器,在其餘地方遷移一個便可。可是,若是你的Tomcat容器也運行你的數據庫服務,而且其它的數據也須要被遷移走,那麼這就變得很是複雜。測試
更好的複用行設計
若是一個容器只有一個功能,容器能夠容易地從新用於其餘項目。生命週期
易問題定位進程
開發人員可以在本地環境下解決那些在生產中的單個組件出現的問題,而不是從整個應用程序環境中定位問題來解決。
在容器內部保存數據幾乎沒有什麼用處,由於容器不斷地被中止和銷燬。不管何時須要存儲數據,都要在磁盤上進行,由於磁盤能夠在多個容器之間更安全地共享。磁盤是將數據存儲在容器的可寫層中的更好選擇,由於使用磁盤不會增長容器的大小,而且磁盤的數據存在於給定容器的生命週期以外。
每當一個Docker容器須要與另外一個容器通訊時,傳遞信息最好使用名稱或環境變量。Docker容器固然也有IP地址,可是不管什麼時候啓動和中止容器,都是不會依賴IP地址的。
默認狀況下,Docker容器以root用戶身份運行,衆所周知,以root用戶運行的容器徹底能夠控制主機系統。若是黑客訪問容器內的「root」用戶,他將得到對運行Docker的主機的root權限,爲了不這種狀況,請始終以普通用戶身份運行Docker容器。
選擇一個容器的主要緣由之一是它的體積小。可是,若是你把它作得更大,它的主要優點就沒了。當您在羣集中部署數千個容器時,若是須要容器相互通訊並按期更新容器,這是一個很是嚴重的問題。
因此須要確保只有所需的文件和庫來運行對應的應用程序/進程。不要安裝沒必要要的軟件包或運行yum update等命令,將不須要的文件下載到新的映像層。
打個比方:一個冰箱中是沒法裝下一個大型集裝箱的。
開發和部署Docker容器不是你的工做的結束。您須要持續監控已部署的容器以及整個系統的運行情況。選擇合適的工具並制定一個策略來有效地監控您的Docker容器,以確保最短的停機時間,從而使客戶滿意。
只要Docker容器在本地開發環境中運行,就沒有安全問題。由於測試環境是與外部鏈接隔離的,是沒法肯定在外部是否徹底的。當您的Docker鏡像部署在生產環境中時,由於須要處理外部網絡訪問,安全性天然成爲一個問題。爲了預防這個問題,首先須要確保Docker容器所在的主機被修補了最新的安全更新,其次Docker容器中也更新了安全補丁。