容器與鏡像差別:容器(container)的定義和鏡像(image)幾乎一模一樣辑舷,也是一堆層的統(tǒng)一視角何缓,唯一區(qū)別在于容器的最上面那一層是可讀可寫的。容器 = 鏡像 + 可讀寫層
通俗的解釋:
容器就是一個存放東西的地方碌廓,如同快遞車里的包裹可能包裝了香水氓皱,零食,貓糧波材,書本等但不會輕易相互干擾身隐。我們現(xiàn)在所說的容器存放的東西可能更偏向于應(yīng)用比如網(wǎng)站、程序甚至是系統(tǒng)環(huán)境隙轻。一個鏡像可以啟動多個都是活動且彼此相互隔離的容器。
Docker 容器是一個開源的應(yīng)用容器引擎玖绿,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的容器中叁巨,然后發(fā)布到任何流行的Linux機器上,也可以實現(xiàn)虛擬化蚀瘸。容器是完全使用沙箱機制狡蝶,相互之間不會有任何接口(類似 iPhone 的 app)贪惹。幾乎沒有性能開銷,可以很容易地在機器和數(shù)據(jù)中心中運行寂嘉。最重要的是,他們不依賴于任何語言、框架包括系統(tǒng)垫释。
安全性設(shè)置
1.定期滲透測試,安全審計;
2.盡量采用image的正規(guī)鏡像來源预伺,相對于傳統(tǒng)安全,容器安全受質(zhì)疑很大程度上是在于鏡像的維護及升級脏嚷,因此在鏡像源頭保證安全和及時更新;
3.及時升級容器服務(wù)父叙,比如采用rollingupdate的方式對跑服務(wù)的容器進行升級等方式肴裙。
遷移步驟
步驟1:分解
應(yīng)用程序一般有很多的組件會很復(fù)雜。如大多數(shù)應(yīng)用程序都需要數(shù)據(jù)庫或中間件服務(wù)的支持以實現(xiàn)對數(shù)據(jù)的存儲甜癞、檢索和集成宛乃。所以,需要通過設(shè)計和部署把這些服務(wù)拆分成為它們自己的容器征炼。如果一個應(yīng)用程序能夠被拆分成為越多的分布式組件,那么應(yīng)用程序擴展的選擇則越多眼坏。但是雄右,分布式組件越多也意味著管理的復(fù)雜性越高纺讲。
步驟2:選擇一個基礎(chǔ)映像
應(yīng)用程序遷移時應(yīng)避免推倒重來的做法囤屹。搜索Docker注冊庫找到一個基本的Docker映像并將其作為應(yīng)用程序的基礎(chǔ)來使用,Docker注冊庫中基本映像的價值隨時間而展現(xiàn)乡括。
步驟3:解決安全性和管理問題
安全性和管理應(yīng)當是一個高優(yōu)先級的考慮因素智厌;企業(yè)用戶不應(yīng)再把它們當作應(yīng)用程序遷移至容器的最后一步。反之铣鹏,企業(yè)必須從一開始就做好安全性和管理的規(guī)劃,把它們的功能納入應(yīng)用程序的開發(fā)過程中葵第,并在應(yīng)用程序運行過程中積極主動地關(guān)注這些方面。這就是企業(yè)應(yīng)當花大功夫的地方合溺。
步驟4:增加代碼
為了創(chuàng)建映像,企業(yè)用戶需要使用一個Dockerfile來定義映像開發(fā)的必要步驟哮奇。一旦創(chuàng)建了映像睛约,企業(yè)用戶就應(yīng)將其添加至Docker Hub。
步驟5:配置而芥、測試、部署
應(yīng)對在容器中運行的應(yīng)用程序進行配置膀值,以便于讓應(yīng)用程序知道可以在哪里連接外部資源或者應(yīng)用程序集群中的其他容器。企業(yè)用戶可以把這些配置部署在容器中或使用環(huán)境變量歌逢。
最后翘狱,把容器部署到實際生產(chǎn)環(huán)境中。為了積極主動地關(guān)注基于容器的應(yīng)用程序的運行狀況,可考慮實施必要的監(jiān)控和管理機制 阱高。確保打開日志記錄功能。?[2]
特性
容器技術(shù)間都大致類似的吼旧。但Docker在一個單一的容器內(nèi)捆綁了關(guān)鍵的應(yīng)用程序組件未舟,讓其可以在不同平臺和云計算之間實現(xiàn)便攜性。所以Docker成為了需跨環(huán)境運行的應(yīng)用程序的理想容器技術(shù)選擇员串。
微服務(wù)是把應(yīng)用程序分解成為專門開發(fā)的更小服務(wù)昼扛。因此Docker的存在讓用微服務(wù)的應(yīng)用程序得益寸齐, 這些服務(wù)使用通用的RESTAPI來進行交互访忿。使用完全封裝Docker容器的開發(fā)人員可以針對采用微服務(wù)的應(yīng)用程序開發(fā)出一個更為高效的分發(fā)模式斯稳。?