大家好,想諮詢一下,docker是如何管理磁碟的呢?我有一個jenkins的應用程式放在了一個容器裡面,運行一段時間後容器變得非常巨大,然後我在容器中刪除了部分大的文件,df -h發現不管是容器的虛擬分區還是宿主機的磁碟都沒有釋放任何空間出來,依舊是42%(容器)和50%(宿主)的磁碟佔用,這是什麼原因造成的呢?該如何解決呢?
大家讲道理2017-04-24 09:14:58
需要理解Docker映像與容器。當然,這裡是從檔案系統的角度來理解。
Docker映像像是唯讀檔案。強調一下,它是唯讀的,因此我們實際上無法刪除鏡像中的檔案。當你進行刪除操作時,只不過做一個標記,使得容器看不到這個檔案而已。所以這個檔案依然存在於鏡像中,且會佔用磁碟空間。
Docker容器是基於映像的讀寫層,它是可讀可寫的。讀寫某個文件的時候,是從鏡像中將那個文件複製到容器的讀寫層,然後對複製的文件進行讀寫,而原始文件依然在鏡像中。而且,這個容器的讀寫層也是佔用磁碟空間的。
所以,我們只能透過刪除鏡像和容器的方式釋放磁碟空間。
刪除鏡像
sudo docker rmi <Image Name>
刪除容器
sudo docker rm <Container Name>
刪除所有鏡像
sudo docker rmi -a
刪除所有容器
sudo docker rm -a
另外,容器的資料卷(volume)也是佔用磁碟空間,可以透過以下指令刪除失效的volume:
sudo docker volume rm $(docker volume ls -qf dangling=true)
當然,最暴力的方式是刪除Docker儲存映像,容器與資料卷的目錄(/var/lib/docker)
謹慎使用! ! ! :
sudo service docker stop
sudo rm -rf /var/lib/docker
sudo service docker start