Docker這個詞是2014年的時候第一次接觸到,當時特意百度了一下,看看這項技術能夠解決什么問題,僅限于了解之后也就不了了之。再次對這個詞開始感興趣是因為要在組內推行分組自動化測試,而Docker對自動化測試環境的高效利用,可以解決測試環境不足的問題。接下來我們來講講Docker的相關內容。
什么是Docker?
- Docker是基于Go語言實現的開源項目,誕生于2013年初,最初發起者是dotCloud公司。Docker自開源后收到廣泛的關注和討論,目前已經有多個相關項目,逐漸形成了圍繞Docker的生態體系。dotCloud公司后來也改名為Docker Inc,專注于Docker相關技術和產品的開發。
- 現在主流的Linux操作系統都已經支持Docker。Google公司宣稱在其PaaS平臺及服務產品中廣泛應用了Docker。微軟公司宣布和Docker公司合作,以加強其云平臺Azure對Docker的支持。亞馬遜云也提供對Docker的支持。國內的網易蜂巢、阿里云,騰訊云也都支持Docker容器,容器技術的應用已經逐漸成為業內主流選擇。
- Docker的主要目標是“Build,Ship,and Run Any App,Anywhere”,即通過對應用組件的封裝(Packaging)、分發(Distribution)、 部署(Deployment)、運行(Runtime)等生命周期的管理,達到應用組件級別的“一次封裝,到處運行”。這里的應用組件,既可以是一個Web 應用,也可以是一套數據庫服務,甚至是一個操作系統或編譯器。可以說Docker為應用的開發和部署提供了“一站式”的解決方案。
Docker和虛擬機的區別
作為一種輕量級的虛擬化方式,Docker在運行應用上跟傳統的虛擬機方式相比具有顯著優勢。如下圖所示。
安裝Docker
Docker支持在主流的操作系統平臺上使用,包括Ubuntu、CentOS、Windows以及MacOS系統等。當然,在Linux系列平臺上是原生支持,使用體驗更好。以下是Docker支持部分系統的截圖。
安裝過程就不在多述,官網有詳細介紹https://www.docker.com/community-edition。
Docker的三大核心概念,鏡像(Image)、容器(Container)、倉庫(Repository)。
三者之間的關系可以由上圖看出,簡單總結起來倉庫是存放鏡像的,把鏡像啟動起來后就是容器。
鏡像(Image)
Docker鏡像(Image)類似于虛擬機鏡像,可以將它理解為一個面向Docker引擎的只讀模板,鏡像是創建Docker容器的基礎。通過版本管理和增量的文件系統,Docker提供了一套十分簡單的機制來創建和更新現有的鏡像,用戶甚至可以從網上下載一個已經做好的應用鏡像,并通過簡單的命令就可以直接使用。
官方的鏡像倉庫地址:https://hub.docker.com。
容器(Container)
Docker容器(Container)類似于一個輕量級的沙箱,Docker利用容器來運行和隔離應用。容器是從鏡像創建的應用運行實例,可以將其啟動、開始、停止刪除,而這些容器都是相互隔離、互不可見的。簡單地說,容器是鏡像的一個運行實例,所不同的是,它帶有額外的可寫文件層。Docker容器文件系統圖如下。
倉庫(Repository)
倉庫(Repository)是集中存放鏡像的地方。一個容易與之混淆的概念是注冊服務器(Registry)。實際上注冊服務器是存放倉庫的具體服務器,每個服務器上可以有多個倉庫,而每個倉庫下面有多個鏡像。倉庫又分公共倉庫和私有倉庫。
倉庫和注冊服務器的區別可以見下圖。
Docker能改變什么?
總結起來有以下幾個方面。
- 更高效的利用系統資源。相較于虛擬機docker容器的性能更好,能起更多的應用。
- 一致的運行環境。開發、測試、在線確認、在線的運行環境可以保持一致都統一存儲為鏡像,在不同的環境運行相同的鏡像即可,可以保證各個階段應用運行環境的一致性。
- 持續交付和部署。由于各個運行環境的一致性,使得自動化測試環境更加方便快捷,持續交付和部署也變的更加便捷。
- 更輕松的遷移系統。因為應用運行的依賴環境都在docker容器內,所以進行系統遷移,從一個環境遷移到另外一個環境,更加方便和快捷,只需將鏡像文件拷貝到對應的環境,啟動起來即可。不在需要繁瑣的配置各種依賴的軟件及系統版本,使得遷移更加高效順暢。