官术网_书友最值得收藏!

3.4 刪除和清理鏡像

本節主要介紹Docker鏡像的rm和prune子命令。

1.使用標簽刪除鏡像

使用docker rmi或docker image rm命令可以刪除鏡像,命令格式為docker rmi IMAGE [IMAGE...],其中IMAGE可以為標簽或ID。

支持選項包括:

? -f, -force:強制刪除鏡像,即使有容器依賴它;

? -no-prune:不要清理未帶標簽的父鏡像。

例如,要刪除掉myubuntu:latest鏡像,可以使用如下命令:

        $ docker rmi myubuntu:latest
        Untagged: myubuntu:latest

讀者可能會想到,本地的ubuntu:latest鏡像是否會受到此命令的影響。無須擔心,當同一個鏡像擁有多個標簽的時候,docker rmi命令只是刪除了該鏡像多個標簽中的指定標簽而已,并不影響鏡像文件。因此上述操作相當于只是刪除了鏡像0458a4468cbc的一個標簽副本而已。

保險起見,再次查看本地的鏡像,發現ubuntu:latest鏡像(準確地說,0458a4468cbc鏡像)仍然存在:

        $ docker images
        REPOSITORY TAG IMAGE ID CREATED SIZE
        Ubuntu 18.04452a96d81c30 5 weeks ago 79.6MB
        Ubuntu latest 452a96d81c30 5 weeks ago 79.6MB

但當鏡像只剩下一個標簽的時候就要小心了,此時再使用docker rmi命令會徹底刪除鏡像。

例如通過執行docker rmi命令來刪除只有一個標簽的鏡像,可以看出會刪除這個鏡像文件的所有文件層:

        $ docker rmi busybox:latest
        Untagged: busybox:latest
        Untagged: busybox@sha256:1669a6aa7350e1cdd28f972ddad5aceba2912f589f19a090ac75b7083da748db
        Deleted: sha256:5b0d59026729b68570d99bc4f3f7c31a2e4f2a5736435641565d93e7c25bd2c3
        Deleted: sha256:4febd3792a1fb2153108b4fa50161c6ee5e3d16aa483a63215f936a113a88e9a

2.使用鏡像ID來刪除鏡像

當使用docker rmi命令,并且后面跟上鏡像的ID(也可以是能進行區分的部分ID串前綴)時,會先嘗試刪除所有指向該鏡像的標簽,然后刪除該鏡像文件本身。

注意,當有該鏡像創建的容器存在時,鏡像文件默認是無法被刪除的,例如:先利用ubuntu:18.04鏡像創建一個簡單的容器來輸出一段話:

        $ docker run ubuntu:18.04 echo 'hello! I am here! '
        hello! I am here!

使用docker ps -a命令可以看到本機上存在的所有容器:

        $ docker ps -a
        CONTAINER ID        IMAGE        COMMAND        CREATED      STATUS      PORTS      NAMES
        a21c0840213e       ubuntu:18.04       "echo  'hello!  I  am  he"     About  a  minute  ago
            Exited (0) About a minute ago     romantic_euler

可以看到,后臺存在一個退出狀態的容器,是剛基于ubuntu:18.04鏡像創建的。

試圖刪除該鏡像,Docker會提示有容器正在運行,無法刪除:

        $ docker rmi ubuntu:18.04
        Error  response  from  daemon:  conflict:  unable  to  remove  repository  reference
            "ubuntu:18.04" (must force) - container a21c0840213e is using its referenced
            image 8f1bd21bd25c

如果要想強行刪除鏡像,可以使用-f參數:

        $ docker rmi -f ubuntu:18.04
        Untagged: ubuntu:18.04
        Deleted: sha256:8f1bd21bd25c3fb1d4b00b7936a73a0664f932e11406c48a0ef19d82fd0b7342

注意,通常并不推薦使用-f參數來強制刪除一個存在容器依賴的鏡像。正確的做法是,先刪除依賴該鏡像的所有容器,再來刪除鏡像。

首先刪除容器a21c0840213e:

        $ docker rm a21c0840213e

然后使用ID來刪除鏡像,此時會正常打印出刪除的各層信息:

        $ docker rmi 8f1bd21bd25c
        Untagged: ubuntu:18.04
        Deleted: sha256:8f1bd21bd25c3fb1d4b00b7936a73a0664f932e11406c48a0ef19d82fd0b7342
        Deleted: sha256:8ea3b9ba4dd9d448d1ca3ca7afa8989d033532c11050f5e129d267be8de9c1b4
        Deleted: sha256:7db5fb90eb6ffb6b5418f76dde5f685601fad200a8f4698432ebf8ba80757576
        Deleted: sha256:19a7e879151723856fb640449481c65c55fc9e186405dd74ae6919f88eccce75
        Deleted: sha256:c357a3f74f16f61c2cc78dbb0ae1ff8c8f4fa79be9388db38a87c7d8010b2fe4
        Deleted: sha256:a7e1c363defb1f80633f3688e945754fc4c8f1543f07114befb5e0175d569f4c

3.清理鏡像

使用Docker一段時間后,系統中可能會遺留一些臨時的鏡像文件,以及一些沒有被使用的鏡像,可以通過docker image prune命令來進行清理。

支持選項包括:

? -a, -all:刪除所有無用鏡像,不光是臨時鏡像;

? -filter filter:只清理符合給定過濾器的鏡像;

? -f, -force:強制刪除鏡像,而不進行提示確認。

例如,如下命令會自動清理臨時的遺留鏡像文件層,最后會提示釋放的存儲空間:

        $ docker image prune -f
        ...
        Total reclaimed space: 1.4 GB
主站蜘蛛池模板: 祁门县| 漯河市| 宜兴市| 铜陵市| 积石山| 旌德县| 三原县| 昌图县| 永安市| 云安县| 津南区| 南城县| 夏邑县| 佛坪县| 房山区| 白城市| 七台河市| 汝城县| 阿坝| 岳阳县| 晴隆县| 崇左市| 万源市| 凤冈县| 鹤山市| 合江县| 重庆市| 平乐县| 兴隆县| 合山市| 临江市| 屯门区| 张家川| 清镇市| 三门县| 南投市| 鹿邑县| 清徐县| 衡东县| 大埔区| 竹北市|