Docker 解決了軟件環境部署復雜的問題。
對於一個傳統的軟件工程,開發人員把寫好的代碼放到服務器上去運行是一件很頭疼的事情,因為常常會出現環境不兼容而導致各種各樣的 Bug。
比如說,開發是在 windows 系統下編寫的代碼,放到 linux 服務器上可能會出問題;開發在本地依賴了一個系統自帶的驅動,服務器上卻沒有這個驅動;開發在本地設置了很多環境變量,服務器上又得重新設置。。。
在軟件部署的時候,經常會發生在這台機器上可以跑,但是在另一台機器上卻運行失敗的情況。運維人員需要不斷在開發環境和服務器環境之間調試。
有了 Docker, 只需要簡單的幾行命令,就可以做到所有的運行環境都一致。
Docker 簡化了環境配置流程
Docker 使用的技術幾乎沒有新技術,大多是對 Linux 已經存在的技術的封裝。Docker 中的容器,是使用 Linux 之前的一些技術,把開發需要設置的環境,全部隔離在一起,形成一個集裝箱。當有其他的環境需要配置的時候,只需要復制一個集裝箱就可以了。
容器可以輕松創建和銷毀
在環境配置的時候,還可以使用創建虛擬機的方式來實現環境同步。如果服務器用的是 centos 的系統,可以在開發的時候就用 centos 開發。這確實解決了一些問題,但是還是需要去獨立配置每一台機器。而且,虛擬機本身對多個程序之間的環境不兼容的時候無能為力,可能需要借助第三方的一些管理工具,而 Docker 卻可以輕松在一台機器上運行多個容器。
Docker 容器和虛擬機
容器不是一台機器。Docker 利用的是 Linux 的資源分離機制,例如 cgroups,以及 Linux 核心命名空間(namespaces),來建立獨立的容器(containers)。容器看上去是一台機器,實際上是一個進程。
相比於虛擬機,容器的優勢主要有:
- 資源占用少
- 啟動速度快
- 本身體積小
Docker 給軟件開發領域帶來的不僅僅是提供環境,可以說它直接帶火了 Golang。因為 Docker 容器創建和銷毀非常方便,很適合用來動態擴容和縮容,可以直接用在雲計算當中的彈性服務當中。另外,基於 Docker 容器的隔離特性,一台服務器上可以同時跑很多個程序而做到管理方便,很符合微服務架構的需要。