Docker

從問題開始:

1. Dockerfile是什么:是一個文本文件,其內包含了一條條的指令(Instruction),每一條指令構建一層,因此每一條指令的內容,就是描述該層應當如何構建。

Dockerfile命令詳解

From指定基礎鏡像:?FROM <image name>

Maintainer設置鏡像的作者:MAINTAINER <author name>

Run在shell或者exec的環境下執行的命令。Run指令會在新創建的鏡像上添加新的層面(???)。RUN <command>

Env設置環境變量,鍵值對。ENV <key> <value>

Arg構造參數,定義參數名稱,在--build-arg時用(沒看懂???)

Cmd提供容器默認的執行命令。Dockerfile只允許使用一次CMD指令,多個則只有最后一個生效。三種:CMD ["executable", "param1", "param2"], CMD ["param1", "param2"], CMD command param1 param2(shell,主進程為sh)


2. 什么是Docker,Docker和虛擬機等傳統虛擬技術有啥區別

Container容器:操作系統層面的虛擬化技術,在容器內運行的程序只能看到容器的內容和設備信息(而真正的操作系統中的程序可以看到所有資源)。文件系統、網絡互聯、進程隔離。

Docker在容器的基礎上進一步封裝,簡化了容器的創建和維護。

Docker和傳統虛擬機的區別在于,傳統虛擬機中的每個APP需要虛擬出一套完整的操作系統(Guest OS),而Docker直接運行于宿主操作系統(Host OS),只是APP之間共享內核(???),容器內沒有自己的內核,不進行硬件虛擬。

Docker在性能上能明顯優于傳統虛擬機:啟動快、耗損少(實例多)


3. 什么是鏡像(Image)、什么是容器(Container)、什么是倉庫(Repository)

首先理解一個概念:文件系統的掛載。在內核啟動之后,會掛載root文件系統(即/),用df -h可以看到mount的設備。

Docker鏡像:相當于是一個root文件系統。鏡像中不包含任何動態數據,構造后即不可變。主要提供:容器運行依賴的程序、庫、資源、配置;以及配置參數(匿名卷、環境變量、用戶)。分層存儲:鏡像構建時,會一層層進行構建,每一層構建完即定下來了,不會再改變了。如果在下一層刪除上一層的文件,不會真正刪除,而只是標記為已刪除,so雖然看不到這個文件,但是文件一直存在。

Docker容器:容器是鏡像的實例,每一個容器創建時,已鏡像為基礎,在鏡像上創建容器存儲層。一般要求容器存儲層保持無狀態,所有的文件寫入操作,使用數據卷(Volume)或者綁定宿主目錄。

Docker Registry:多個倉庫(多個鏡像),每個倉庫包含多個標簽(Tag)-> 對應不同版本的鏡像。其中公開的Docker Registry包含官方的Docker Hub,國內訪問比較慢,有相關加速器可以加速。



參考資料:

從入門到實踐

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 2017年12月31日晚,天地市集結束后和姐妹們臨時決定去漢口江灘跨年,寒風凜冽中前行,擠過熙熙攘攘的人群然后趕地...
    宛宛花開閱讀 100評論 0 2
  • 今天大盤延續昨天尾盤的弱勢和標普的下調小利空下小幅低開后,盤面基本沒出現明顯的上漲跡象,無論是昨天的指揮官證券板塊...
    阿凱古閱讀 136評論 0 1