歡迎您光臨本站 註冊首頁

· docker教程雜誌閱讀

Docker 入門教程

admin @ 2020-04-21 reply:0

    2013年發布至今, Docker 一直廣受矚目,被認為可能會改變軟體行業。

但是,許多人並不清楚 Docker 到底是什么,要解決什么問題,好處又在哪裡?本文就來詳細解釋,幫助大家理解它,還帶有簡單易懂的例項,教你如何將它用於日常開發。

軟體開發最大的麻煩事之一,就是環境配置。使用者計算機的環境都不相同,你怎么知道自家的軟體,能在那些機器跑起來?

使用者必須保證兩件事:作業系統的設定,各種庫和元件的安裝。只有它們都正確,軟體才能執行。舉例來說,安裝一個 Python 應用,計算機必須有 Python 引擎,還必須有各種依賴,可能還要配置環境變數。

如果某些老舊的模組與當前環境不相容,那就麻煩了。開發者常常會說:"它在我的機器可以跑了”(It works on my machine),言下之意就是,其他機器很可能跑不了。

環境配置如此麻煩,換一臺機器,就要重來一次,曠日費時。很多人想到,能不能從根本上解決問題,軟體可以帶環境安裝?也就是說,安裝的時候,把原始環境一模一樣地複製過來。

虛擬機器(virtual machine)就是帶環境安裝的一種解決方案。它可以在一種作業系統裡面執行另一種作業系統,比如在 Windows 系統裡面執行 Linux 系統。應用程式對此毫無感知,因為虛擬機器看上去跟真實系統一模一樣,而對於底層系統來說,虛擬機器就是一個普通檔案,不需要了就刪掉,對其他部分毫無影響。

雖然使用者可以透過虛擬機器還原軟體的原始環境。但是,這個方案有幾個缺點。

(1)資源佔用多

虛擬機器會獨佔一部分記憶體和硬碟空間。它執行的時候,其他程式就不能使用這些資源了。哪怕虛擬機器裡面的應用程式,真正使用的記憶體只有 1MB,虛擬機器依然需要幾百 MB 的記憶體才能執行。

(2)冗餘步驟多

虛擬機器是完整的作業系統,一些系統級別的操作步驟,往往無法跳過,比如使用者登入。

(3)啟動慢

啟動作業系統需要多久,啟動虛擬機器就需要多久。可能要等幾分鐘,應用程式才能真正執行。

由於虛擬機器存在這些缺點,Linux 發展出了另一種虛擬化技術:Linux 容器(Linux Containers,縮寫為 LXC)。

Linux 容器不是模擬一個完整的作業系統,而是對程序進行隔離。或者說,在正常程序的外面套了一個保護層。對於容器裡面的程序來說,它接觸到的各種資源都是虛擬的,從而實現與底層系統的隔離。

由於容器是程序級別的,相比虛擬機器有很多優勢。

(1)啟動快

容器裡面的應用,直接就是底層系統的一個程序,而不是虛擬機器內部的程序。所以,啟動容器相當於啟動本機的一個程序,而不是啟動一個作業系統,速度就快很多。

(2)資源佔用少

容器只佔用需要的資源,不佔用那些沒有用到的資源;虛擬機器由於是完整的作業系統,不可避免要佔用所有資源。另外,多個容器可以共享資源,虛擬機器都是獨享資源。

(3)體積小

容器只要包含用到的元件即可,而虛擬機器是整個作業系統的打包,所以容器檔案比虛擬機器檔案要小很多。

總之,容器有點像輕量級的虛擬機器,能夠提供虛擬化的環境,但是成本開銷小得多。

Docker 屬於 Linux 容器的一種封裝,提供簡單易用的容器使用介面。它是目前最流行的 Linux 容器解決方案。

Docker 將應用程式與該程式的依賴,打包在一個檔案裡面。執行這個檔案,就會生成一個虛擬容器。程式在這個虛擬容器裡執行,就好像在真實的物理機上執行一樣。有了 Docker,就不用擔心環境問題。

