Docker與容器

Docker介紹

1. Docker 主要解決什麼問題

  Docker 對外宣稱的是Build、Ship 和Run,Docker 要解決的核心問題就是快速地幹這三件事情。它經過將運行環境和應用程序打包到一塊兒,來解決部署的環境依賴問題,真正作到跨平臺的分發和使用。而這一點和DevOps不謀而合,經過Docker能夠大大提高開發、測試和運維的效率。在這個移動互聯網的時代,若是一個工具可以節省人力,提高效率,一定會流行起來。web

2. Docker 的歷史

  以前提到一家公司叫DotCloud,這家公司是一家法國的公司,最初也是提供PaaS服務的,他們提供了對多種語言的運行環境支持,如Java、Python、Ruby、Node.js等。可是,可能叫生不逢時吧,在PaaS 領域有太多的巨頭和大企業了,有一天SolomonHykes(Docker之父)就召集了公司的哥兒幾個來商量了一下,最後得出的結論是,若是要和那些大廠商硬幹確定是不行的,那麼幹脆就把他們作的項目Docker 開源了。即便賺不到錢,至少也在開源社區獲得一個好名聲。
  所以,在2013 年3 月,Docker 正式以開源軟件形式發佈了。正是因爲此次開源,讓容器領域煥發了第二春,截至2015 年11 月,Docker 在GitHub 上收到了25600 個贊,超過6800 次克隆,以及超過1100 名的貢獻者,成爲20 個最具影響力的GitHub 開源項目。能夠說,Docker 是繼Linux 以後,最讓人感到興奮的系統層面的開源項目。據不徹底統計,包括Docker 公司、Red Hat、IBM、Google、Cisco、亞馬遜及國內的華爲等,都在爲它貢獻代碼。在美國,幾乎全部的雲計算廠商都在擁抱Docker 這個生態圈。docker

3. Docker 是什麼

  Docker 實際上是容器化技術的其中一種實現,根據咱們以前的介紹,容器化技術並非最近纔出現的,那爲何Docker 會如此的火爆呢?仍是這個時代造就的,由於咱們處在一個雲計算髮展異常迅猛的時代,而云計算又是全部移動互聯網、IT,以及將來消費者行業的基礎。從雲計算服務的三層架構能夠看出,傳統的IaaS 層、虛擬機是基礎組成部分,而虛擬機都是基於Hyper-V 架構的,也就是說,每個虛擬機都會運行一個完整的操做系統,一個操做系統至少須要佔用5GB 左右的磁盤空間,可是操做系統對於咱們來講是徹底無用的,咱們關心的是虛擬主機所能提供的服務。所以,迫切須要輕量級的主機,那就是Docker 容器。咱們能夠看一下,Docker 和虛擬機的區別。
這裏寫圖片描述
  容器因爲省去了操做系統,整個層級更簡化,能夠在單臺服務器上運行更多的應用,而這正是IaaS 所須要的,可能5GB 左右的空間對你來講不是什麼大事,可是若是須要對外提供成千上萬的主機,那就是不得不考慮的問題,而這正是容器虛擬化要解決的問題。小程序

容器和鏡像

  容器和鏡像是Docker 最核心的部分,使用Docker 時實際就是在容器裏面運行一個鏡像,本節將分別對二者作介紹。安全

1. 什麼是容器

  不少用戶在接觸Docker 之初都會認爲容器就是一種輕量級的虛擬機,但實際上,容器和虛擬機有很是大的區別。從根本形態上來看,容器其實就是運行在操做系統上的一個進程,只不過加入了對資源的隔離和限制。在學習操做系統時,都會學習什麼是進程,簡單地講,進程就是一個運行的程序。傳統上,在運行一個進程時,若是裏面出現死循環,CPU 就會一下被佔用完;若是出現內存泄露或者大內存分配,就可能會把系統的內存用完,這是由於默認進程間共用了CPU 和內存。可是這種不進行任何隔離的處理方式,就會遇到相互間干擾的問題,在企業級產品環境中,這一點是很是致命的,任何一個小程序均可能致使整個系統的不可用。所以,早在2006 年就出現了進程間的資源隔離技術,後來Linux 也一樣有了相似的實現。最初,Linux 的容器技術是基於LXC 的,Docker 在易用性和穩定性方面作了很大改善,其三大核心功能就是CGroups、Namespace 和UnionFS。CGroups 技術用來限定一個進程的資源使用;在一個操做系統之上,用戶ID、機器名等資源是全局的,運行的進程間都是訪問同一份資源,爲了達到隔離的目的,Linux 又出現了Namespace 技術用來劃分不一樣的命名空間;而UnionFS 則是用來處理分層鏡像的功能。服務器

說明:LXC 是Docker 早期使用的技術,後來Docker 自行開發了libcontainer,兩者都是對Linux 內核功能的封裝。
  在安裝了Docker 的機器上,能夠經過run 命令啓動容器,並經過ps 命令查看已存在的容器。架構

2. 什麼是鏡像

  容器是一個動態的概念,而鏡像是一個相對靜止的概念。簡單來講,鏡像就是容器中的文件系統。早在1980 年就出現了文件系統管理技術,那就是chroot 系統調用。經過該技術能夠改變進程運行的工做目錄,並將其限定在這個目錄中,不過它只能作簡單的隔離,並且存在安全隱患。所以,Docker 就使用了,注意不是設計了一個Layered FS,它把文件系統分紅多個層,使多個容器間可使用公共的部分。而鏡像就是由Layered FS 組成的,而且它是隻讀的。當容器運行時,會在鏡像之上再加上一層可讀可寫層。運維

說明:鏡像除了包含文件系統,還集成了一部分容器運行的參數,能夠將鏡像看做容器的模板。svg

3. 容器和鏡像的關係

  容器和鏡像是密切相關的,兩者缺一不可,也是能夠相互進行轉換的。
圖片描述
  Docker 的鏡像最初是從官方的倉庫拉取得到的,以後經過docker run 便可啓動一個容器運行。當須要將容器轉化爲鏡像時,能夠經過docker commit 進行轉化。工具

本文同步分享在 博客「xiangzhihong8」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。學習

相關文章
相關標籤/搜索