1. 程式人生 > 其它 >第四章 Docker入門

第四章 Docker入門

一、背景

為了完成那些不愉快或者平庸的任務,你也會喜歡只做必需之事。這可能是因為你同樣喜歡使用一個簡單易用的工具,來解決那些複雜或費時的工作。

假設你想嘗試一款新的Linux 軟體,但是擔心執行起來的是惡意程式碼。為了保護你的機器,在 Docker 中執行該軟體是很好的第一步。因為Docker 可以幫助大多數普遍軟體使用者利用好強大的安全工具。

如果你是一名系統管理員,將Docker作為軟體管理工具集的基礎,將節省你的時間,讓你專注於高價值的事情,因為 Docker可以最大限度地減少你花在瑣碎工作上的時間。
如果你編寫軟體,通過Docker 釋出,你的使用者會更容易安裝並執行它。在 Docker 封裝的開發環境中編寫軟體,將節省配置或共享環境的時間,因為從軟體的角度來看,每個環境都是一樣的。

假設你擁有或管理大型系統或資料中心。使用Docker 來建立build,測試和部署管道會變得很簡單,因為通過這樣一個管道可以應用到其他任何軟體。

2013年3月推出的 Docker,可以和作業系統協作來打包、分發和執行軟體。你可以把Docker作為軟體分發供應商,用來節省你的時間,讓你專注於高價值的事情。你可以使用Docker構建網路應用,如 Web伺服器、資料庫和郵件伺服器,也可以構建終端應用程式,比如文字編輯器、編譯器、網路分析工具和指令碼;在某些情況下,它甚至可用來執行GUI程式,如網頁瀏覽器和生產力類的軟體。

Linux Docker是一款Linux軟體,但可以很好地執行在大多數作業系統上。

Docker不是一種程式語言,並且也不是構建軟體的框架。Docker 是一個工具,可以幫助解決如安裝、拆卸、升級、分發、信任和管理軟體等常見問題。它是開源的Linux軟體,這意味著任何人都可以為之做出貢獻,Docker因此已在諸多方面受益匪淺。公司贊助開源專案的開發也很常見。在這種意義上,Docker公司(Inc.)是主贊助商。你可以在下面網址找到更多關於Docker 公司的資訊: https://docker.com/company/。

二、Docker概述

Docker 是一個開源專案,誕生於 2013 年初,最初是 dotCloud 公司內部的一個業餘專案。它基於 Google 公司推出的 Go 語言實現。 專案後來加入了 Linux 基金會,遵從了 Apache 2.0 協議,專案程式碼在 GitHub 上進行維護。Docker 自開源後受到廣泛的關注和討論,以至於 dotCloud 公司後來都改名為 Docker Inc。Redhat 已經在其 RHEL6.5 中集中支援 Docker;Google 也在其 PaaS 產品中廣泛應用。Docker 專案的目標是實現輕量級的作業系統虛擬化解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。在 LXC 的基礎上 Docker 進行了進一步的封裝,讓使用者不需要去關心容器的管理,使得操作更為簡便。使用者操作 Docker 的容器就像操作一個快速輕量級的虛擬機器一樣簡單。Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app),更重要的是容器效能開銷極低。

三、Docker基本含義

Docker包括一個命令列程式、一個後臺守護程序,以及一組遠端服務。它解決了常見的軟體問題,並簡化了安裝、執行、釋出和刪除軟體。這一切能夠實現是通過使用一項UNIX技術,稱為容器。

1.什麼是容器?

從歷史上看,UNIX風格的作業系統都使用jail 這個術語來形容一個修改過的執行時環境,以防止該程式訪問受保護的資源。自2005年以來,Sun的 Solaris 10和Solaris 容器釋出後,容器已經成為這樣一個執行環境的首選術語。而我們的目標,已經從防止對受保護資源的訪問,擴充套件到隔離所有的資源,除非明確允許。

使用容器已經是很長一段時間的最佳做法。但手動建立容器,仍然具有挑戰性,而且很容易出錯。錯誤配置的容器卻讓他人產生安全的錯覺。這個問題直到Docker的出現終於得到解決。任何使用Docker執行的軟體其實是在一個容器內執行。Docker使用現有的容器引擎,根據最佳實踐提供一致的Docker構建方案。這給大家帶來了觸手可及且更強的安全性。

有了Docker,使用者以更低的成本獲得容器。隨著Docker和容器引擎改進,你獲得最新和最好用的“jail”功能。不用再緊跟著迅速發展且高技術性的構建強大應用jail 的世界了,相反你只要讓Docker幫你處理這些事情就好。這將節省大量的時間和金錢,並帶來心靈的平靜。

2.Docker在開發和運維中的優勢

對於開發和運維人員來說,最夢寐以求的效果可能就是一次建立和配置,之後可以在任意地方、任意時間讓應用正常執行,而Docker恰恰可以實現這一中級目標。具體來說,在開發和運維過程中,Docker具有以下幾個方面的優勢:

