Docker镜像基本使用
使用?Docker?鏡像
Docker?運行容器前需要本地存在對應的鏡像,如果本地不存在該鏡像,Docker?會從鏡像倉庫下載該鏡像。
獲取鏡像
docker?pull?[選項]?[Docker?Registry?地址[:端口號]/]倉庫名[:標簽]
Docker?鏡像倉庫地址:
地址的格式一般是??<域名/IP>[:端口號]??。默認地址是?Docker?Hub。
倉庫名:
倉庫名是兩段式名稱,即??<用戶名>/<軟件名>??。對于?Docker?Hub,如果不給出用戶名,則默認為??library??,也就是官方鏡像。
例如拉取ubuntu:18.04
docker?pull?ubuntu:18.04
沒有給出?Docker?鏡像倉庫地址,因此將會從?Docker?Hub?獲取鏡像。而鏡像名稱是??ubuntu:18.04??,因此將會獲取官方鏡像??library/ubuntu倉庫中標簽為??18.04??的鏡像。
?
從下載過程中可以看到鏡像是由多層存儲所構成。下載也是一層層的去下載,并非單一文件。下載過程中給出了每一層的?ID?的前?12?位。并且下載結束后,給出該鏡像完整的??sha256??的摘要,以確保下載一致性。
Docker?Hub?下載鏡像非常緩慢,可以配置加?鏡像速器。
運行
啟動里面的??bash??并且進行交互式操作,交互式啟動容器的bash并且查看系統版本信息
docker?run?-it?ubuntu:18.04?bash
cat?/etc/os-release
?
-it??:這是兩個參數,一個是??-i??:交互式操作,一個是??-t??終端。打算進入??bash??執行一些命令并查看返回結果,因此需要交互式終端。
ubuntu:18.04??:這是指用??ubuntu:18.04??鏡像為基礎來啟動容器。
bash??:放在鏡像名后的是?命令,這里希望有個交互式?Shell,因此用的是bash??。
進入容器后,可以在?Shell?下操作,執行任何所需的命令。這里,執行了
cat?/etc/os-release??,這是?Linux?常用的查看當前系統版本的命令,從返回的結果可以看到容器內是??Ubuntu?18.04.1?LTS??系統。最后通過??exit??退出了這個容器。
?
列出鏡像?docker?image?ls
?
倉庫名??、?標簽??、?鏡像?ID??、?創建時間??以及??所占用的空間
需要注意的問題是,?docker?image?ls??列表中的鏡像體積總和并非是所有鏡像實際硬盤消耗。由于?Docker?鏡像是多層存儲結構,并且可以繼承、復用,因此不同鏡像可能會因為使用相同的基礎鏡像,從而擁有共同的層。由于?Docker使用?Union?FS,相同的層只需要保存一份即可,因此實際鏡像硬盤占用空間很可能要比這個列表鏡像大小的總和要小的多。
?
查看鏡像、容器、數據卷所占用的空間。
docker?system?df
?
顯示鏡像摘要
docker?image?ls?--digests
?
中間層鏡像
為了加速鏡像構建、重復利用資源,Docker?會利用?中間層鏡像。所以在使用一段時間后,可能會看到一些依賴的中間層鏡像。默認的??docker?image?ls??列表中只會顯示頂層鏡像,如果希望顯示包括中間層鏡像在內的所有鏡像的話:docker?image?ls?-a
?
補充幾個:
docker?image?ls?ubuntu?根據倉庫名列出鏡像
docker?image?ls?ubuntu:18.04?列出特定的某個鏡像,也就是說指定倉庫名和標簽
docker?image?ls?-f?since=mongo:3.2?希望看到mongo:3.2??之后建立的鏡像
docker?image?ls?-q?只顯示id
docker?image?ls?--format?"{{.ID}}:?{{.Repository}}"??顯示id和倉庫名(這個比較好用)
docker?image?ls?--format?"table?{{.ID}}\t{{.Repository}}\t{{.Tag}}"?以表格等距顯示,并且有標題行,和默認一樣,不過自己定義列
?
刪除本地鏡像
docker?image?rm?[選項]?<鏡像1>?[<鏡像2>?...] 或者直接 docker rmi ...
其中,?<鏡像>??可以是??鏡像短?ID??、?鏡像長?ID??、?鏡像名??或者??鏡像摘要??。
Untagged?和?Deleted??鏡像是分層存儲的,如果當前鏡像還被其他層更高的層使用,或者是別的標簽也指向這個鏡像,那么所謂的刪除就只是刪除這個標簽對應的就是Untagged,如果只有這一個標簽再使用,并且其他層也不依賴這個鏡像,那么就會真的執行Deleted。
PS:如果有用這個鏡像啟動的容器存在(即使容器沒有運行),那么同樣不可以刪除這個鏡像。
?
清理鏡像
docker image prune
它支持的子命令有:
- -a, --all: 刪除所有沒有用的鏡像,而不僅僅是臨時文件;
- -f, --force:強制刪除鏡像文件,無需彈出提示確認;
另外,執行完?docker image prune?命令后,還是告訴我們釋放了多少存儲空間!
?
?
總結
以上是生活随笔為你收集整理的Docker镜像基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker安装和helloworld
- 下一篇: Docker用Commit给容器做快照