docker 簡介

1. docker的功能

docker可以解決虛擬機能夠解決的問題,同時也能夠解決虛擬機由於資源要求過高而無法解決的問題 
docker能處理的問題:

  • 隔離應用依賴

  • 創建應用鏡像並進行復制

  • 創建容易分發的即啓即用的應用

  • 允許實例簡單,快速地擴展

  • 測試應用並隨後銷燬它們

docker背後的想法是創建軟件程序可移植的輕量容器,讓其可以在任何安裝了docker的機器上運行,而不用關心底層操作系統。

2. docker的概念

docker兩個重要的概念:鏡像和容器。除此之外,鏈接和數據卷也很重要。

  • 鏡像 
    docker鏡像類似虛擬機的快照,但更輕量,非常非常輕量。 
    創建docker鏡像有幾種方式,多數是在一個現有鏡像基礎上創建新鏡像,因爲你需要的任何東西大多數都有公告鏡像,包括所有的主流linux發行版。重新構建一個鏡像,也有好幾種方法: 
    要創建一個鏡像,你可以拿一個鏡像,對它進行修改來創建它的子鏡像。實現這個目的的方式有兩種:在一個文件中指定一個基礎鏡像及需要完成的修改;或通過‘運行’一個鏡像,對其進行修改並提交。一般會使用文件來指定所做的變化。

  • 容器: 
    你可以從鏡像中創建容器,這等同於從快照中創建虛擬機,不過更輕量,應用是由容器運行的。 
    例: 
    你可以下載一個Ubuntu的鏡像,通過安裝Gunicorn和Django應用及其依賴項來完成對它的修改,然後從該鏡像中創建一個容器,在它啓動後運行你的應用。 
    容器與虛擬機一樣的,是隔離的,它們也擁有一個唯一ID和唯一供人閱讀的名字,容器對外公開服務是必要的,因此docker允許公開容器的特定端口。 
    與虛擬機相比,容器有一個很大的差異,它們被設置用來運行單進程,無法很好的模擬的環境。容器和虛擬機的第二個巨大的差異是,當你停止一個虛擬機時,可能除了一些臨時文件,沒有文件會被刪除;當你停止一個docker容器,對初始狀態做的所有變化都會丟失。 
    容器是設計來運行一個應用的,而非一臺機器,把容器當虛擬機用,會失去很多靈活性,因爲docker提供了用於分離應用和數據的工具,使得你可以快捷的更新運行中的代碼,而不影響數據。

  • 數據卷 
    數據卷讓你可以不受容器生命週期影響進行數據持久化,它們表現爲容器內的空間,但實際保持在容器之外,從而允許你在不影響數據的情況下銷燬,重建,修改,丟棄容器。docker云溪你定義應用部分和數據部分,並提供工具讓你可以將它們分開。使用docker時必須做出的最大思維變化之一就是:容器應該是短暫和一次性的。 
    卷是針對容器的,你可以使用同一個鏡像創建多個容器並定義不同的卷,卷保存在運行docker的宿主文件系統上,你可以指定卷存放的目錄,或讓docker保存在默認位置。卷還可以用來在容器間共享數據。

  • 鏈接 
    鏈接是docker的另一個重要部分。 
    容器啓動時,將被分配一個隨機的私有ip,其他容器可以使用這個ip地址與其進行通訊。這個非常重要,原因有二:一是它提供了容器間相互通信的渠道,二是容器將共享一個本地網絡。 
    開啓容器間通信,docker允許你在創建一個新容器時引用其他現存容器,在你剛創建的容器裏被引用的容器將獲得一個可指定的別名,我們就說,這兩個容器鏈接在一起。 
    因此,如果DB容器已經在運行,我們可以在創建wev服務器容器,並在創建時引用這個DB容器,給它一個別名,比如dbapp,在這個新建的web服務器容器裏,我們可以在任何時候使用主機名dbapp和DB容器進行通信。 
    docker更進一步,要求你聲明容器在被鏈接時要開放哪些端口給其他容器,否則將沒有端口可用。

  • docker鏡像的可移植性 
    在創建鏡像時有一點要注意,docker允許你在一個鏡像中指定卷和端口。從這個鏡像創建的容器繼承了這些設置,但是docker不允許你在鏡像上指定任何不可移植的內容。例: 
    你可以在鏡像裏定義卷,只要它們被保持了在docker使用的默認位置,這是因爲如果你在宿主文件系統你指定了一個特定目錄來保存卷,其他使用這個鏡像的宿主無法保證這個目錄是存在的。 
    你可以定義要公開的端口,但僅限那些在創建鏈接時公開給其他容器的端口,你不能指定公開給宿主的端口,因爲你無從知曉使用那個鏡像的宿主有哪些端口可用。 
    你也不能在鏡像上定義鏈接,使用鏈接要求通過名字引用其他容器,但你無法預知每個使用那個鏡像的宿主如何命名容器。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章