我本地下載了一個 MySql 鏡像,想安裝官方的。 docker pull mysql 後它老自動把本地的給裝上去了。
docker pull mysql
刪除本地的mysql docker rmi -f mysqldocker images 看確實沒了,但是再次 docker pull mysql,發現安裝的還是之前的那個…
docker rmi -f mysql
docker images
怎麼跳過本地的 MySql ,安裝官方的鏡像啊? 謝謝
认证高级PHP讲师
是不是有什麼容器正在使用這個 mysql 鏡像?或者你重新docker tag过这个镜像?或者使用其它版本的mysql镜像?或者在使用基于 debian:jessie 的鏡像?
docker tag
debian:jessie
要知道鏡像並非單一文件,而是儲存層的集合。當你執行 docker rmi -f mysql 的时候,实际上是删除 mysql:latest 这个 tag,因此第一行一般是 Untagged: mysql:latest。
mysql:latest
tag
Untagged: mysql:latest
接下來的邏輯是,如果沒有其它tag指向该存储层,则会真实删除该存储层,然后继续查询下一层的存储层是否还有人在使用,没有继续删除,直到某一层发现还有容器或者镜像依赖该存储层,那么就停止删除。所以当你执行 docker rmi 的时候,可以观察一下出现了多少个 Deleted: sha256: ...,這就是刪除了多少層,其它的並未刪除。
docker rmi
Deleted: sha256: ...
那麼假如你重新 docker tag 了这个mysql镜像,那么当你执行 docker rmi 的时候,只会执行 untag 的操作,而不會真的刪除儲存層。
untag
又或系統有其它鏡像是基於相同的基礎鏡像 debian:jessie 的,那么docker rmi 也只会删到这一层就停止了,以后每次 pull 也是從這層開始。
pull
同樣,這種分層儲存的概念也會影響你的docker pull。 当你执行docker pull的时候,会查看官方 docker:latest 的每一層的校驗值,然後到本地比對,看看哪些已經存在,如果存在就不重複pull,直接使用當前儲存層,如果不存在則pull新的。
docker pull
docker:latest
拿剛才的假如你重新docker tag的例子,如果你之前重新tag过该 mysql:latest镜像,那么docker rmi实际上没有删除该镜像,而再次 docker pull mysql 的时候,发现所有存储层本地都有,那必然不需要再次 pull,直接将最顶层tag为 mysql:latest即可。这种情况无需担心,也不必强迫重新下载,因为sha256sum可以確保鏡像文件和官網的一致性。
sha256sum
所以你的問題要看具體情況是什麼來說。一般來說,在生產環境不建議使用 latest 標籤,而是明確指定版本,才可能升級維護。
latest
雷雷
是不是有什麼容器正在使用這個 mysql 鏡像?或者你重新
docker tag
过这个镜像?或者使用其它版本的mysql镜像?或者在使用基于debian:jessie
的鏡像?要知道鏡像並非單一文件,而是儲存層的集合。當你執行
docker rmi -f mysql
的时候,实际上是删除mysql:latest
这个tag
,因此第一行一般是Untagged: mysql:latest
。接下來的邏輯是,如果沒有其它
tag
指向该存储层,则会真实删除该存储层,然后继续查询下一层的存储层是否还有人在使用,没有继续删除,直到某一层发现还有容器或者镜像依赖该存储层,那么就停止删除。所以当你执行docker rmi
的时候,可以观察一下出现了多少个Deleted: sha256: ...
,這就是刪除了多少層,其它的並未刪除。那麼假如你重新
docker tag
了这个mysql镜像,那么当你执行docker rmi
的时候,只会执行untag
的操作,而不會真的刪除儲存層。又或系統有其它鏡像是基於相同的基礎鏡像
debian:jessie
的,那么docker rmi
也只会删到这一层就停止了,以后每次pull
也是從這層開始。同樣,這種分層儲存的概念也會影響你的
docker pull
。 当你执行docker pull
的时候,会查看官方docker:latest
的每一層的校驗值,然後到本地比對,看看哪些已經存在,如果存在就不重複pull,直接使用當前儲存層,如果不存在則pull新的。拿剛才的假如你重新
docker tag
的例子,如果你之前重新tag
过该mysql:latest
镜像,那么docker rmi
实际上没有删除该镜像,而再次docker pull mysql
的时候,发现所有存储层本地都有,那必然不需要再次 pull,直接将最顶层tag
为mysql:latest
即可。这种情况无需担心,也不必强迫重新下载,因为sha256sum
可以確保鏡像文件和官網的一致性。所以你的問題要看具體情況是什麼來說。一般來說,在生產環境不建議使用
latest
標籤,而是明確指定版本,才可能升級維護。雷雷