Docker镜像使用详解
目錄
- 基礎命令
- 使用進階
 
容器和虛擬機具有相似的資源隔離和分配優勢,但功能不同,因為容器虛擬化的是操作系統而不是硬件。多個容器可以在同一臺機器上運行,并與其他容器共享操作系統內核,每個容器在用戶空間中作為獨立進程運行。一次打包,到處運行。打的包就是容器鏡像。
 
容器鏡像是一個不可變的只讀文件,基于相同鏡像文件創建啟動的容器,都將獲得完全相同的Docker容器。容器是鏡像的實例。
 Docker Registry可以理解為倉庫,用來統一存儲所有創建好的鏡像images。分為私有倉和公共倉。Docker Hub是Docker Inc.管理的公共倉,不過國內連接它比較慢。我們一般會使用國內的其它一些平臺鏡像倉庫。這里管理了開發者上傳的龐大的鏡像集合。啟動容器時,docker daemon會先嘗試從本地獲取鏡像,如果本地不存在,則將從配置的Registry下載并保存到本地。相同的鏡像會有不同的迭代版本,用tag區分。比如使用Docker部署openGauss中,openGauss的鏡像就有很多迭代版本,從1.0.1 到3.0.0。所有迭代版本組成的鏡像倉庫又組成了Repository,比如恩墨創建的openGauss鏡像enmotech/opengauss。
 
基礎的幾個命令就是正常的使用鏡像,學會后就可以進行最基本的鏡像操作,廣泛應用于安裝、運維。進階的幾個命令介紹鏡像制作的相關命令,開發必備。
基礎命令
1.查找鏡像docker search
 這個命令是從公共倉比如Docker hub搜索指定的image。語法:
docker search [OPTIONS] TERM
OPTIONS 里是可選項:
 –filter,-f 根據提供的條件過濾輸出
 –limit 搜索返回的最大結果數。該值可以在 1 到 100 之間。默認值為–limit25。
 –no-trunc不要截斷輸出
 顯示名稱包含“java”、至少 30 星且是官方構建的鏡像示例:
docker search --filter is-official=true --filter stars=30 java
2.拉取鏡像docker pull
 這個命令是將鏡像包從遠程倉庫下載到本地。例如,下面的例子就是獲取ubantu的鏡像。如果不指定版本,就是默認使用最新的版本,即tag是latest。
也可以指定具體版本,如《【云原生】使用Docker部署openGauss》中指定了opengauss的3.0.0版本。
3.列出鏡像docker images
 這個命令是列出本地存儲的所有鏡像,不管你用沒用。
它會顯示REPOSITORY,TAG , IMAGE ID , CREATED , SIZE信息。
4.刪除鏡像docker rmi
 這個命令是將不需要的鏡像包刪除,rm是remove,i表示image。使用的IMAGE ID即為上面docker images查出來的鏡像ID,也可以使用鏡像名稱enmotech/opengauss:latest。
docker rmi IMAGE ID
注意,使用該命令刪除的時候需要確保容器已經停止且刪除。否則會提示報錯“Error response from daemon: conflict: unable to delete xxx (cannot be forced) - image is being used by running container xxx”。正確的步驟就是刪除停止的容器>刪除未被使用的網絡>刪除鏡像。也提供一種粗暴的參數 -f 表示force強制刪除。
docker rmi -f IMAGE ID
5.查看鏡像docker inspect
 這個命令會以 json 格式得到 docker 鏡像/容器的元數據。除了鏡像ID也可以使用鏡像名稱。
docker inspect IMAGE ID
這時就可以和grep 聯合使用,方便的獲取想到的信息。grep會獲取到其他的數據,不夠完整或者有冗余,還得進一步處理,但是 -f 可以解決這個問題。例如 獲取RootFS.Layers 節點的數據:
docker inspect -f ‘{{.RootFS.Layers}}’ e1ef1f09765
使用進階
1.制作鏡像docker build
 語法:docker build [OPTIONS] PATH |URL
 docker build命令從一個Dockerfile和context創建鏡像。[OPTIONS]里是些可選參考,PATH 本地文件系統上的目錄,URL是Git倉庫的位置,構建時都包括他們的子目錄。
 示例:
docker build --force-rm=true --no-cache=true -t wxx/opengauss:3.0.0 -f /path/to/a/Dockerfile .
–force-rm :設置鏡像過程中刪除中間容器;
 –no-cache:創建鏡像過程中不使用緩存
 -t:設置鏡像名字及標簽
 -f:指定要使用的Dockerfile路徑
 注意,最后還有個 英文的點號. ,表示使用當前目錄。
 當然這個命令還支持許多其他參數,死記無益,可以實際使用時再行確認。新上手用戶制作Dockerfile 以參考其他已有的,比如openGauss的。
2.推送鏡像docker push
 鏡像制作完成后,如果希望不止在本地,可以使用docker push 推送到遠程倉庫,可以是公共倉dockerhub也可以是私有倉。注意,推送前需要先注冊。
 
使用時,先登錄再推送。
docker login --根據提示輸入用戶名和密碼 docker push repository:tag然后可以去dockerhub查看下是否推送成功了。
3.鏡像打包docker image save和鏡像加載docker image load
 這倆成對使用,save是將一個或多個image保存為tar,load是將tar 文件恢復為image。這樣從一個主機save,另一個主機load就完成了鏡像的傳輸。
4.給鏡像打新標記docker tag
 這個命令就是基于本地的已有鏡像重新建一個tag。在《【云原生】使用Docker快速部署openGauss主備環境》中我們就可以使用這個命令修改本地鏡像的名字來匹配原有的安裝腳本。
這樣就在不改變原有鏡像enmotech/opengauss:latest的情況下,在本地新產生了個opengauss:latest的鏡像。
5.清理無用鏡像docker image prune
 如果本地鏡像有一些各種原因不再被容器使用或者未被tag標記的鏡像,可以使用該命令一把清除。
docker image prune -a
prune 是英文修剪的意思,在docker中,不止可以清理鏡像。還可以刪除其他不再使用的docker對象。比如容器實例,網絡、卷等。
docker container prune docker network prune docker volume prune🍒如果您覺得博主的文章還不錯或者有幫助的話,請關注一下博主,如果三連點贊評論收藏就更好啦!謝謝各位大佬給予的支持!
總結
以上是生活随笔為你收集整理的Docker镜像使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 从镜头到滤光片 解读光学透雾监控摄像机
- 下一篇: 2018年中国视频监控行业现状及行业发展
