Docker筆記1:Docker 的介紹

 

 目  錄linux

 

 

一、Docker 簡介

 

    Docker 提供了一個能夠運行你的應用程序的封套(envelope),或者說容器。它本來是 dotCloud 啓動的一個業餘項目,並在前些時候開源了。它吸引了大量的關注和討論,致使 dotCloud 把它重命名到 Docker Inc。它最初是用 Go 語言編寫的,它就至關因而加在 LXC(LinuX Containers,linux 容器)上的管道,容許開發者在更高層次的概念上工做。
    Docker 擴展了 Linux 容器(Linux Containers),或着說 LXC,經過一個高層次的 API 爲進程單獨提供了一個輕量級的虛擬環境。Docker 利用了 LXC, cgroups 和 Linux 本身的內核。和傳統的虛擬機不一樣的是,一個 Docker 容器並不包含一個單獨的操做系統,而是基於已有的基礎設施中操做系統提供的功能來運行的。
 
    Docker相似虛擬機的概念,可是與虛擬化技術的不一樣點在於下面幾點:
  1. 虛擬化技術依賴物理CPU和內存,是硬件級別的;而docker構建在操做系統上,利用操做系統的containerization技術,因此docker甚至能夠在虛擬機上運行。
  2. 虛擬化系統通常都是指操做系統鏡像,比較複雜,稱爲「系統」;而docker開源並且輕量,稱爲「容器」,單個容器適合部署少許應用,好比部署一個redis、一個memcached。
  3. 傳統的虛擬化技術使用快照來保存狀態;而docker在保存狀態上不只更爲輕便和低成本,並且引入了相似源代碼管理機制,將容器的快照歷史版本一一記錄,切換成本很低。
  4. 傳統的虛擬化技術在構建系統的時候較爲複雜,須要大量的人力;而docker能夠經過Dockfile來構建整個容器,重啓和構建速度很快。更重要的是Dockfile能夠手動編寫,這樣應用程序開發人員能夠經過發佈Dockfile來指導系統環境和依賴,這樣對於持續交付十分有利。
  5. Dockerfile能夠基於已經構建好的容器鏡像,建立新容器。Dockerfile能夠經過社區分享和下載,有利於該技術的推廣。
 
    Docker 會像一個可移植的容器引擎那樣工做。它把應用程序及全部程序的依賴環境打包到一個虛擬容器中,這個虛擬容器能夠運行在任何一種 Linux 服務器上。這大大地提升了程序運行的靈活性和可移植性,不管需不須要許可、是在公共雲仍是私密雲、是否是裸機環境等等。
    Docker也是一個雲計算平臺,它利用Linux的LXC、AUFU、Go語言、cgroup實現了資源的獨立,能夠很輕鬆的實現文件、資源、網絡等隔離,其最終的目標是實現相似PaaS平臺的應用隔離。
 
    Docker 由下面這些組成:
  1. Docker 服務器守護程序(server daemon),用於管理全部的容器。
  2. Docker 命令行客戶端,用於控制服務器守護程序。
  3. Docker 鏡像:查找和瀏覽 docker 容器鏡像。
 

    Docker是經過內核虛擬化技術(namespaces及cgroups cpu、內存、磁盤IO等)來提供容器的資源隔離與安全保障等。因爲Docker經過操做系統層的虛擬化實現隔離,因此Docker容器在運行時,不須要相似虛擬機(VM)額外的操做系統開銷,提供資源利用率。web

    Docker 是dotCloud也就說如今的Docker公司在2013年3月發佈的,一開始是基於LXC項目來建立單個應用程序容器。Docker如今已經開發了他們着急的直接使用核心namesapces和cgroup的工具:libcontainer。redis

 

    Docker 的主要目標是「Build,Ship and Run any App,Anywhere」,構建、運輸、到處運行。docker

    一次構建,到處運行。shell

    Docker 是一種軟件的打包技術。數據庫

 

    構建:作一個 docker 鏡像安全

    運輸:docker pull服務器

    運行:啓動一個容器網絡

    每個容器, 它都有本身的文件系統 rootfs。memcached

 

    kvm 解決了硬盤和操做系統之間的依賴

    kvm 獨立的虛擬磁盤,xml配置文件

 

    Docker 解決了軟件和操做系統環境之間的依賴,可以讓獨立服務或應用程序在不通的環境中,獲得相同的運行結果。

    Docker 鏡像有本身的文件系統。

    Docker 容器是一種輕量級、可移植、自包含的軟件打包技術,使應用程序能夠在幾乎任何地方以相同的方式運行。開發人員在句子筆記本上建立並測試號的容器,無需任何修改就可以在生產系統的虛擬機、物理服務器或公有云主機上運行。

 


 

二、Docker 特性

    文件系統隔離:每一個進程容器運行在徹底獨立的根文件系統裏。
    資源隔離:可使用cgroup爲每一個進程容器分配不一樣的系統資源,例如CPU和內存。
    網絡隔離:每一個進程容器運行在本身的網絡命名空間裏,擁有本身的虛擬接口和IP地址。
    寫時複製:採用寫時複製方式建立根文件系統,這讓部署變得極其快捷,而且節省內存和硬盤空間。
    日誌記錄:Docker將會收集和記錄每一個進程容器的標準流(stdout/stderr/stdin),用於實時檢索或批量檢索。
    變動管理:容器文件系統的變動能夠提交到新的映像中,並可重複使用以建立更多的容器。無需使用模板或手動配置。
    交互式Shell:Docker能夠分配一個虛擬終端並關聯到任何容器的標準輸入上,例如運行一個一次性交互shell。
 
 

三、Docker 的應用場景

  • Web 應用的自動化打包和發佈。
  • 自動化測試和持續集成、發佈。
  • 在服務型環境中部署和調整數據庫或其餘的後臺應用。
  • 從頭編譯或者擴展示有的 OpenShift 或 Cloud Foundry 平臺來搭建本身的 PaaS 環境。
 

四、Docker 優勢

    1. 簡化程序
        Docker 讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux 機器上,即可以實現虛擬化。Docker改變了虛擬化的方式,使開發者能夠直接將本身的成果放入Docker中進行管理。方便快捷已是 Docker的最大優點,過去須要用數天乃至數週的    任務,在Docker容器的處理下,只須要數秒就能完成。
 
    2.  避免選擇恐懼症
        若是你有選擇恐懼症,仍是資深患者。那麼你可使用 Docker 打包你的糾結!好比 Docker 鏡像;Docker 鏡像中包含了運行環境和配置,因此 Docker 能夠簡化部署多種應用實例工做。好比 Web 應用、後臺應用、數據庫應用、大數據應用好比 Hadoop 集羣、消息隊列等等均可以打包成一個鏡像部署。
 
    3. 節省開支
        一方面,雲計算時代到來,使開發者沒必要爲了追求效果而配置高額的硬件,Docker 改變了高性能必然高價格的思惟定勢。Docker 與雲的結合,讓雲空間獲得更充分的利用。不只解決了硬件管理的問題,也改變了虛擬化的方式。
相關文章
相關標籤/搜索