1. 程式人生 > >Docker學習筆記(二)---docker鏡像及基於container制作

Docker學習筆記(二)---docker鏡像及基於container制作

系統基礎 方式 目錄 info run contain tar 互聯 指定

Docker鏡像詳解
前面講到docker包括image,container.....等組件docker image包含啟動容器所需的文件系統及內容,所以它才能用於創建並啟動docker容器docker鏡像采用分層構建機制,至少包含兩層,底層是bootfs,其上是rootfs。我們通過交互式命令進入docker容器時,看起來就像一個操作系統。這有賴於bootfs來引導系統,包括bootloader和kernel,容器啟動完成後它就會被卸載以節約內存資源;rootfs 位於bootfs之上,它表現為docker容器的根文件系統;在傳統的系統啟動模式中,內核掛載rootfs時會先將其掛載為“只讀”模式,等到完整性檢查完成後在將其掛載為讀寫模式;而在docker中,rootfs由內核掛載為“只讀”模式,然後通過“聯合掛載”技術再掛載一個“可寫”層,這就是container。
技術分享圖片container層作為可寫層,那必定是構建在一個文件系統基礎上,現在新版本的docker中,container是通過overlay2來實現的,並且其底層是xfs格式。通過docker info可以查看到技術分享圖片早期版本docker使用的是aufs或dm等其它存儲驅動(文件系統)
docker鏡像從哪裏獲取?Registry 倉庫,即repository。(就像yum倉庫一樣,可以自己搭建也可以使用互聯網上的倉庫,這個後續再講解。docker默認使用的互聯網倉庫是docker hub)docker容器啟動時會從本地下載鏡像中找指定名字的鏡像,如果沒找到就會直接從網上下載並運行。並且docker service程序docer daemon是通過https從registry倉庫中獲取鏡像的。關於repository需要知道的一些知識:技術分享圖片
技術分享圖片
鏡像生成途徑技術分享圖片這裏測試基於容器制作的方式來生成鏡像1> 創建容器,並做出一些修改。這裏使用busybox鏡像,並在它的基礎上啟用httpd服務,配置好httpd的工作目錄並寫入主頁。#docker run --name bboxhttp -it busybox:latest
技術分享圖片2> 確認容器分配到的IP技術分享圖片
3> 新開一個會話終端並測試http服務可訪問技術分享圖片技術分享圖片
4> 在新終端上使用docker container commit命令創建鏡像技術分享圖片註意,生成鏡像的瞬間container在-p參數的作用下暫停了,但是鏡像制作完成後container還是會繼續運行的,不用手動去unpause
5> 如果對倉庫名和標簽進行二次修改,可使用docker tag命令技術分享圖片
註意:當同一個image有多個repository:tag時,使用docker image rm只是刪除標簽。如果只有一個repository:tag時,此時再刪除repository:tag會連同鏡像一起被刪掉技術分享圖片
6> 驗證生成的鏡像。通過新鏡像啟動的container包含之前創建的httpd服務的家目錄及主頁技術分享圖片
7> 在以上步驟基礎上,再進一步制作出讓容器一啟動即運行httpd服務的鏡像,而不是啟動後運行sh。使用docker commit -c 參數實現。技術分享圖片
8> 測試驗證。技術分享圖片
完成鏡像制作後,就可以將鏡像推送到共有或者自己的私人鏡像倉庫中。這裏使用阿裏雲自建的倉庫測試,登錄阿裏雲容器鏡像倉庫中創建鏡像唱K,並獲取公共地址:技術分享圖片然後修改生成的鏡像倉庫技術分享圖片
在倉庫管理界面找到推送鏡像的說明(這裏每個人都不一樣一定要根據自己的情況做):技術分享圖片實際操作:技術分享圖片推送:技術分享圖片
回到阿裏雲鏡像倉庫查看:技術分享圖片

鏡像導入導出。不通過網絡上的鏡像倉庫,而直接通過文件傳輸來分發鏡像。使用docker save命令實現。技術分享圖片到mini8服務器上導入鏡像技術分享圖片





來自為知筆記(Wiz)

Docker學習筆記(二)---docker鏡像及基於container制作