Docker教程-介紹Docker與容器化

【注】本文譯自:
https://www.edureka.co/blog/docker-tutorial
本教程將為您提供 Docker 的概念和實踐知識-一種新時代的容器化技術(shù)。
在本教程中,我們將重點關(guān)注以下主題:
什么是虛擬化?
什么是容器化?
容器化相對于虛擬化的優(yōu)勢
介紹 Docker
Docker 的好處
虛擬化與容器化
Docker 安裝
Dockerfile, Docker 鏡像與 Docker 容器
什么是 Docker Hub?
Docker 架構(gòu)
Docker Compose
Docker 正變得越來越流行,其用法正像野火一樣擴散。Docker 越來越受歡迎的原因是它可以在 IT 組織中使用的程度。很少有工具能同時對開發(fā)人員和系統(tǒng)管理員有用。Docker 真正兌現(xiàn)了其“構(gòu)建、運輸和運行”的承諾。
簡而言之,Docker 是一個軟件容器化平臺,這意味著您可以構(gòu)建您的應(yīng)用程序,將它們及其依賴項打包到一個容器中,然后可以輕松地將這些容器傳輸?shù)狡渌麢C器上運行。
例如:讓我們考慮一個同時使用 Ruby 和 Python 編寫的基于 linux 的應(yīng)用程序。此應(yīng)用程序需要特定版本的 linux、Ruby 和 Python。為了避免在用戶端出現(xiàn)任何版本沖突,可以創(chuàng)建一個 Linux docker 容器,并隨應(yīng)用程序一起安裝所需的 Ruby 和 Python 版本?,F(xiàn)在,最終用戶可以通過運行此容器輕松地使用應(yīng)用程序,而不必?fù)?dān)心依賴關(guān)系或任何版本沖突。
這些容器使用容器化,可以將其視為虛擬化的演進版本。使用虛擬機也可以完成相同的任務(wù),但是效率不是很高。
在這一點上,我通常會收到一個問題,即虛擬化和容器化之間有什么區(qū)別? 這兩個術(shù)語彼此非常相似。那么,讓我先告訴您什么是虛擬化?
什么是虛擬化?
虛擬化是一種在主機操作系統(tǒng)之上導(dǎo)入來賓操作系統(tǒng)的技術(shù)。這項技術(shù)在一開始就是一個啟示,因為它允許開發(fā)人員在不同的虛擬機中運行多個操作系統(tǒng),而這些虛擬機都在同一主機上運行。這消除了對額外硬件資源的需求。 虛擬機或虛擬化的優(yōu)點是:
可以在同一臺計算機上運行多個操作系統(tǒng)
發(fā)生故障時,維護和恢復(fù)非常容易
由于減少了對基礎(chǔ)設(shè)施的需求,總擁有成本也減少了

在上圖中,您可以看到有一個主機操作系統(tǒng),在該主機操作系統(tǒng)上正在運行 3 個來賓操作系統(tǒng),這些操作系統(tǒng)只是虛擬機。
如您所知,沒有什么是完美的,虛擬化也有一些缺點。在同一主機操作系統(tǒng)中運行多個虛擬機會導(dǎo)致性能下降。這是因為來賓操作系統(tǒng)在主機操作系統(tǒng)之上運行,該操作系統(tǒng)將具有自己的內(nèi)核以及一組庫和依賴項。這占用了大量系統(tǒng)資源,即硬盤、處理器、尤其是 RAM。
使用虛擬化技術(shù)的虛擬機的另一個問題是啟動需要花費近一分鐘的時間。對于實時應(yīng)用程序,這是非常關(guān)鍵的。
以下是虛擬化的缺點:
運行多個虛擬機會導(dǎo)致性能不穩(wěn)定
虛擬機管理程序的效率不如主機操作系統(tǒng)
開機過程很長,需要時間
這些缺點導(dǎo)致出現(xiàn)了一種稱為容器化的新技術(shù)。現(xiàn)在,讓我告訴您有關(guān)容器化的知識。
什么是容器化?
容器化是將虛擬化帶入操作系統(tǒng)級別的技術(shù)。虛擬化為硬件帶來了抽象,而容器化為操作系統(tǒng)帶來了抽象。請注意,容器化也是虛擬化的一種。但是,容器化效率更高,因為這里沒有來賓操作系統(tǒng),它使用主機的操作系統(tǒng),與虛擬機不同,可以在需要時共享相關(guān)的庫和資源。特定于應(yīng)用程序的容器二進制文件和庫在主機內(nèi)核上運行,這使處理和執(zhí)行非??臁<词箚右粋€容器也只需要一秒鐘的時間。因為所有容器都共享,所以將托管操作系統(tǒng)并僅保留與應(yīng)用程序相關(guān)的二進制文件和庫。它們比虛擬機輕巧且速度更快。
容器化相對于虛擬化的優(yōu)勢:
同一操作系統(tǒng)內(nèi)核上的容器更輕、更小
與虛擬機相比,資源利用率更高
啟動過程很短,需要幾秒鐘

