Docker系列 1 什麼是Docker?

2021-10-08 14:54:42 字數 1926 閱讀 1135

docker是什麼呢?在理解docker之前,我們先來區分清楚兩個概念,容器虛擬機器

相信很多人都有使用過虛擬機器,無論是ubuntu還是其他一些linux系統,每台虛擬機器都必須安裝乙個作業系統,並且分配給它一定的資源,當虛擬機器被開啟時,預先分配給它的資源將被全部占用。每一台虛擬機器都有完整的作業系統,必要的二進位制和庫。

容器技術與虛擬機器不同,容器是與宿主機共享硬體資源和作業系統,可以實現資源的動態分配。容器以程序的形式在使用者的作業系統中執行。容器技術可以在資源受到隔離的程序中執行程式,通過容器我們可以輕鬆打包程式和配置,使其變成容易執行的構建塊,並且部署起來不受使用者作業系統環境的影響。

docker屬於linux容器的一種封裝,提供簡單易用的使用介面。

linux容器不是模擬乙個完整的作業系統,而是對程序進行隔離,相當於在正常的程序外面套了乙個保護層,對於容器內部的程序來說,它接觸到的資源都是虛擬的,從而實現與底層系統的隔離。

docker將應用程式與該程式的依賴,打包在乙個檔案當中,執行這個檔案,就會形成乙個虛擬容器。程式在這個容器中執行,就好像在真實的物理機執行一樣。使用docker,我們可以方便地建立和使用容器,還可以把自己的程式打包成映象,快速部署而不需要重新配置環境。

讀到這裡,你可能對docker在實際開發的作用還是不太了解,讓我們以實際的開發場景來討論使用docker的好處。在開發過程中,部署各種的環境是一件令人頭疼的事情,比如nginx、mysql、jre等等,複雜的環境配置和版本更新使得程式設計師可能出現在本地上能跑通,但在別人電腦就執行不起來的尷尬情況,顯然這是環境問題;資源利用率也是乙個值得考慮的問題,但應用程式越來越多,如果機器配置不夠高,執行虛擬機會非常地吃力;當專案需要遷移時,部署起來非常地不方便。

docker在當中能解決什麼問題呢?

1.我們知道,乙個程式要跑起來,需要這麼幾部分:** + 執行環境 + 配置 + 依賴的服務。**當然就是同乙份**,不同的環境都一樣,通常不會有問題,docker image中包含了執行環境+配置,這對部署相當友好。docker提供了映象檔案,也可以自己打包映象,將nginx或jre打包成乙個個映象,只需在本地拉取映象即可快速完成環境的部署,解決了依賴問題,再也不會出現「我的電腦明明可以執行」的情況。

2.機器的資源利用率提高,不需要再重新在虛擬乙個作業系統而耗費許多的資源。docker的啟動屬於秒級別,虛擬機器需要幾分鐘去啟動。

3.與虛擬機器相比,docker隔離性更弱,屬於程序之間的隔離,虛擬機器可實現系統級別的隔離

4.快速建立、刪除:虛擬化建立是分鐘級別的,docker容器建立是秒級別的,docker的快速迭代性,決定了無論是開發、測試、部署都可以節約大量時間

5.交付、部署:虛擬機器可以通過映象實現環境交付的一致性,但映象分發無法體系化。dockerdockerfile中記錄了容器構建過程,可在集群中實現快速分發和快速部署

下面這張**可以清楚地看到容器相比傳統虛擬機器的優勢所在:

特性容器

虛擬機器啟動

秒級分鐘級

硬碟使用

一般為mb

一般為gb

效能接近原生

弱於系統支援量

單機支援上千個容器

一般是幾十個

docker用於部署那些無狀態的程式非常好用,比如apache、nginx等,但是如果把資料庫等一些需要持久化的資料部署在docker當中,就會存在一些問題。容器中的資料不是持久化,如果容器刪除了,這些資料也就沒了;由於容器之間互相隔離,所以主機上的其它程序不方便訪問這些資料;對這些容器的i/o會經過儲存驅動,然後到達主機,引入了一層間接層,因此效能有所下降

關於Docker你不知道的事 什麼是Docker

之前談虛擬化歷史就說過,docker實際是源自於dotcloud的乙個專案,在2013年開源後就飛速發展。我們今天要談的是,什麼是docker?通常我們提docker的時候,都指的是docker engine,docker engine就是執行在主機上的乙個守護程序,類似於於hyper v的管理程式...

什麼是容器,什麼是Docker

此文 自行文時有所改動 容器是一種輕量級 可移植 自包含的軟體打包技術,使應用程式可以在幾乎任何地方以相同的方式執行。開發人員在自己筆記本上建立並測試好的容器,無需任何修改就能夠在生產系統的虛擬機器 物理伺服器或公有雲主機上執行。docker是容器的一種,還有其他容器,比如 coreos 的 rkt...

docker 什麼是docker容器

docker 是乙個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到乙個可移植的容器中,然後發布到任何流行的linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何介面。creation of lightweight,private paas environments...