摘要:分別進行配置和測試。也就是說對于開發和部署來說,使用可以更快速的交付和部署應用環境。更便捷的應用更新管理。使用鏡像創建并啟動一個容器。執行用戶指定的應用程序。執行完畢后,容器被終止。
Docker是為應用的開發和部署提供的“一站式”容器解決方案,它能幫助開發者高效快速的構建應用,實現“Build,Ship and Run Any App, Anywhere”,從而達到“一次構建,到處運行”的目的。
Docker解決了什么問題Docker項目的發起人Solomon Hykes認為:
Docker在正確的地點,正確的時間順應了正確的趨勢--即高效地構建應用。
隨著各種云平臺的興起,開發者或者應用部署者有一種迫切的想要將應用從底層機器環境中脫離的需求,并且還需要讓同一個應用在“任何時間任何地點”可以方便地被獲取。
傳統的方式中,在服務器中搭建一個常見的LAMP(Linux+Apache+Mysql+PHP)網站的步驟:
下載安裝Apache,Mysql和PHP以及其它的相關依賴環境。
分別進行配置和測試。
整合到一起進行功能測試。
這種方式操作枯燥繁瑣,將不同的軟件集成起來的過程中有很多不可控的風險,最無法忍受的是,一旦需要重新遷移服務器或者重新部署一套環境,這樣的瑣碎和無趣的“體力活”還將重新執行一遍。
針對這個問題,以前我們通常用虛擬機集成部署好一套環境,然后做成一個虛擬機模版來解決。不過這種方式有資源利用率低,靈活性差和遷移平臺限制等問題。例如,我們想要的僅僅是一個LAMP環境,但是用這種方式卻必須集成打包一個完整的操作系統(每個虛擬機需要多帶帶分配獨占的內存,磁盤等資源)。此外,這樣打包后的一套LAMP環境中,軟件之間版本依賴性強,很難進行變更更新。最后,通常這樣的虛擬機還需要綁定特定的虛擬化管理程序來管理,這樣對于遷移的平臺就有了限制。
如今,Docker通過對Linux容器技術LXC(Linux Containers)等進一步優化,提供了各種容器管理工具,通過容器來管理應用,這樣便可以達到"build once, works everywhere"的目的。也就是說對于開發和部署來說,使用Docker可以:
更快速的交付和部署應用環境。
更高效的資源利用率。
更便捷的遷移和擴展性。
更便捷的應用更新管理。
Docker與虛擬機Docker和虛擬機都是基于軟件的平臺虛擬化技術,其中:
虛擬機屬于完全虛擬化,即模擬完整的底層硬件環境特權指令的執行,客戶操作系統無需進行修改。比如我們常用的VirtualBox,VMWare Workstation和Parallels Desktop等虛擬化軟件。
Docker和其它容器技術便是操作系統級虛擬化,即直接通過內核創建虛擬的操作系統實例(內核和庫),來隔離不同的進程和資源。
也就是說,Docker容器不需要額外的虛擬機管理軟件和虛擬機操作系統層,直接在宿主機操作系統層面上實現虛擬化,從而達到輕量級,高效的目的。如下圖所示(源自what-docker),左側是傳統的虛擬化方式,右側是Docker虛擬化的方式。很顯然,Docker的虛擬化方式沒有了虛擬機管理程序Hypervisor和虛擬機操作系統Guest OS層,取而代之的是Docker Engine容器支持層。
Docker中不仔需要為不同的應用啟動相應的虛擬機了,直接在Docker容器中運行應用,并不需要消耗額外的系統的資源。因此,Docker的啟動速度很快,通常可以達到秒級,而傳統的虛擬機基本是分鐘級。
關于Docker中使用的容器技術和虛擬機性能的比較,IBM的一份研究報告An Updated Performance Comparison of Virtual Machines and Linux Containers.中通過試驗得出結論表示,通常情況下,Docker容器技術的性能等同或超出使用KVM的性能。當然,在CPU和內存性能方面,KVM和Docker一樣都有明顯的但可忽略不計的開銷。同時,對于I/O密集型的應用,Docker和KVM也都需要進行調整來減少開銷帶來的影響。
在隔離性方面,傳統虛擬機使用的是完全隔離,而Docker利用的是Linux系統的多種安全防護機制,從這個角度來看,傳統虛擬機比Docker多一層額外的隔離。當然,這并不意味著,Docker就不安全,Docker使用了多種機制如安全選項和鏡像簽名機制等來保障使用Docker的安全性(Docker Doc:Introduction to Container Security。
Docker核心概念接下來, 我們通過源自官網的Docker Architecture圖,來詳細闡述說明Docker的核心概念,其中主要構成:
Docker Client是Docker的主要的用戶管理接口,也就是docker命令行管理界面,用戶與Docker Client打交道,通過它與Docker Daemon守護進程進行交互,進而管理Docker中的Containers容器。
Docker Daemon是運行在主機上的一個守護進程。其中Docker Client和Docker Daemon可以運行在同一個主機中,也可以通過Docker Client連接遠程主機的Docker daemon。
Registry是注冊服務器,注冊服務器是存放倉庫(Repository)的具體服務器。
此外,Docker的核心概念中還包括鏡像(Images),容器(Container)和倉庫(Repository),其中:
Docker鏡像(Images)可以類比傳統的虛擬機中的模版,我們可以簡單將其理解成一個面向Docker Engine且包含文件系統的只讀模版。
Docker容器(Containers),容器Containers相當于鏡像Images的一個運行實例。鏡像本身是只讀且保存不變的,容器在啟動鏡像時,Docker會在鏡像的最上層創建一個可寫文件層。因此,也可以看出,容器才是直接提供一個或一組應用服務,以及它們的必需運行環境的組件。
Docker倉庫(Repository),是集中存放鏡像的地方,我們可以把它看成是一組鏡像的集合或者一個具體的項目,因為通常一個完整的應用是由很多鏡像堆積而成的。如下圖所示,便是官網公共庫https://hub.docker.com 中的repostitories列表,很顯然一個repository相當于一個完整的項目。
接下來, 我們還是通過源自官網的Docker Architecture圖,使用docker run ubuntu /bin/echo "Hello world"命令為例子,來闡述一個Docker容器運行的整體過程。
當我們使用docker run運行下載自官網的ubuntu repository(其實也就是ubuntu鏡像)時,Docker在后臺運行的一整套標準操作包括:
docker daemon檢查本地是否存在ubuntu鏡像,不存在就從公有Registry倉庫中下載。
使用ubuntu鏡像創建并啟動一個容器。
分配一個文件系統,并在只讀的鏡像層外面掛載一層可讀寫層。
從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去。
從地址池配置一個 ip 地址給容器。
執行用戶指定的應用程序/bin/echo "Hello world"。
執行完畢后,容器被終止。
參考&引用[1] Docker White Paper: Intro to Container Security
[2] 楊保華, 戴王劍,曹亞侖.(2015).Docker技術入門與實戰.機械工業出版社.
[3] Wes Felter, Alexandre Ferreira, Ram Rajamony, Juan Rubio.(2014).IBM Research Report:An Updated Performance Comparison of Virtual Machines and Linux Containers.
[4] Docker Doc:Introduction to Container Security
[5] IBM developerWorks——LXC:Linux 容器工具
[6] Docker Architecture
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26703.html
摘要:在前一篇文章學習與和應用一初步認識中,我們初步介紹了解決了什么問題,容器化技術與傳統的虛擬化方式的區別,以及簡要介紹了的幾大核心概念鏡像容器和倉庫。針對上述問題,提供了的,通過使用指令配置的方式來創建鏡像。 在前一篇文章 Docker學習與和應用(一)_初步認識中,我們初步介紹了Docker解決了什么問題,Docker容器化技術與傳統的虛擬化方式的區別,以及簡要介紹了Docker的幾大...
摘要:微店技術團隊公眾號容器化之路這是一套以阿里云為基礎,為核心,第三方服務為工具的開發測試部署流程,以及內部的代碼提交,版本管理規范。如何打造安全的容器云平臺對,微服務,來說都是非常好的落地實踐技術。 在使用 flow.ci 進行持續集成的過程中,也許你會遇到一些小麻煩。最近我們整理了一些常見問題在 flow.ci 文檔之 FAQ,希望對你有用。如果你遇到其他問題,也可以通過「在線消息」或...
摘要:函數式編程不是一個框架或工具,而是一種編寫代碼的方式。函數式編程首先是一個聲明式編程范例。舉個例子純函數函數式編程基于的前提是您將基于純函數構建不可變的程序作為業務邏輯的構建塊。 showImg(https://segmentfault.com/img/remote/1460000012402865?w=693&h=339); 最近朋友推薦這本書:Functional PHP ,很多對...
摘要:基本入門前端掘金作者本文屬于翻譯文章,原文鏈接為。如果如何把應用放在容器中運行掘金本文適合零基礎,且希望使用運行應用的人士。后端掘金使用構建網站。 nginx 基本入門 - 前端 - 掘金作者:villainthr 本文屬于翻譯文章,原文鏈接為 nginx Beginner’s Guide。是至今為止見過最好的 nginx 入門文章。額。。。沒有之一。 這篇教程簡單介紹了 nginx ...
摘要:開始使用現在創建一個名為的文件,它將會是一個基于的網上書店應用。這將初始化應用程序,并告訴要在這一部分活躍。將為每個元素增加元素。控制器和視圖之間的粘合劑,而且會注入到。現在我們添加書籍數組的對象到對象,這個對象對視圖是可見的。 編者注:我們發現了比較有趣的系列文章《30天學習30種新技術》,準備翻譯,一天一篇更新,年終禮包。以下是第二天技術的譯文。 昨晚我完爆了一天一技術的任務...
閱讀 3316·2021-11-16 11:45
閱讀 4385·2021-09-22 15:38
閱讀 2841·2021-09-22 15:26
閱讀 3347·2021-09-01 10:48
閱讀 827·2019-08-30 15:56
閱讀 715·2019-08-29 13:58
閱讀 1487·2019-08-28 18:00
閱讀 2160·2019-08-27 10:53