[Day03]: 容器與映像技術原理


映像(Image)

Docker中的映象(Image),是一個包含應用程式以及其依賴庫的檔案(Dockerfile)
它以唯獨方式建立容器中的基本環境

  • 功能:環境設置、保存環境運行狀態以方便移植
  • 映像名稱: dock0/ssh:latest

    [命名空間/檔案名稱(服務名稱):映像標籤(顯示版本)]
    
  • 映像ID:為64位元十六進位字串,每個映像皆有映像ID

映像的結構

映像為分層結構,每一層都在前一層的基礎中進行更動,且每層皆有自己的ID,最頂層則為映像ID

最底層為 bootfs,為開機檔案系統

往上一層,通常為作業系統層,又稱作 base image

再往上就看其image使用的服務是根據甚麼作業系統來執行

最上層則為 Container,容器層

只有容器層可以進行讀寫,其餘皆唯讀~

映像倉庫

取得映像的方法就是藉由映像倉庫,Docker CLI 可藉由docker pull 指令從本地端的映象倉庫中下載所需的映象檔

除了本地端的映像倉庫,也有遠端映像倉庫,如:Docker hub

docker hub 網站截圖

Docker hub中有許多由個人或是組織提供的映象檔,提供映像建構、映像託管等服務

對於公司行號,也可以部屬私有映像倉庫,可允許小範圍內安全的共享Docker Image

映像操作指令

* 取得映像: docker pull [image]

* 列出映像: docker images

* 映像詳細資訊:docker inspcect [image]:[tag]

* 刪除映像:docker rmi [image]:[tag]

* 映像移植:docker save [image]:[tag] > file



容器(Container)

Docker用於封裝隔離服務和應用程式的貨櫃(Container)
容器會讀取映像中的環境程式設定,並將異動保存於沙盒環境

運作模式

  • 前台互動模式 (Interactvie mode)
    • 容器執行於前台,並可輸入參數打開容器內的輸入串流,這時即可與容器內的程式互動
  • 後台守護模式 (Daemon mode)
    • 容器執行於後台,不會占用終端,也無法連接到容器內執行中的程式,此狀態需透過指令關閉

容器的建立過程

1. 建立docker時,Docker CLI呼叫 Docker Daemon
2. 透過Libcontainer要求kernel執行container
3. Linux Kernel隨即建立 Namespaces,以隔離環境
4. 檢查現有映像列表
5. 載入映像
6. 分配檔案系統
7. 設定網路
8. 執行應用程式
9. 執行結束容器則停止

容器操作指令

* 創建容器: docker create [container]:[tag]

* 執行容器: docker run [container]:[tag]

   * 開啟前台互動模式: docker run -it [container] /bin/bash 

   * 開啟後台模式: docker run -d [container]

* 列出容器: docker ps [-a,-l][-n Number]
  //-a 列出全部 -l 列出最後一個,-n 2 列出最後兩個
* 啟動容器: docker start [container]

* 停止容器: docker stop/kill [container]

結語

了解docker的基本構造和操作指令後,docker環境中的檔案要如何共享以及傳遞呢? 下一篇將會介紹docker中的資料卷(data volume)概念


參考資料

[1]http://juilin77.blogspot.com/2019/05/3-01-container-state.html

#docker #虛擬化技術 #容器技術 #輕量服務







你可能感興趣的文章

動態規劃(Dynamic Programming)

動態規劃(Dynamic Programming)

alert()

alert()

什麼是 Cross-Origin Resource Sharing (CORS)?

什麼是 Cross-Origin Resource Sharing (CORS)?






留言討論