在使用 Docker 的過程中,我們經常需要拉取鏡像。當然,我們可以直接拉取完整的鏡像,但這樣無疑會浪費我們的時間和帶寬。因此,我們可以通過拉取增量鏡像的方式來節省時間和帶寬。
那么,什么是增量鏡像呢?增量鏡像就是只包含與上一個鏡像層的差異的鏡像層。比如,如果我們已經拉取了一個完整的鏡像,那么我們可以拉取一個與上一個鏡像層的差異的鏡像層,這樣就可以得到一個增量鏡像。
下面的代碼演示了如何通過 Docker 命令行拉取增量鏡像:
# 拉取完整的鏡像 docker pull nginx # 查看拉取的鏡像信息 docker image history nginx # 拉取增量鏡像 docker pull --platform linux/amd64 nginx@sha256:xxxxxxx
上面的代碼中,我們首先拉取了一個完整的 nginx 鏡像。接著,我們使用docker image history
命令查看拉取的鏡像信息,得到如下結果:
IMAGE CREATED CREATED BY SIZE COMMENT xxxxxxxxxxxx 3 weeks ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B xxxxxxxxxxxx 3 weeks ago /bin/sh -c #(nop) STOPSIGNAL SIGQUIT 0B xxxxxxxxxxxx 3 weeks ago /bin/sh -c #(nop) EXPOSE 80 0B xxxxxxxxxxxx 3 weeks ago /bin/sh -c #(nop) ENTRYPOINT ["/docker-ent… 0B yyyyyyyyyyyy 3 weeks ago /bin/sh -c #(nop) COPY file:eea668bc7ca256e… 133MB zzzzzzzzzzzz 3 weeks ago /bin/sh -c #(nop) VOLUME [/var/cache/nginx] 0B ...
可以看到,我們拉取的 nginx 鏡像包含了多個鏡像層。然后,我們使用docker pull
命令再次拉取 nginx 鏡像,但這一次我們指定了一個具體的鏡像層 ID(也稱為 SHA256 值),這個鏡像層 ID 對應的是 nginx 鏡像的其中一層。那么,Docker 只會拉取這個具體的鏡像層及其上面的所有鏡像層,而不是整個鏡像,從而實現了增量拉取。