1. 程式人生 > 實用技巧 >docker簡介學習

docker簡介學習

一、環境配置的難題

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

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

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

  環境配置如此麻煩,換一臺機器,就要重來一次,曠日費時。很多人想到,能不能從根本上解決問題,軟體可以帶環境安裝

?也就是說,安裝的時候,把原始環境一模一樣地複製過來。

二、虛擬機器

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

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

1、資源佔用多

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

2、冗餘步驟多

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

3、啟動慢

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

三、Linux 容器

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

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

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

1、啟動快

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

2、資源佔用少

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

3、體積小

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

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

四、Docker 是什麼?

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

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

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

五、Docker 的用途

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

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

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

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

六、Docker 的安裝

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

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

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

$ docker version
# 或者
$ docker info

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

$ sudo usermod -aG docker $USER

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

# service 命令的用法
$ sudo service docker start

# systemctl 命令的用法
$ sudo systemctl start docker