這篇文章並不是一個大眾化的docker介紹,是本人在學習docker中遇到的問題和存在的疑惑在得到解答後所總結出來的內容。
Docker是什麼?
Docker首先他是一個軟體平臺,讓您可以快速構建、測試和部署應用程式。顧名思義他是一個專案構建部署的工具。但他和一些Maven之類的構建工具有所不同。他並不是將你的程式碼構建起來,而是將你的程式碼封裝起來,實現一次構建任何地方都可以實現。
我們知道要執行一段程式碼或者說一個專案需要配置各種各樣的環境變數以及配置等。就算是執行一個簡單的“Hello World”程式碼,你用python需要配置python的環境變數,用java寫也需要下載java的jvm才能執行。在一些複雜專案裡我們要執行各個服務,例如一般來說我們需要執行許多資料庫(mysql等)、中介軟體(redis、nginx、kafka等)或者apache伺服器等。 這些服務的配置和開啟都需要和系統裡的各種環境配置等深度繫結。所以我們一個系統裡通常只能執行一個專案。
這還不是最糟糕的,最糟糕的是我們程式碼編寫過程中要遇到開發環境、測試環境和線上環境等。這些不同的環境其實就是程式碼在不同的地方執行,也許你作為開發人員在本地電腦上配置好的環境和程式碼是沒有問題的,但是在其他地方部署時卻出現了各種問題。雖然現在的很多技術都在提供的自動化構建,如maven等技術就可以透過一個檔案來控制你的環境版本等。這樣方便你在其他電腦上重新構建該專案。
但是還是沒有解決另一個問題,那就是在一個電腦上只能執行一個專案,這樣一來docker就應運而生。
Docker介紹
Docker是一個平臺,他透過在原先作業系統核心的基礎上透過某些方法實現了多個環境共存,這裡使用的技術是Linux核心的一些技術包括Linux 核心的名稱空間(Namespace)、Linux 核心的控制組(CGroup)、Union 檔案系統、Linux 容器(LXC)。這些技術是是什麼不重要,原理可以後面再去學。現在可以知道的是Docker透過這幾個技術在原先作業系統上面構建了多個虛擬環境,這樣實現了多個專案共存。這裡多個虛擬環境其實就是指各個環境的連結和配置等。透過docker這個平臺來給你自動切換和遮蔽了。
Docker執行起來只是系統中的一個程序,該程序透過上述的幾個技術在原linux核心之上構建虛擬環境,他和VM這些虛擬化技術不同的是,他並不是在上面重新建立了一個虛擬系統,而是在原先系統的基礎上劃分了不同區域,這樣一來的好處是佔用資源少而且可以動態劃分資源。
Docker內容
通常Docker核心技術其實就是映象、容器和資料卷等。這些內容在其他部落格中都詳細介紹了,這裡就不過多介紹。 這裡更多介紹的是對於Docker的理解和應用。
Docker還會有不同容器間通訊以及如何多個服務打包到一個容器裡等各種操作。
Docker應用
有了docker我就可以在寫好一個專案後,將他打包成一個映象,然後在任何可以安裝docker的作業系統中執行。他會借用原作業系統的核心來實現虛擬的環境。這裡值得一提的是如果我寫的專案是執行在linux系統中,但是我現在需要把他執行在windows作業系統上是不是就不能實現了。因為之前說的是他需要藉助原作業系統的功能。
其實是可以實現的,這裡windows和Macos採取的措施是要求系統啟用了 Hyper-V 虛擬化功能,該功能允許在 Windows 系統上建立和管理虛擬機器(VMs)。Hyper-V 虛擬化功能提供了一個完整的虛擬化解決方案,包括虛擬處理器、記憶體、儲存和網路等元件。
這樣一來其實就是wondows虛擬了一個linux作業系統,然後在該作業系統上使用docker,docker在該linux系統上劃分不同的虛擬環境。
docker的介紹就到這裡,以上就是我對docker的一些簡單理解。