在上圖中,您可以看到存在一個由所有容器共享的主機操作系統(tǒng)。容器僅包含特定于應(yīng)用程序的庫,這些庫對于每個容器都是獨立的,并且它們速度更快且不會浪費任何資源。
所有這些容器均由非主機操作系統(tǒng)固有的容器化層處理。因此,需要一個軟件,該軟件可以使您在主機操作系統(tǒng)上創(chuàng)建和運行容器。
現(xiàn)在,讓我來介紹Docker。
Docker 簡介
Docker 是一個容器化平臺,以容器的形式將您的應(yīng)用程序及其所有依賴項打包在一起,以確保您的應(yīng)用程序在任何環(huán)境中都能無縫運行。

如上圖所示,每個應(yīng)用程序?qū)⒃趩为毜娜萜魃线\行,并具有自己的一組庫和依賴項。這也確保了進程級別的隔離,這意味著每個應(yīng)用程序都獨立于其他應(yīng)用程序,從而使開發(fā)人員確信他們可以構(gòu)建不會相互干擾的應(yīng)用程序。
作為開發(fā)人員,我可以構(gòu)建一個容器,上面裝有不同的應(yīng)用程序,然后將其交給我的質(zhì)量檢查團隊,他們只需運行該容器即可復(fù)制開發(fā)人員環(huán)境。
Docker 的好處
現(xiàn)在,QA 團隊無需安裝所有依賴的軟件和應(yīng)用程序來測試代碼,這可以幫助他們節(jié)省大量時間和精力。從開發(fā)到部署,這也確保了工作環(huán)境在流程中涉及的所有個人之間是一致的。可以輕松擴展系統(tǒng)的數(shù)量,并且可以輕松地在其上部署代碼。
虛擬化與容器化
虛擬化和容器化都可以讓您在主機中運行多個操作系統(tǒng)。
虛擬化處理在一臺主機中創(chuàng)建許多操作系統(tǒng)的問題。另一方面,容器化將根據(jù)需要為每種類型的應(yīng)用程序創(chuàng)建多個容器。

從圖中可以看出,主要區(qū)別在于虛擬化中有多個來賓操作系統(tǒng),而容器化中卻沒有。與重型虛擬化相比,容器化的最好之處在于它非常輕巧。
現(xiàn)在,讓我們安裝 Docker。
安裝 Docker:
我將在我的 Ubuntu 17.10 計算機上安裝 Docker。以下是安裝 Docker 的步驟:
安裝所需的軟件包
設(shè)置 Docker 倉庫
在 Ubuntu 上安裝 Docker
1. 安裝所需的軟件包:
您的系統(tǒng)中需要安裝某些軟件包才能安裝 Docker。執(zhí)行以下命令以安裝那些軟件包。
sudo apt-get install curl apt-transport-https ca-certificates software-properties-common

2. 設(shè)置 Docker 倉庫:
現(xiàn)在,導(dǎo)入 Dockers 官方 GPG 密鑰以驗證軟件包簽名,然后再使用 apt-get 安裝它們。在終端上運行以下命令:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add

現(xiàn)在,在您的 Ubuntu 系統(tǒng)上添加包含以下 Docker 軟件包(包括其依賴項)的 Docker 存儲庫,以執(zhí)行以下命令:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

3. 在 Ubuntu 上安裝 Docker
現(xiàn)在,您需要升級 apt 索引并安裝 Docker 社區(qū)版,為此,請執(zhí)行以下命令:
sudo apt-get update
sudo apt-get install docker-ce


恭喜你!您已成功安裝 Docker。
現(xiàn)在讓我們看看一些重要的 Docker 概念。
Dockerfile, Docker 鏡像與 Docker 容器:
Docker 鏡像是通過在稱為 Dockerfile 的文件中寫入的命令序列創(chuàng)建的。
當(dāng)使用 docker 命令執(zhí)行該 Dockerfile 時,它會生成帶有名稱的 Docker 鏡像。
當(dāng)通過“ docker run”命令執(zhí)行此映像時,它將自行啟動執(zhí)行時必須啟動的任何應(yīng)用程序或服務(wù)。
Docker Hub:
Docker Hub 就像 Docker 鏡像的GitHub。它基本上是一個云注冊中心,您可以在其中找到不同社區(qū)上傳的 Docker 鏡像,也可以開發(fā)自己的鏡像并上傳到 Docker Hub 上,但是首先,您需要在 DockerHub 上創(chuàng)建一個帳戶。

Docker 架構(gòu):
它由一個Docker引擎組成,該引擎是一個具有三個主要組件的客戶端-服務(wù)器應(yīng)用程序:

服務(wù)器是一種長期運行的程序,稱為守護程序進程(docker 命令)。
REST API,它指定程序可以用來與守護程序進行通信并指示其操作的接口。
命令行界面(CLI)客戶端(docker 命令)。
CLI 使用 Docker REST API 通過腳本或直接 CLI 命令來控制 Docker 守護程序或與 Docker 守護程序進行交互。許多其他 Docker 應(yīng)用程序都使用基礎(chǔ) API 和 CLI。
最后,我將討論 Docker Compose。
Docker Compose:
Docker Compose 基本上用于將多個 Docker 容器作為單個服務(wù)器運行。讓我給你舉個例子:
假設(shè)我有一個需要 WordPress、Maria DB 和 PHP MyAdmin 的應(yīng)用程序。我可以創(chuàng)建一個文件,該文件可以將兩個容器作為服務(wù)啟動,而無需分別啟動每個容器。這真的很有用,尤其是在您具有微服務(wù)架構(gòu)的情況下。