總體來說,Docker 的介面相當簡單,使用者可以方便地建立和使用容器,把自己的應用放入容器。容器還可以進行版本管理、複製、分享、修改,就像管理普通的程式碼一樣。

Docker 的主要用途,目前有三大類。

(1)提供一次性的環境。比如,本地測試他人的軟體、持續整合的時候提供單元測試和構建的環境。

(2)提供彈性的雲服務。因為 Docker 容器可以隨開隨關,很適合動態擴容和縮容。

(3)組建微服務架構。透過多個容器,一臺機器可以跑多個服務,因此在本機就可以模擬出微服務架構。

Docker 是一個開源的商業產品,有兩個版本:社群版(Community Edition,縮寫為 CE)和企業版(Enterprise Edition,縮寫為 EE)。企業版包含了一些收費服務,個人開發者一般用不到。下面的介紹都針對社群版。

Docker CE 的安裝請參考官方文件。

安裝完成後,執行下面的命令,驗證是否安裝成功。

Docker 需要使用者具有 sudo 許可權,為了避免每次命令都輸入 sudo ,可以把使用者加入 Docker 使用者組(官方文件)。

Docker 是伺服器----客戶端架構。命令列執行 docker 命令的時候,需要本機有 Docker 服務。如果這項服務沒有啟動,可以用下面的命令啟動(官方文件)。

Docker 把應用程式及其依賴,打包在 image 檔案裡面。只有透過這個檔案,才能生成 Docker 容器。image 檔案可以看作是容器的模板。Docker 根據 image 檔案生成容器的例項。同一個 image 檔案,可以生成多個同時執行的容器例項。

image 是二進位檔案。實際開發中,一個 image 檔案往往透過繼承另一個 image 檔案,加上一些個性化設定而生成。舉例來說,你可以在 Ubuntu 的 image 基礎上,往裡面加入 Apache 伺服器,形成你的 image。

image 檔案是通用的,一臺機器的 image 檔案複製到另一臺機器,照樣可以使用。一般來說,為了節省時間,我們應該盡量使用別人製作好的 image 檔案,而不是自己製作。即使要定製,也應該基於別人的 image 檔案進行加工,而不是從零開始製作。

為了方便共享,image 檔案製作完成後,可以上傳到網上的倉庫。Docker 的官方倉庫 Docker Hub 是最重要、最常用的 image 倉庫。此外,出售自己製作的 image 檔案也是可以的。

下面,我們透過最簡單的 image 檔案"hello world",感受一下 Docker。

需要說明的是,國內連線 Docker 的官方倉庫很慢,還會斷線,需要將預設倉庫改成國內的映象網站,具體的修改方法在下一篇文章的第一節。有需要的朋友,可以先看一下。

首先,執行下面的命令,將 image 檔案從倉庫抓取到本地。

上面程式碼中, docker image pull 是抓取 image 檔案的命令。 library/hello-world 是 image 檔案在倉庫裡面的位置,其中 library 是 image 檔案所在的組, hello-world 是 image 檔案的名字。

由於 Docker 官方提供的 image 檔案,都放在 library 組裡面,所以它的是預設組,可以省略。因此,上面的命令可以寫成下面這樣。

抓取成功以後,就可以在本機看到這個 image 檔案了。

現在,執行這個 image 檔案。

docker container run 命令會從 image 檔案,生成一個正在執行的容器例項。

注意, docker container run 命令具有自動抓取 image 檔案的功能。如果發現本地沒有指定的 image 檔案,就會從倉庫自動抓取。因此,前面的 docker image pull 命令並不是必需的步驟。

如果執行成功,你會在螢幕上讀到下面的輸出。

[admin via ] Docker 入門教程已經有408次圍觀

http://coctec.com/magazine/show-post-item-106.html