1.更快的交付和部署:
	使用Docker,開發人員可以使用映象來快速構建一套標準的開發環境;開發完之後,測試和運維人員可以直接使用完全相同的環境來部署程式碼。只要是開發測試過的程式碼,就可以確保在生產環境無縫執行。Docker可以快速建立和刪除容器,實現快速迭代,節約開發、測試及部署的時間。

2.更高效的利用資源:
	執行Docker容器不需要額外的虛擬化管理程式的支援,Docker是核心級的虛擬化,可以實現更高的效能,同時對資源的額外需求很低,與傳統的虛擬機器方式相比,Docker的效能要提高1 ~ 2個數量級。

3.更輕鬆的遷移和擴充套件:
	Docker容器幾乎可以在任意的平臺上執行,包括物理機、虛擬機器、公有云、私有云、個人電腦等等,同時支援主流的作業系統發行版本。這種相容效能讓使用者可以在不同的平臺之間輕鬆的遷移應用。

4.更輕鬆的管理和更新:
	使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分發和更新,從而實現自動化並且高效的容器管理。

4. Docker與虛擬機器的比較

作為一種輕量級的虛擬化方式,Docker在執行應用上跟傳統的虛擬機器的方式相比具有如下顯著優勢:

Docker容器啟動很快,啟動和停止可以實現秒級,相比傳統的虛擬機器方式(分鐘級)要快速很多。

Docker容器對系統資源需求很少,一臺主機上可以同時執行數千個Docker容器。

Docker通過類似git設計理念的操作來方便使用者獲取、分發和更新應用映象,儲存複用,增量更新。

Docker通過Dockerfile支援靈活的自動化建立和部署機制,可以提高工作效率,並標準化流程。
特性 容器 虛擬機器
啟動速度 秒級 分鐘級
效能 接近原生 較好
記憶體 MB級 GB級
硬碟適應 MB級 GB級
執行密度 單臺主機支援上千個 單臺主機支援幾個
隔離性 安全隔離 完全隔離
遷移 優秀 一般

四、 Docker與虛擬化

在沒有Docker 的時代,商家通常使用硬體虛擬化(也稱為虛擬機器),以提供隔離。虛擬機器提供虛擬的硬體,可安裝一個作業系統和其他程式。它們需要很長的時間(通常以分鐘計)來建立,也需要顯著的資源開銷,因為它們除了要執行你需要的軟體,還得執行整個作業系統的副本。

不同於虛擬機器,Docker容器不使用硬體虛擬化。執行在Docker容器中的程式介面和主機的 Linux核心直接打交道。因為容器中執行的程式和計算機的作業系統之間沒有額外的中間層,沒有資源被冗餘軟體的執行或虛擬硬體的模擬而浪費掉。這是一個很重要的區別。Docker不是一個虛擬化技術。相反,它可以幫助使用已經內建到作業系統中的容器技術。

Docker以及其他容器技術,都屬於作業系統虛擬化範疇,作業系統細膩化最大的特點就是不需要額外的supervisor支援。Docker虛擬化方式之所以有眾多優勢,跟作業系統虛擬化技術自身的設計和實現分不開。
傳統方式是在硬體層面實現虛擬化,需要有額外的虛擬機器管理應用和虛擬機器作業系統層。Docker容器時在作業系統層面實現虛擬化,直接複用本地主機的作業系統,因此更加輕量級。

五、 Docker概念

Docker中有三個核心概念:映象、容器和倉庫。因此,準確把握這三大概念對於掌握Docker技術尤為重要。

1.映象(Image)
Docker 映象(Image),就相當於是一個 root 檔案系統。比如官方映象 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統的 root 檔案系統。

2.容器(Container)
映象(Image)和容器(Container)的關係,就像是面向物件程式設計中的類和例項一樣,映象是靜態的定義,容器是映象執行時的實體。容器可以被建立、啟動、停止、刪除、暫停等。

3.倉庫(Repository)
用來儲存映象的倉庫。當我們構建好自己的映象之後,需要存放在倉庫中,當我們需要啟動一個映象時,可以在倉庫中下載下來。

六、Docker安裝系統

Docker引擎是使用Docker容器的核心元件,可以在主流的作業系統和雲平臺上使用,包括Linux作業系統、MacOSS和Windows系統上。使用者可以訪問Docker官網(https://www.docker.com/get-started)去獲取Docker安裝包。

七、Docker總結

#1.作業系統的趨勢
1、系統越來越多,也越來越複雜
2、系統之間的相容性得不到保證

#2.容器帶來的優勢
1、解決了一個相對隔離的環境(容器與容器,容器與主機之間互不影響)
2、解決了系統不相容的問題(重點)
3、容器解決了穩定部署的問題

#3.容器軟體:docker
1、基於golang語言開發
2、Linux 基金會
	1)增加知名度
	2)全世界的開發者共同維護軟體的生態系統

#4.docker與虛擬機器的區別
  - 虛擬機器之間的系統級別的隔離
  - docker容器之間的程序級別的隔離

#5.docker倉庫:
https://hub.docker.com/