84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
我本地下載了一個 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
標籤,而是明確指定版本,才可能升級維護。雷雷