Docker鏡像管理


Docker的鏡像是增量的修改,每次創建新的鏡像都會在老的鏡像上面構建一個增量的,使用到的技術是Another Union File System(AUFS)。

要創建一個Docker的鏡像,可以通過:

1 從Docker Hub 下載

2 通過Dockerfile創建

3 通過 docker import來導入一個容器快照而生成一個新的鏡像

4 通過 docker commit 提交對容器的修改生產一個新的鏡像

5 通過 docker load 來導入一個保存的鏡像文件

 

使用Docker Hub 查找和下載鏡像

Docker Hub 是Docker官方提供公共倉庫,提供大量的常用鏡像,由於國內網絡原因經常連接Docker Hub會比較慢,所以我們也可以選擇一些國內提供類似Docker Hub鏡像服務站點。連接Docker Hub的常用命令包括:

搜索鏡像 docker search
下載鏡像 docker pull

 

通過Dockerfile創建鏡像

Dockerfile文件里包含若干條命令,每個命令都會創建一個新的層,Dockerfile創建的層數不可以超過127層。

下面是官方網站上的一個Dockerfile sample

FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay

創建好Dockerfile之后可以通過Docker build來創建image

$ docker build --help
Usage:    docker build [OPTIONS] PATH | URL | -
Build an image from a Dockerfile

比如 docker build -t imagename:tagname .

 

查看本地鏡像

docker images 命令查看本地的鏡像列表,信息包括:
    REPOSITORY:倉庫名稱
    TAG:標簽名,一個倉庫可以有若干個標簽對應不同的鏡像,默認都是latest
    IMAGE ID:鏡像ID
    CREATED:創建時間,注意不是本地的pull時間
    SIZE:鏡像大小

其中需要注意的是運行容器時候如果不指定鏡像的TAG,則默認為latest。鏡像的唯一標識符是鏡像ID,不是TAG,有的時候同一個鏡像可以有不同的TAG,但實際指向的是同一個鏡像ID。TAG可以理解為鏡像的別名。

 

查看鏡像詳細信息 docker inspect

docker inspect 可以查看指定鏡像的詳細信息。這條命令可以查看容器或鏡像的詳細信息,輸出是一個JSON格式的內容,比較重要的信息是創建時間,啟動命令等。

常用的參數是--format, -f, 用來指定輸出的格式,比如:

獲取instance的log path

docker inspect --format='{{.LogPath}}' $INSTANCE_ID

 

導出及導入鏡像

鏡像可以被導出到本地文件,也可以從本地文件中加載。導出命令是 docker save 命令,導出后的鏡像如果需要導入到新的Docker 服務器,則使用docker load命令。

docker save

可以用於備份一個鏡像,用法如下:

$ docker save busybox > busybox.tar
$ ls -sh busybox.tar

$ docker save --output busybox.tar busybox
$ ls -sh busybox.tar

$ docker save -o fedora-all.tar fedora

$ docker save -o fedora-latest.tar fedora:latest

 

docker load

從STDIN或者tar 包加載一個鏡像

$ docker load < busybox.tar.gz

$ docker load --input fedora.tar

 

注意:用戶既可以使用 docker load 來導入鏡像存儲文件到本地鏡像庫,也可以使用 docker import 來導入一個容器快照到本地鏡像庫。這兩者的區別在於容器快照文件將丟棄所有的歷史記錄和元數據信息(即僅保存容器當時的快照狀態),而鏡像存儲文件將保存完整記錄,體積也要大。此外,從容器快照文件導入時可以重新指定標簽等元數據信息。

更新/刪除鏡像

docker commit

如果需要對鏡像進行更新的話,一種方法是創建容器,在容器中進行修改,然后將修改后容器提交到鏡像中。提交使用 docker commit命令。

注意:本方法不推薦用在生產系統中,未來會很難維護鏡像。最好的創建鏡像的方法是Dockerfile,修改鏡像的方法是修改Dockerfile,然后重新從Dockerfile中構建新的鏡像。

docker commit -m 'add 3 dirs' -a 'author' -p updateimage newimage

幾個參數的說明:

  • -m 本次提交的描述
  • -a 指定鏡像作者信息
  • -p 提交時暫停容器運行
  • 容器的ID或名稱
  • 目標鏡像

如果指定了目標鏡像,Docker會創建新的鏡像。

 

docker rmi

docker rmi命令可以刪除本地的鏡像,刪除前需要先使用docker rm 刪除所有依賴該鏡像的容器。

docker rmi -f 可以強制刪除存在容器依賴的鏡像,但這不是一個好習慣,請先刪除容器再清理鏡像。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM