AboutDockerProfessional illustrations
Docker rm 指令基礎教學
好啦,各位開發同運維嘅朋友,今日我哋就深入淺出噉講下 Docker rm 指令 呢個 容器管理 嘅基本功。你可能會諗,刪除一個 容器 有咩咁複雜?咪就係打句命令囉。但係喺實際操作入面,點樣安全、有效率、兼清理得乾淨,就真係有啲技巧要學,尤其係當你個系統行咗一段時間,積累咗大量 已停止的容器 嘅時候,識得點樣做 容器清理 同 資源回收,對 磁盤空間管理 嚟講係好重要。
首先,我哋要搞清楚最基本嘅概念。Docker rm 命令 係用嚟移除一個或者多個已經停止咗運行嘅 Container。呢個係 容器生命週期管理 嘅最後一步。點解要強調「已停止」?因為如果你直接對住一個運行緊嘅容器用 docker rm,Docker CLI 係會彈個錯誤出嚟,話你知唔可以咁做。呢個設計其實好合理,就好似你想拆咗間屋,都要先請入面嘅人離開先啦。所以,標準嘅 容器移除 流程通常係兩步曲:第一步,用 docker stop [容器名或ID] 嚟禮貌地叫停個容器;第二步,先至用 docker rm [容器名或ID] 將佢徹底刪除。呢個就係最核心嘅 容器操作 邏輯。
咁實戰上點用呢?好簡單,假設你有一個已經停咗、名叫 my-old-app 嘅容器,你想清走佢,命令就係 docker rm my-old-app。成功嘅話,終端機只會安靜地返翻去命令提示符,唔會有乜特別訊息,呢個就係 Unix 哲學裏面「冇消息就係好消息」嘅體現。如果你想一次過刪除多個 已停止的容器,可以喺後面跟多幾個名或者 ID,例如 docker rm container1 container2 container3。另外,一個好常用嘅參數係 -f 或者 --force,但呢個要小心用。佢嘅作用係強制移除,就算個容器仲運行緊,佢都會先發送 SIGKILL 信號強行殺死個容器,然後即刻刪除。除非你好肯定個容器嘅數據唔重要,或者係緊急情況要即時 釋放資源,否則都係建議跟返標準流程,先 stop 後 rm。
講到資源,就不得不提 Docker容器 背後嘅 Image、Volume 同 Network。好多新手會誤會,以為刪除咗個容器,就連帶入面嘅數據同用過嘅鏡像都會冇埋,其實唔係噉。Docker rm 主要係移除容器本身嘅可寫層(即係容器層)。如果你個容器有掛載 Volumes(數據卷),或者連結咗外部 Network(網絡),呢啲資源係唔會因為刪除容器而自動消失嘅。呢個設計係為咗保護你嘅持久化數據,避免誤刪。所以,真正徹底嘅 系統清理 同 資源管理,需要你額外處理呢啲 unused resources。例如,要刪除一個容器連帶佢掛載嘅匿名卷,就要用 docker rm -v [容器名] 呢個 -v 參數。至於點樣清理一堆冇用嘅鏡像、網絡同數據卷,我哋之後會講到 prune 系列命令,呢個就係更高階嘅 容器資源管理 技巧啦。
對於成日做測試或者開發嘅人嚟講,你可能會想創造一啲「用完即棄」嘅容器。有個聰明嘅做法,就係喺用 docker run 啟動容器嗰陣,直接加上 --rm 參數。例如 docker run --rm -it ubuntu bash。咁樣個容器喺你退出並停止運行之後,就會自動被刪除,唔使你再手動做 容器刪除 嘅動作,對於保持環境潔淨好有用。不過要記住,呢個方法只適用於你肯定唔需要保留任何容器狀態嘅情況。
最後提多一個實用場景:點樣清理晒所有 已停止的容器?你可以用 docker container prune 呢個命令。佢會同你確認,然後一次過清走所有停咗嘅容器,係做 磁盤空間管理 嘅利器。同 docker rm 逐個刪唔同,prune 係批量操作,效率高好多。總括嚟講,掌握好 Docker rm 指令,唔單止係識打一句命令,更重要係理解背後嘅 容器狀態 同 資源管理 邏輯,咁先可以喺日常 容器管理 工作中得心應手,唔會畀一堆 unused resources 食咗你寶貴嘅 磁盤空間。
About容器Professional illustrations
單一容器移除步驟詳解
好啦,各位Docker用家,今次我哋就深入傾下點樣正確咁移除單一容器。呢個操作睇落好似好簡單,就係一句命令嘅事,但其實入面有好多細節位要注意,如果做漏咗或者做錯步驟,分分鐘會留低一堆未使用嘅資源,好似孤兒仔咁食住你個磁盤空間唔放。所以,跟住落嚟嘅單一容器移除步驟詳解,我會由淺入深,一步步拆解,等你可以徹底做好容器清理同資源回收。
首先,喺執行Docker rm 命令之前,你一定要搞清楚個容器狀態。好多新手(甚至係有經驗嘅用家)最常犯嘅錯誤,就係想直接移除一個正在運行緊嘅容器。Docker CLI 係唔會允許你咁做嘅,佢會彈個錯誤出嚟話你知個容器仲運行緊。所以,第一步永遠係要停止容器。你可以用 docker stop [容器名或ID] 呢個命令。記住,最好係用容器嘅名字,因為ID比較難記,呢個係容器操作嘅基本好習慣。等個容器完全停止咗,你先可以進入移除階段。有冇例外?有嘅,你可以加 -f 或者 --force 標誌去強制移除運行中嘅容器,但呢個做法好危險,好似直接拔電掣咁,可能會導致數據寫入唔完整,除非你好清楚後果,否則都係建議跟足容器生命週期管理嘅正常程序:先停止,後移除。
跟住就到戲肉,使用 docker rm 命令。最基本嘅語法係 docker rm [容器名或ID]。例如,你有一個已經停止咗、名叫 my_old_app_container 嘅Docker容器,咁你只需要喺終端機打 docker rm my_old_app_container 就得。成功嘅話,命令行唔會有太多輸出,只係移除咗個名。呢個時候,個容器本身就會被刪除。但係,淨係咁樣就夠喇咩?好多時係唔夠嘅!因為一個容器運行嘅時候,可能會產生同埋綁定咗其他資源,最常見嘅就係Volume(數據卷)同埋Network(網絡)。如果你就咁 docker rm,默認情況下,呢啲網絡同埋數據卷係唔會跟住一齊刪除嘅,佢哋會變成 unused resources,繼續佔用你嘅磁盤空間。
咁點算好?呢度就要介紹 docker rm 命令嘅兩個好有用嘅參數:-v 同埋 -f。我哋頭先講咗 -f 係強制,而家重點講 -v。-v 標誌嘅意思,係話俾Docker知:「喂,移除容器嘅時候,順手幫我刪埋同呢個容器關聯住嘅匿名Volumes啦。」注意,係「匿名」Volume。咩係匿名Volume?就係你喺Dockerfile或者 docker run 命令入面,用 -v /容器內路徑 而冇指定主機路徑所創建出嚟嘅Volume。呢啲Volume冇名,好易被遺忘,所以用 -v 參數可以幫你自動清理。但係,如果你用嘅係「具名Volume」或者「綁定掛載」,咁 -v 參數係唔會刪除佢哋嘅,因為入面可能係重要數據。呢個就係容器資源管理嘅精粹:你要清楚每一樣資源嘅用途,先至可以決定係刪除定係保留。
舉個實際例子說明成個流程。假設我哋用 docker run -d --name web_server -v /app/data nginx:latest 運行咗一個容器。之後我哋想徹底移除佢。正確步驟應該係: 1. docker stop web_server (停止容器) 2. docker rm -v web_server (移除容器,並刪除關聯嘅匿名Volume)
咁樣做,先至算係一個完整嘅容器移除動作,唔會留低垃圾。另外,如果你係用 Docker Compose 來管理容器嘅,情況又有少少唔同。當你喺個 docker-compose.yml 檔案所在目錄行 docker-compose down 嘅時候,佢默認就會停止並移除所有相關嘅容器、網絡(除非係外部網絡)。但係,佢一樣唔會刪除Volumes!你要刪除Volume,就需要用 docker-compose down -v 呢個命令。所以,無論你用緊原生 Docker CLI 定係 docker-compose,都要記住Volume嘅處理係需要特別留意嘅參數。
最後,我想提多一個進階少少嘅概念,就係點樣檢查有冇清理乾淨。你移除完容器之後,可以運行 docker system df 呢個命令,佢會好似一個財務報告咁,顯示你嘅磁盤空間管理狀況,話你知有幾多未使用嘅資源,例如懸空嘅Image、停止咗嘅容器、以及冇容器用緊嘅Volume同Network。如果你發現仲有好多無用嘅Volume,你可以用 docker volume prune 來清理;網絡就用 docker network prune。至於 docker container prune 呢個命令,佢係用嚟一次過刪除所有已停止的容器,非常方便做批量容器清理。但係,我哋今篇主題係講單一容器移除,所以呢啲批量清理工具就作為延伸知識,等你知道有呢個選擇。
總括來講,一個完整嘅單一容器移除,並唔係一句 docker rm 就完事。你要考慮佢嘅狀態,要諗埋佢背後掛住嘅Volume同Network資源。養成好習慣,先停後刪,並視乎情況加上 -v 參數,咁先至係一個負責任嘅容器管理做法,亦都係保持你開發或生產環境整潔、高效嘅不二法門。好多網上資源好似 Docker文檔、Linuxize、DigitalOcean 嘅教程都會強調呢一點,就係資源回收同系統維護係長期戰,由每一個細微嘅 rm 命令開始做起。
AboutDocker容器Professional illustrations
批量刪除多個容器技巧
好啦,講完單一容器點樣刪除,咁我哋實戰開發或者測試,成日都會一次過起咗十幾廿個容器出嚟試嘢,要逐個逐個打 docker rm 咪好嘥時間?所以呢個段落就專注講下 批量刪除多個容器技巧,等你可以極速做 容器清理,回收返啲寶貴嘅 磁盤空間。
最直接嘅方法,當然係用 Docker CLI 本身嘅強大功能。如果你想一次過刪除晒所有 已停止的容器,唔使再逐個睇 容器狀態,最簡單就係用 docker container prune 呢個命令。呢個命令係專為 容器資源管理 而設,佢會自動掃描同移除所有狀態係「Exited」嘅容器,仲會好貼心咁問你確認一次先執行,避免手快剷錯嘢。呢個方法對於日常 系統清理 嚟講真係快靚正,尤其適合做完一輪測試之後,想清空檯面嘅時候用。不過要留意,prune 指令只會針對 已停止的容器,如果仲有啲容器行緊,佢係唔會理嘅,呢個設計都係為咗安全起見。
但係好多時我哋嘅需求再複雜少少,例如我想一次過刪除某個特定 Image 衍生出嚟嘅所有容器,又或者想清理晒啲用某個自訂 Network 嘅容器,咁點算呢?呢個時候就要出動管道(pipe)同 xargs 呢啲 Linux 命令,配合 Docker rm 命令 一齊用,做到更精準嘅批量操作。舉個例,你想剷除所有狀態係「Exited」嘅容器,可以咁打命令:docker ps -a --filter status=exited -q | xargs docker rm。呢句命令嘅原理係先用 docker ps -a 配合 --filter 篩選出所有已停止嘅容器,再用 -q 參數只輸出佢哋嘅容器 ID,然後通過管道傳送俾 xargs,等 xargs 幫我哋組合成 docker rm
另外,如果你係用 Docker Compose 起嘅一堆服務,咁批量 移除容器 就更加方便喇。你只需要喺你個 docker-compose.yml 檔案所在嘅目錄,打 docker-compose down 呢個命令,佢就會自動停止並移除當初由 docker-compose up 所創建嘅所有容器、Network 同埋其他相關資源。呢個係管理由 Compose 定義嘅多容器應用程式嘅標準做法,乾淨俐落。如果你想連埋啲 Volumes 都一次過清理埋(呢步要小心,因為會刪埋數據),就可以加多個 -v 參數,即係 docker-compose down -v。不過提多次,刪 Volume 前真係要百分百肯定入面冇重要數據,唔係嘅話就大鑊了。
對於進階少少嘅用家,你可能想定期自動化呢個 容器清理 過程,避免系統累積太多無用嘅容器同 Image,食晒你啲 磁盤空間。你可以考慮寫個簡單嘅 Shell Script,定時執行 docker system prune -a 呢類命令。docker system prune 功能更加全面,佢默認會幫你清除已停止的容器、冇被任何容器使用嘅 Network、構建緩存(build cache)同埋懸空(dangling)嘅映像。加埋 -a 參數就更狠,會連所有冇被容器使用嘅映像都刪除埋,可以回收最多空間,但同時亦都最危險,因為可能會刪除一啲你之後想用但暫時冇容器運行緊嘅基礎映像。所以,自動化清理之前,一定要根據自己嘅工作環境同需求,設定好合適的過濾條件同頻率,做好 資源回收。
總括來講,批量刪除容器唔係得一種方法,由最簡單安全嘅 docker container prune,到精準篩選嘅 docker ps -a --filter 配合 xargs,再到針對項目嘅 docker-compose down,各有各適用場景。關鍵在於你要清楚自己想做咩類型嘅 容器清理,了解清楚命令背後會影響到啲咩資源,好似 容器、Network、Volumes 同 Image 等等,咁先可以做到高效又安全嘅 容器資源管理,保持你個 Docker 環境清爽企理。記住,無論用邊種 批量刪除多個容器技巧,最好都養成習慣,先確認一下即將被刪除嘅容器清單,咁就萬無一失啦。
AboutcontainerProfessional illustrations
點樣移除所有已停止容器
好啦,講到容器管理,其中一個最常見嘅日常維護動作就係「點樣移除所有已停止容器」。呢個操作聽落簡單,但係對於有效管理Docker環境、釋放寶貴嘅磁盤空間管理嚟講,係至關重要嘅一步。好多時我哋開發或者測試完,系統入面就會留低一大堆狀態係「Exited」嘅已停止的容器,佢哋雖然唔會再運行,但依然會佔用磁碟空間同埋系統資源,長年累月唔清理,分分鐘食咗你幾十GB都唔出奇。所以,識得點樣有效率咁進行容器清理,絕對係每個用Docker嘅工程師必學嘅基本功。
咁最直接嘅方法,梗係用返Docker CLI入面嘅「docker rm」命令啦。不過,如果你要逐個逐個容器去搵出嚟再刪,真係會做到手軟。聰明嘅做法係結合其他命令一齊用。例如,你可以用「docker ps -a」列出所有容器(包括已停止嘅),然後用「grep」篩選出狀態係「Exited」嘅,再將佢哋嘅ID傳遞俾「docker rm」。呢個方法比較傳統,適合想精準控制刪除邊啲容器嘅時候用。但係,喺2026年嘅今日,Docker本身已經提供咗更強大、更一鍵化嘅容器刪除工具,就係「docker container prune」呢個命令。
「docker container prune」呢個命令,可以話係為咗系統清理而生嘅神器。你只要喺終端機打呢句命令,Docker就會自動掃描你系統裡面所有已停止的容器,然後問你係咪確定要刪除。你答「y」確認之後,佢就會幫你一次過清走晒,仲會好貼心咁報告返總共釋放咗幾多磁碟空間出嚟。呢個方法超級方便,完全唔使你自己去篩選ID,對於日常嘅資源回收工作嚟講,效率極高。不過要留意,呢個命令只會清除「已停止」嘅容器,對於仲運行緊或者暫停咗嘅容器係完全冇影響嘅,所以可以放心使用。
當然,容器清理並唔係得一種玩法。如果你係用緊Docker Compose嚟管理你嘅多容器應用,咁清理嘅方法又會有少少唔同。你可以進入到你個「docker-compose.yml」文件所在嘅目錄,然後運行「docker-compose down」命令。呢個命令唔單止會停止所有由該docker-compose文件啟動嘅服務容器,仲會順手移除晒佢哋嘅網絡同埋容器本身(默認情況下會保留Volume同埋Image)。如果你想連埋相關嘅網絡同埋Volume都一併清理,可以加上「--volumes」同埋「--remove-orphans」呢啲參數。用Docker Compose嚟做容器生命週期管理,好處就係可以成個項目層面咁去處理資源,更加有條理。
除咗命令之外,我哋亦都要有啲策略性思維。點解會有咁多已停止的容器積存?有時可能係因為我哋習慣咗用「docker run」之後冇加「--rm」參數,令到容器停止後自動保留。又或者係CI/CD流程入面,測試完成後冇做好清理步驟。所以,建立良好習慣同埋自動化流程都好重要。例如,喺非生產環境,可以考慮多用「docker run --rm」嚟跑一次性任務;又或者定期(例如每星期)喺伺服器設定一個Cron Job,自動執行「docker container prune」甚至係「docker system prune」嚟清理所有未使用嘅資源,包括懸空嘅Image、網絡同埋Volume。呢啲都係進階嘅資源管理技巧,可以有效防止系統因為Docker資源累積而變得臃腫。
最後都要提一提風險管理。無論你用邊種方法去移除容器,都要記住呢個操作係不可逆轉嘅。刪除咗嘅容器,入面嘅數據如果冇掛載Volume嘅話,就會一併消失。所以,喺執行任何大規模清理命令之前,最好先用「docker ps -a」或者「docker container ls -a」睇清楚有冇咩重要嘅容器係唔小心停止咗但係需要保留嘅。尤其係啲標籤住「latest」或者有特定版本號嘅容器,可能同你啲Image有對應關係,刪之前諗多秒。總括嚟講,掌握「docker container prune」呢類容器操作命令,配合良好嘅日常習慣,你就可以輕鬆做好Docker嘅磁盤空間管理,保持你個開發或生產環境既乾淨又高效。
AboutContainerProfessional illustrations
用Filter精準篩選刪除
講到用Filter精準篩選刪除,呢個真係Docker容器管理入面嘅高階技巧,尤其係當你個系統行咗一段時間,積累咗一大堆唔同狀態嘅容器,有啲行緊、有啲停咗、有啲係幾個月前嘅實驗品,咁樣成日逐個睇CONTAINER ID再打docker rm就真係好冇效率兼易出錯。所以,識得用Docker CLI提供嘅filter功能,就好似有個智能助理幫你一吓過搵出晒所有符合條件嘅容器,再進行批量操作,無論係清理磁盤空間定係做資源回收,都事半功倍。
咁點樣用呢個filter呢?其實好簡單,個核心就係喺docker rm或者其他Docker命令後面,加個--filter參數。呢個參數可以根據容器嘅唔同屬性嚟篩選,最常用嘅幾個條件包括狀態(status)、標籤(label)、創建時間(since / until)、甚至個名(name)都得。例如,你想一次過刪除所有已經停止咗嘅容器,唔使再docker ps -a睇完再逐個抄ID,直接可以用filter篩選出status=exited嘅容器。不過要留意,docker rm本身唔可以直接用filter批量刪除,通常我哋會配合其他命令嚟達到效果,例如用docker ps -q -f status=exited呢個組合,先列出所有已停止容器嘅ID,再將個結果傳遞(pipe)去docker rm。呢個就係典型嘅Linux管道操作,對於做容器清理嚟講非常之實用。
等我舉個具體啲嘅例子啦。假設你個開發環境用Docker Compose起過好多個唔同版本嘅專案,搞到有幾十個容器停咗喺度食緊你啲磁盤空間。你想清走佢哋,但係又唔想影響到仲行緊嘅容器。咁你就可以用呢個命令組合:首先用docker ps -a --filter status=exited --filter label=com.docker.compose.project=my_old_project --format "table {{.ID}}\t{{.Names}}\t{{.Status}}" 嚟睇下有幾多個符合條件(停咗同屬於某個舊專案)嘅容器,確認無誤之後,再用docker rm $(docker ps -aq -f status=exited -f label=com.docker.compose.project=my_old_project) 一嘢過移除佢哋。咁樣就做到好精準嘅篩選刪除,避免剷錯隔籬。記住,用label做filter係好強大嘅方法,因為Docker Compose同好多編排工具都會自動幫容器加上標籤,方便我哋做後續嘅容器生命週期管理。
除咗狀態同標籤,時間篩選都係好幫手。好似Docker文檔同Linuxize呢類資源都有提過,你可以用until或者since呢啲filter。例如,你想刪除所有喺2026年1月1號之前創建嘅、並且已經停止咗嘅容器,用嚟釋放磁盤空間,你就可以用類似--filter "until=2026-01-01T00:00:00" 咁樣嘅條件。不過要小心,時間篩選要配合其他狀態篩選一齊用,如果唔係可能會誤刪咗一啲好舊但仲行緊嘅重要服務容器。呢個就牽涉到資源管理嘅策略問題,建議定期執行容器清理,而唔係等到磁盤爆滿先一次過清,咁樣風險會低好多。
當然,Docker本身都有個更方便嘅命令專做清理,就係docker container prune。呢個命令本身就內置咗filter功能,你打docker container prune --filter "until=24h" 就可以刪除所有創建超過24小時嘅已停止容器,仲會好貼心咁問你確認唔確認,防止手滑。不過prune命令係無差別攻擊,佢會清走所有符合條件嘅野,如果你想刪得再精準啲,例如只刪某個特定網絡(Network)或者掛載咗某個特定數據卷(Volume)嘅容器,咁就要回歸到用docker ps加filter再管道傳遞嘅方法。你可以用--filter network=my_old_network 或者 --filter volume=my_temp_data 嚟搵出相關容器。
總括嚟講,用Filter精準篩選刪除係每個Docker用家都應該掌握嘅容器操作技巧。佢唔單止幫你節省時間,更重要係令你嘅容器資源管理變得有系統同可預測。無論你係跟緊菜鳥教程學緊基礎,定係已經好似Clarence或者DigitalOcean上面嘅專家咁管理緊生產環境,將filter融入日常維護指令中,定期清理unused resources,先可以確保你個Docker宿主機保持健康,有充足磁盤空間同系統資源去應付新任務。記住,喺2026年嘅今日,容器化技術已經非常成熟,管理工具亦愈嚟愈智能,但最關鍵嘅都係使用者要有清晰嘅清理策略同識得運用正確嘅工具。
AboutDockerProfessional illustrations
強制移除運行中容器方法
好啦,各位Docker用家,有時真係會遇到啲麻煩情況,就係你想用Docker rm 命令去刪除一個容器,但係個容器仲係運行中狀態,咁點算好呢?直接打 docker rm
最直接嘅方法,就係將「停止」同「移除」兩個容器操作合併做一步。你唔使分開打 docker stop 再打 docker rm,而係可以喺Docker CLI度用一個指令搞掂:docker rm -f
除咗用 -f 呢個基本招數,如果你係用緊Docker Compose 嚟管理你嘅多容器應用,個做法又會唔同啲。你可以用 docker-compose down 指令,佢預設就會停止同移除所有由同一個 docker-compose.yml 檔案啟動嘅服務容器、網絡同預設嘅Volume。如果你想更加進取,連埋啲掛載嘅volumes都一次過清埋,就可以加 -v 參數,即係 docker-compose down -v。呢個方法對於做容器清理同釋放磁盤空間好有用,尤其係做測試或者開發環境重建嗰陣,可以確保清得乾乾淨淨。
講到容器資源管理,有時我哋唔係只想移除單一個容器,而係想一次過清走一大堆冇用嘅資源。呢個時候,Docker 提供咗一個好方便嘅指令叫 docker container prune。你打呢個指令,佢會幫你掃描所有已停止的容器,然後問你係咪確定要全部刪除。如果你加 -f 參數,就可以跳過確認步驟直接清走。呢個指令對於定期做系統清理、釋放disk space 好有幫助,因為好多時我哋測試完或者更新完服務,都會留低一大堆冇用嘅容器,用 prune 就可以一次過做資源回收,管理起上嚟就輕鬆好多。
當然啦,強制移除始終係一個有風險嘅容器操作,所以最好養成良好嘅容器生命週期管理習慣。例如,喺建立容器嗰陣,可以考慮用 --rm 參數,等個容器一停止運行就會自動被移除,咁就唔使積存咁多已停止的容器。另外,定期檢查容器狀態都好重要,用 docker ps -a 睇下所有容器嘅清單,再決定邊啲要留、邊啲可以清。對於啲掛載咗重要數據嘅容器,強制移除前一定要確保啲數據已經備份好或者已經持久化到宿主機或者外部Volume度,唔係嘅話就會因小失大啦。
最後提多句,無論你係跟緊官方Docker文檔、定係睇緊其他技術資源,都要記住強制移除係一個最後手段。喺正常嘅容器管理流程入面,應該先優雅地停止服務(例如用 docker stop,等佢有時間處理完結程序),先至再移除容器。咁樣先可以確保應用程式嘅數據完整性同穩定性。不過,當你真係遇到啲棘手情況,識得用 -f 呢把「尚方寶劍」,確實可以幫你迅速解決問題,繼續你嘅開發或者部署工作。
AboutComposeProfessional illustrations
清理Dangling容器實戰
好啦,各位Docker用家,今次我哋就深入傾下「清理Dangling容器實戰」。你知唔知,有時我哋用Docker CLI或者Docker Compose起咗一堆container,試完嘢或者更新完之後,系統入面其實會留低好多「無主孤魂」,即係所謂嘅Dangling容器。呢啲容器通常都係已經停止咗(stopped),但係仲霸住你嘅磁盤空間同埋一啲資源,如果唔定期做下容器清理,好快就會發現disk space唔夠用,部機愈行愈慢。所以,識得點樣有效咁做容器移除,絕對係容器生命週期管理入面好重要嘅一環。
首先,你要識得分乜嘢係Dangling容器。簡單嚟講,佢哋就係一啲已經停止咗運行,但係又冇被明確刪除嘅Docker容器。你可能用docker ps -a命令睇到一大堆狀態係「Exited」嘅container,就係呢啲喇。佢哋唔單止佔用磁盤空間,有時仲會掛住一啲無人用嘅network或者volumes,搞到成個系統亂糟糟。所以,容器資源管理嘅第一步,就係要識得將呢啲「已停止的容器」清走。
咁點樣清先最有效率呢?最基本梗係用Docker rm命令啦。你可以逐個逐個嚟,用docker rm [CONTAINER ID]去移除容器。但係如果成幾十個,逐個搞真係手都軟。所以,Docker CLI其實提供咗一個好方便嘅命令,就係docker container prune。呢個命令係專門用嚟做系統清理(system cleanup)嘅,佢會自動幫你掃描同刪除所有已經停止咗嘅容器,一次過做資源回收,慳返你唔少時間。不過要留意,執行之前最好確認一下,因為刪咗就冇得返轉頭。有啲好似DigitalOcean或者Linuxize呢類技術網站嘅教學都會提,用prune命令之前,最好先用docker ps -a --filter status=exited呢類指令睇清楚有邊啲係可以刪,做個double-check。
當然,實戰上我哋唔係只刪容器就算。一個完整嘅清理流程,仲要考慮埋相關嘅Image、Network同Volume。因為好多時,你刪除一個舊容器,但係佢用開嘅Docker Image可能仲留喺度,又或者一啲無人用嘅network同volumes都仲喺度食空間。所以,進階嘅做法係要配合其他prune命令一齊用。例如,你可以用docker image prune去清走啲懸空(dangling)嘅映像,又或者用docker volume prune同docker network prune去清走冇用嘅資料卷同網絡。呢啲都係容器資源管理(resource management)入面好關鍵嘅步驟,確保你釋放返所有unused resources出嚟。
對於成日用docker-compose做開發或者測試嘅朋友,清理Dangling容器又有另一套心得。因為Docker Compose起嘅容器通常都會有特定嘅project name同service name,你可以用docker-compose down呢個命令,佢唔單止會停止晒所有相關服務,仲可以選擇性地移除埋嗰啲容器同網絡(當然,預設係會移除容器嘅)。如果你只想清走舊嘅、已經停止嘅compose容器,可以考慮先down咗個project,再手動用docker container prune去清埋其他零散嘅。記住,養成定期清理嘅習慣,先可以保持你個開發環境或者伺服器生生猛猛,唔會俾一堆垃圾容器拖慢。
最後提多個實用技巧。如果你係管理緊多個環境或者伺服器,可以考慮將呢啲清理命令寫成script,定時自動執行,咁就唔使驚唔記得做而積存太多垃圾。總而言之,清理Dangling容器唔係一次半次嘅動作,而係應該融入你日常嘅容器操作同維護流程入面。善用Docker CLI提供嘅各種prune命令,結合對容器狀態嘅監察,你就可以好有效咁管理磁盤空間,令你嘅Docker環境保持乾淨同高效。記住,一個整潔嘅系統,先係穩定同高效能嘅基礎。
AboutcomposeProfessional illustrations
2026年最新清理指令更新
講到2026年最新清理指令更新,我哋首先要明瞭,Docker 嘅生態同工具鏈係不斷進步嘅。雖然經典嘅 docker rm 命令依然係移除單一容器嘅基石,但喺大規模開發同持續部署環境下,單純手動逐個剷 container 已經唔夠效率。所以,Docker 本身以及社群最佳實踐,都更強調系統性同自動化嘅容器清理與資源回收。
喺2026年,無論你係用緊 Docker CLI 定係 Docker Compose,對於容器管理嘅思維應該要提升到容器生命週期管理嘅層次。點解?因為你唔單止要處理運行緊或者已停止嘅容器,仲要處理一堆相關聯嘅資源,例如孤兒 Volume、殘留 Network,同埋啲冇用嘅 Image。如果唔理,好快就會食爆你嘅磁盤空間。最新嘅做法係善用各種 prune 系列指令,配合一啲策略性腳本。例如,docker container prune 呢個指令已經變得更加強大同精細,佢可以配合唔同過濾器(filter),幫你一次過清理晒所有已停止的容器。你甚至可以設定只清理某個特定標籤(label)或者喺某個時間之前創建嘅容器,咁樣就唔使驚誤刪重要嘅測試容器啦。
除咗基本 prune,對於用開 docker-compose 嘅朋友,2026年嘅最佳實踐係將清理動作整合落去你嘅工作流程。例如,喺重新部署一組服務之前,你可以先執行 down 命令並加上 -v(移除 volumes)同 --rmi 呢類選項,去控制容器移除嘅同時,點樣處理相關聯嘅 Image 同 Volume。呢種做法確保咗你嘅開發環境唔會積存大量unused resources。另外,而家好多團隊都會設定定期(例如每週)執行系統清理腳本,呢個腳本可能會包含一系列指令:首先用 docker stop 停止一啲閒置好耐嘅容器,跟住用 docker rm 移除佢哋,最後再執行 docker system prune -a --volumes --filter(注意:–volumes 選項要小心使用,因為會刪除所有未被容器使用嘅 volume),嚟一次過回收磁盤空間。不過要提提你,執行呢類全面清理前,一定要確認清楚,唔好刪錯生產環境或者重要數據嘅資源。
講到實例,假設你個團隊每日都會建立好多臨時容器做集成測試,到咗2026年,你可能會用一個更聰明嘅方法:喺創建測試容器時,就統一加上一個標籤,例如 “env=ci-test”。然後,每日收工或者測試週期結束後,就運行一條指令:docker container prune --filter “label=env=ci-test” --force。咁樣就可以精準、自動化咁清理測試垃圾,完全唔使人手介入,實現高效嘅資源回收。另外,對於 Volume 同 Network 嘅管理亦都一樣,docker volume prune 同 docker network prune 都支援類似嘅過濾機制,讓你嘅系統清理工作更加得心應手。
總而言之,2026年嘅容器清理哲學,已經從「手動逐個刪」進化到「設定策略,自動執行」。重點唔再係記住單一指令,而係點樣組合運用 Docker CLI 提供嘅各種 prune、rm、stop 命令,並利用好標籤同過濾器呢啲工具,去設計一個適合自己團隊工作流程嘅容器資源管理方案。咁先至可以確保系統長遠保持清爽,磁盤空間管理做得妥當,提升整體開發同部署效率。記住,定期清理唔用嘅容器、映像同網絡,已經係現代 DevOps 同平台工程師嘅基本責任啦。
AboutImageProfessional illustrations
自動化清理腳本點樣寫
好啦,講到點樣寫自動化清理腳本,呢個真係容器管理入面嘅省時大法,尤其係你部機行緊一大堆測試用或者臨時嘅Docker容器,日積月累真係會食咗你唔少磁盤空間。寫個腳本嘅核心思想,就係要幫你自動處理嗰啲已經冇用嘅資源,即係Docker文檔裡面成日提嘅 unused resources。我哋唔單止要識用 Docker rm 命令 逐個剷,仲要識得用更高階嘅方法去批量做容器清理。
最直接嘅方法,梗係寫個Shell Script啦。你可以先利用 Docker CLI 嘅查詢功能,撈出所有已經停止咗嘅容器,然後再用一個循環去逐個移除。例如,你可以用「docker ps -a -f status=exited」呢個命令,列出所有狀態係「已停止的容器」,再將佢哋嘅Container ID傳去 docker rm 度。不過咁樣做,有時可能會太粗暴,驚剷錯嘢。所以更穩陣嘅做法,係結合埋 docker stop 先確保個容器停咗,先至再做容器刪除。呢個過程就係好基本嘅容器生命週期管理自動化。
不過,Docker本身已經有內置嘅資源回收命令,就係 docker container prune。呢個 prune 命令真係好方便,一句嘢就可以自動清理晒所有已停止的容器,仲會問都唔問你就直接剷(當然你可以加 -f 強制執行)。所以,你個自動化腳本可以簡單到只係定期執行「docker container prune -f」。但係咁樣只係做咗一部分,因為淨係清理容器唔夠㗎,仲有啲冇用嘅 Image、Volume 同 Network 呢?所以,一個完整嘅系統清理腳本,應該要包含埋「docker image prune -a」、「docker volume prune」同「docker network prune」。你可以將呢幾句命令打包埋一齊,咁就一次過做晒全方位嘅容器資源管理,釋放返更多磁盤空間。
對於用開 Docker Compose 嘅朋友,寫清理腳本又有另一種思路。如果你成個項目係用 docker-compose 檔案嚟定義嘅,你可以直接喺腳本裡面,先去到個項目目錄,然後行「docker-compose down」命令。呢個命令會停低並移除晒由Compose檔案啟動嘅所有容器、網絡(通常係默認嗰個),但要注意,佢默認唔會剷埋啲Volumes同Image㗎。如果你想連Volumes都清埋,就要加「-v」參數,即係「docker-compose down -v」。將呢個命令放入你嘅CI/CD流程或者Cron Job度定期行,就係一個針對Compose項目嘅有效自動化清理腳本。
講到實際點樣部署個腳本,最常見就係放喺Linux伺服器度,用Cron Job去定時執行。例如,你可以設定每個星期日凌晨三點,自動行一次你寫好嘅清理腳本。咁樣就確保咗你部機唔會俾啲陳年舊容器同Image塞爆。寫腳本嘅時候,記得加返啲日志記錄功能,例如用「echo」或者「logger」命令,記低每次清理咗幾多個容器、釋放咗幾多空間,方便你之後做資源管理嘅審查同分析。有啲進階嘅寫法,仲會加入判斷,例如只係清理超過30日冇用過嘅容器映像,不過咁就要寫多少少邏輯去處理啦。
總而言之,寫自動化清理腳本嘅關鍵,就係要清楚你嘅清理目標(係淨係要移除容器,定係要連帶清埋映像、卷同網絡),然後靈活運用 Docker CLI 提供嘅各種prune命令,或者結合 docker-compose 嘅工作流程。將呢啲命令包裝成一個可重複執行嘅腳本,再設定好定時任務,你嘅Docker環境就可以保持清爽,唔使再手動做呢啲瑣碎又必須嘅容器操作,真正實現高效嘅系統清理同磁盤空間管理。記住,定期做呢類維護,對於保持系統穩定同效能係好重要嘅一環。
AboutNetworkProfessional illustrations
避免誤刪重要容器攻略
好啦,各位 DevOps 嘅朋友同埋開發者,今次我哋要深入傾下點樣避免誤刪重要容器攻略。呢個 topic 真係好關鍵,因為一個唔小心行錯 docker rm 命令,分分鐘會將你辛辛苦苦 set 好、運行緊重要服務嘅 Container 一下子剷走,到時喊都無謂。喺 2026 年嘅今日,Docker 生態依然係主流,容器管理嘅基本功就更加要打穩陣。
首先,最緊要嘅心法係:永遠先停後刪。呢個係 Docker 容器生命週期管理 嘅黃金法則。好多新手(甚至有時老手趕工)會貪快,直接對住運行緊嘅容器用 docker rm -f 強制刪除。雖然命令係 work,但咁樣就好似直接掹電腦插蘇熄機一樣,有機會導致數據寫入唔完整,或者服務無優雅關閉(graceful shutdown),造成數據損壞。正確做法係先用 docker stop [容器名或ID] 俾個容器有時間完成手頭上嘅工作同安全關閉,等佢變成 已停止的容器 之後,先至用 docker rm 去移除容器。呢個步驟可以大大減低誤刪運行中重要容器嘅風險,因為你多咗一個緩衝步驟去確認。
第二招,善用 Docker CLI 嘅別名(alias)同命名策略。你可以喺自己個 shell config 度 set 個 alias,例如將 docker rm alias 成一個需要確認嘅命令,或者養成習慣,永遠用 docker rm [容器名] 而唔好依賴自動補全嘅 container ID。仲有,幫你啲重要容器改返個清晰、有意義嘅名,唔好用 Docker 自動生成嗰啲無厘頭名字(例如 peaceful_goldstine),當你見到個名叫 prod-mysql-db 或者 nginx-lb-main,你隻手都會自動停一停,諗多秒先敢打 rm 命令啦。另外,對於複雜啲嘅應用,好多團隊已經轉用 Docker Compose 來管理。用 docker-compose down 嘅時候要留意,佢預設會停咗並移除相關嘅容器同網絡(network),但唔會刪除 volumes(數據卷)。如果你唔想連 volume 都刪,就要小心唔好加 -v 參數。呢種用宣告式檔案(docker-compose.yml)管理嘅方法,本身已經係一種防呆措施,因為你要刪嘢,通常都係去改檔案而唔係直接操作命令行,減少手誤機會。
第三,定期進行 容器清理 但要有策略。我知大家部機行得耐,一定會積累好多已經停止咗嘅舊容器,食住你啲 磁盤空間。用 docker container prune 呢個 prune 命令可以一次過清走所有已停止嘅容器,好方便。但正正因為太方便,就更加要小心!執行任何大範圍清理命令前,最好先用 docker ps -a 睇清楚所有容器(包括已停止嘅)狀態,篩選出真係可以刪嘅。你可以結合 docker ps -a --filter 去篩選,例如睇下邊啲停咗超過一個月,又或者打咗特定 label 嘅先做 移除容器。資源回收 係重要,但唔好為咗清 disk space 而誤殺忠良。有啲已停止嘅容器裡面,可能仲保留住一啲未備份嘅 log 或者 config 變更,刪咗就搵唔返。
最後,一定要建立備份同狀態確認嘅習慣。對於極度重要、有狀態(stateful)嘅容器,例如資料庫,你嘅 容器資源管理 策略裡面必須包括定期備份 volumes。咁樣就算真係不幸誤刪咗個容器,你都可以從備份還原數據,重新拉返個 Image 再掛載返個 volume,好快就可以恢復服務。另外,善用 Docker文檔 同業界最佳實踐,好似 DigitalOcean 呢類平台提供嘅教程,都會不斷更新點樣安全地管理容器。記住,docker rm 命令 係一把鋒利嘅刀,用得好可以幫你有效管理資源,進行 system cleanup,清除 unused resources;用唔好就會傷到自己。所以每次隻手準備按 Enter 之前,深呼吸,望多眼個容器名同狀態,呢個就係最好嘅 避免誤刪攻略。
AboutVolumeProfessional illustrations
Docker Compose移除應用
講到用 Docker Compose 移除應用,其實同單純用 Docker CLI 逐個剷走容器係兩回事。好多香港嘅開發者初時都會混淆,以為 docker-compose down 就等於 docker rm container,但其實 Compose 嘅操作係更高層次嘅應用生命週期管理。簡單嚟講,當你用 Docker Compose file 定義咗一個應用堆疊(可能包括幾個容器、網絡同儲存空間),移除呢個應用就唔係逐個 component 手動清理,而係透過一個指令去將整個堆疊有秩序地拆解。呢個過程涉及停止容器、移除容器,同埋處理相關嘅 network 同 volumes,對於保持系統整潔同回收資源好重要。
首先,最核心嘅指令梗係 docker-compose down 啦。當你喺個 docker-compose.yml 檔案所在嘅目錄行呢個指令,Compose 就會做幾件事:第一,佢會停止所有由呢個 Compose file 啟動起緊嘅容器。呢步就好似你先做 docker stop 確保容器狀態正確轉變。第二,佢就會移除呢堆已經停止咗嘅容器。呢度就等同幫你自動執行咗一串 docker rm container 嘅命令,而且係跟番你定義嘅服務名,唔使你自己記住啲隨機生成嘅容器 ID,方便好多。第三,佢預設會移除 Compose 為呢個應用創建嘅網絡(通常係個 default network),但要注意,佢預設唔會剷除 volumes 裏面嘅數據。呢個設計好合理,因為數據持久化好多時係重要嘅,亂剷會出大事。所以,docker-compose down 可以話係標準嘅「移除應用」流程,幫你做好基本嘅容器清理同資源回收。
不過,實戰上我哋嘅需求會再複雜啲。例如,你想徹底大掃除,連埋啲 Volume 數據都唔要,咁你就可以用 docker-compose down -v。加咗個 -v 旗標,佢就會連同呢個 Compose file 裏面聲明咗嘅匿名 volumes 都一併移除。呢個動作對於開發測試環境好有用,尤其係你想由頭嚟過,或者啲測試數據已經冇用,就可以用呢個指令去釋放磁碟空間,做一次徹底嘅系統清理。但千祈要小心,如果個 Volume 係用嚟儲存數據庫數據,而你冇備份嘅話,一剷就真係「冇得返轉頭」。所以,喺做任何涉及 volumes 嘅移除操作前,真係要 double-check 個 Compose file 同確認數據重要性。
另外,有時我哋只想移除容器,但想保留住啲網絡同 Volume 畀第時再用。咁你就可以用 docker-compose rm 呢個指令。呢個指令唔會自動幫你停止容器,佢主要係用嚟移除已經停止咗嘅 Compose 服務容器。你可以加 -s 旗標去停止並移除,但一般嚟講,配合 docker-compose stop 用會更清晰。呢個方法適合啲想分階段做容器生命週期管理嘅情況,例如你先停咗個應用,檢查吓冇問題,再決定移唔移除啲容器實體。
對於進階嘅資源管理,Docker 本身仲有啲好用嘅 prune 指令。雖然唔係 Docker Compose 專屬,但配合落嚟好強大。例如,你行完 docker-compose down 之後,系統可能仲殘留咗一啲冇被 Compose 管理嘅孤立資源,好似一啲冇標籤嘅舊 Image,或者係其他冇用嘅網絡。呢個時候,你可以用 docker system prune 或者更精準嘅 docker container prune 去清走所有已停止嘅容器。用 prune 做容器刪除嘅好處係佢係批量操作,可以一次過釋放大量磁碟空間,對於長期運行嘅伺服器嚟講,係一種好有效嘅資源回收習慣。不過,同樣地,執行前要留意會清走啲咩,可以用 --dry-run 旗標先睇睇效果。
總括嚟講,用 Docker Compose 移除應用,係一個講求策略同清晰度嘅容器操作。佢唔單止係剷走個 container 咁簡單,而係涉及成個應用堆疊嘅協調清理。由基本嘅 down,到徹底嘅 down -v,再到精準嘅 rm 同配合系統級嘅 prune,每一種方法都對應唔同嘅容器資源管理場景。作為開發者或者系統管理員,理解每種方法背後對容器狀態、網絡同儲存空間嘅影響,先至可以確保系統長遠保持乾淨同高效,避免無謂嘅磁碟空間浪費,同時又唔會誤殺重要數據。記住,喺 2026 年嘅今日,容器化技術已經好成熟,工具嘅正確使用比盲目追新功能更重要。
AboutnetworkProfessional illustrations
網絡與容器一併清理
好啦,講到用 Docker rm 命令 去刪除 Container,好多香港嘅開發者都識得用 docker rm
首先,你要明白一個 Docker容器 嘅移除,同佢嘅 容器狀態 好有關係。如果你個 容器 仲行緊,你直接用 Docker rm 命令 係會出錯嘅。正路做法係先用 docker stop 命令去 停止容器,跟住先至 移除容器。不過,Docker CLI 都有啲快捷方法,例如用 docker rm -f 去強制刪除運行緊嘅容器,但呢個方法唔係咁優雅,可能會令到一啲程序未正常結束就關閉,有數據損壞嘅風險。所以,對於正式環境嘅 容器操作,都係建議先停止、後刪除呢個步驟。
咁點樣先可以做到 網絡與容器一併清理 呢?如果你係用 Docker Compose 起嘅服務,咁就簡單好多啦。你喺個 docker-compose.yml 檔案所在嘅目錄,行 docker-compose down 呢個命令,佢唔單止會停低同移除所有相關嘅 容器,仲會跟設定去清理佢哋創建出嚟嘅 Network。呢個就係 docker-compose 工具嘅好處,幫你自動化處理咗一堆 容器資源管理 嘅瑣碎事。記住,淨係行 docker-compose stop 只係停止咗容器,但無移除到,啲 容器 同 網絡 依然會喺度佔用資源。
如果你無用 Docker Compose,而係直接用 Docker CLI 逐個 容器 咁起,咁就要手動處理啦。當你 docker rm 一個 容器 嘅時候,除非你當初用 --rm 旗標嚟運行,否則佢默認係唔會刪除個 容器 連結到嘅 Network。通常,Docker 會為咗方便,自動創建一啲橋接網絡(bridge network)俾容器之間通訊。呢啲網絡如果無容器再用,就會變成孤兒網絡,一直留喺系統度。要清理呢啲無人用嘅網絡,你可以用 docker network prune 呢個命令。佢會掃描系統,然後問你係咪確定要刪除所有無被任何容器使用嘅網絡,呢個就係針對網絡層面嘅 system cleanup。
同樣道理,Volume 嘅管理都係一樣。你刪除 容器 嘅時候,除非你指明 -v 參數(例如 docker rm -v
對於成日要測試或者開發嘅朋友,成日創建又刪除容器,其實 Docker 提供咗一個更強力嘅一鍵清理命令,就係 docker system prune。呢個命令好「大殺傷力」,佢預設會幫你清除所有已停止嘅 容器、所有無人用嘅 網絡、所有構建緩存(dangling images),同埋所有無人用嘅 volumes(如果你加 -a 參數,連無被任何容器引用嘅 Image 都會刪)。用呢個命令之前,真係要諗清楚,或者睇清楚佢列出嚟準備刪嘅係咩,因為佢係做緊一個全系統層面嘅 resource management 同 system cleanup。好多好似 Linuxize、DigitalOcean 呢類技術教學網站,都會提醒用戶小心使用呢類 prune 命令,尤其係生產環境。
最後提多樣嘢,就係 容器管理 嘅心態。將 Docker rm 命令 視為 容器移除 嘅最後一步,而唔係獨立一步。由你設計個 容器 點樣連去 Network、點樣處理 Volume 數據嗰一刻開始,就要諗定將來點樣優雅地清理。養成習慣,定期檢查一下有咩 已停止的容器 或者係無人用嘅資源,做下 磁盤空間管理。呢啲功夫,雖然好似好瑣碎,但對於保持開發或者伺服器環境嘅整潔同高效運行,係非常重要嘅。記住,清理唔係為咗刪嘢,而係為咗更有效咁管理你嘅 容器資源,等你可以更專注喺開發上面。
AboutvolumesProfessional illustrations
磁碟空間釋放最佳實踐
講到磁碟空間釋放,好多 DevOps 或者系統管理員都試過,明明用 Docker rm 命令 剷走咗個 容器,但係硬碟空間好似冇乜點釋放返出嚟,真係幾頭痕。其實呢,單純執行 docker rm 只係移除咗容器本身嘅可寫層(即係容器層),但係背後關聯嘅 Image、Volume 同埋 Network 呢啲資源,好多時仲會留喺系統度,食住你啲空間。所以,要真正做到有效嘅 磁盤空間管理,你一定要有一套完整嘅 容器清理 同 資源回收 策略,唔可以淨係識得 移除容器 咁簡單。
首先,你要搞清楚 容器生命週期管理 嘅完整流程。當你 停止容器 之後(例如用 docker stop),個容器其實仲存在,只係狀態變成咗「已停止的容器」。呢個時候你用 Docker CLI 嘅 docker rm 去刪除佢,先算正式將容器嘅檔案系統層移除。但問題嚟啦,如果你當初運行容器時,掛載咗 volumes,或者 build 咗一大堆中間映像(intermediate images),又或者 Docker 自己累積咗一堆 cache 同埋 log 檔,咁呢啲 unused resources 就會一直霸住位。所以,容器資源管理 嘅關鍵,在於要定期清理呢啲「孤兒資源」。
一個最基本但好有效嘅做法,就係善用 Docker 內置嘅 prune 系列指令。例如,你想一次過清走所有已經停止嘅容器,可以運行 docker container prune。呢個指令會幫你掃描同移除所有狀態為「已停止」嘅 Container,唔使你逐個搵同刪,對於 系統清理 嚟講非常方便。同樣道理,你要清理冇用嘅映像,可以運行 docker image prune。如果你連同所有冇標籤嘅「懸空映像」(dangling images)都想清埋,可以加個 -a 旗標,即係 docker image prune -a。不過要小心,呢個操作可能會刪除一啲你仲用緊但冇標籤嘅中間映像,最好先確認清楚。
對於 Volume 同 Network 呢啲持久化資源,清理就要更加謹慎。因為 volumes 通常儲存咗重要數據,例如 database 檔案,亂刪會出事。你可以先用 docker volume ls 睇下有邊啲 volume 係冇被任何容器掛載緊(即係「孤兒 volume」),再用 docker volume prune 去移除佢哋。同樣,network 都可以用 docker network prune 清理。記住,做任何 prune 操作之前,最好先用 --dry-run 旗標模擬一次,睇吓會刪到啲乜,避免誤刪重要嘢。
另外,好多時食空間嘅元兇,其實係 Docker 嘅 build cache 同埋容器運行時產生嘅 log 檔。尤其係你用 Docker Compose(或者 docker-compose)做開發,成日 rebuild 映像,就會積存大量 cache。你可以定期用 docker builder prune 去清理 build cache。至於 log 檔,Docker 預設用 json-file 驅動,log 會不斷累積。你可以在運行容器時,透過 log-driver 同 log-opts 設定 log 檔案嘅大小上限同數量,防止佢無限膨脹。亦都可以直接喺宿主機上,用 logrotate 工具去管理 /var/lib/docker/containers/ 入面嘅 log 檔案。
對於進階使用者,你可能需要更精準嘅 容器資源管理 策略。例如,設定定期任務(cron job),每星期自動執行一系列 prune 指令。又或者,整合到你的 CI/CD pipeline 裏面,每次部署完成後,自動清理舊容器同懸空映像。Docker文檔 同埋好似 Linuxize、DigitalOcean 呢類技術網站,都有詳細指引教你點樣設定呢類自動化 系統清理 流程。記住,磁碟空間釋放 唔係一次過嘅動作,而係一個持續性嘅 容器管理 習慣。
最後提一提,喺用 docker-compose down 嘅時候,佢預設只會移除容器同網絡,但唔會刪除 volumes。如果你想連 volumes 都清埋,需要加 -v 旗標,即係 docker-compose down -v。不過,同上面講嘅一樣,做呢個操作前,千祈要確認 volume 裏面冇重要數據。總而言之,有效管理 Docker容器 嘅磁碟空間,關鍵在於要全面理解各種資源(映像、容器、volume、網絡、cache、log)嘅生命週期,並且將清理動作融入日常運維工作流之中,咁先可以確保你嘅系統保持清爽,唔會無端端被食爆硬碟空間。
About容器管理Professional illustrations
容器備份後安全刪除
講到容器備份後安全刪除,呢一步絕對唔可以求其,唔係話備份完就即刻 docker rm container 咁簡單。喺容器生命週期管理入面,刪除係最後一步,但一定要確保所有重要數據同設定都已經安全轉移咗,先好進行容器移除。好多時啲人會忽略咗容器同背後Volume(數據卷)嘅關係,以為刪除咗容器就等於清晒所有嘢,結果連埋數據一齊無咗,喊都無謂。所以,正式執行 Docker rm 命令之前,一定要有套清晰嘅容器清理流程。
首先,你要明確知道想刪除嘅Docker容器嘅狀態。係仲運行緊,定係已經停止咗?根據 Docker文檔 同好多專家好似 Linuxize 或者 Clarence 咁講,最好嘅做法係先執行 docker stop 命令去正式停止個容器,等佢有時間完成手頭上嘅工作同安全關閉。呢個步驟對於運行緊數據庫(例如 MySQL、PostgreSQL)或者有狀態應用嘅容器尤其重要,可以避免數據損壞。停止咗之後,佢就會變成已停止的容器,呢個時候先至係考慮刪除嘅合適時機。
跟住落嚟,就係檢查同處理容器所使用嘅資源,特別係 Network(網絡)同 Volume(數據卷)。呢度就係容器資源管理嘅核心。你應該用 Docker CLI 命令去檢查呢個容器連結咗邊啲網絡同掛載咗邊啲卷。例如,如果你用緊 Docker Compose(或者 docker-compose)嚟管理,咁喺 docker-compose.yml 檔案裏面通常會定義埋 volumes 同 networks。喺刪除容器之前,你要決定呢啲Volume入面嘅數據點處理:係要保留落嚟俾新容器用,定係已經備份好可以一齊清理?如果啲數據卷只係俾呢個容器獨佔使用,而且你已經用 docker cp 命令或者直接備份咗卷內數據到主機某個位置,咁你就可以考慮喺刪除容器時一併移除呢啲卷,以釋放磁盤空間。但緊記,如果你無明確指定,docker rm 默認係唔會刪除掛載住嘅匿名或命名卷嘅,呢個設計就係為咗保護你啲數據。
至於點樣實際執行安全刪除,我哋可以分幾個情境嚟講。最直接嘅情況,就係刪除一個已經停止咗嘅單一容器。你可以用 docker rm <容器名稱或ID> 呢個命令。為咗避免刪錯,最好先 docker ps -a 列出所有容器(包括已停止嘅),確認清楚個名或者 ID 先好做。如果你想進取啲,一次過清理晒所有已停止的容器,咁就可以用 docker container prune 呢個強大嘅容器清理命令。佢會問你確認,然後幫你清走晒所有唔再運行緊嘅容器,非常適合用嚟做定期系統清理,回收磁盤空間。不過,用 prune 之前,千祈千祈要確保所有需要嘅數據已經備份好,因為呢個動作係無得返轉頭嘅。
另外一種常見情境,就係當你用 Docker Compose 管理一組服務嘅時候。如果你執行 docker-compose down,佢預設會停止並移除所有相關嘅容器、網絡(由 Compose 檔案創建嘅嗰啲),但一樣係會保留數據卷,以防你啲數據無咗。如果你想連埋數據卷都一併清除(即係進行徹底嘅資源回收),你就需要加 -v 參數,變成 docker-compose down -v。呢個命令就好有威力,可以幫你成個項目環境清得乾乾淨淨,所以都係嗰句,必須喺備份後先好做。好似 DigitalOcean 嘅教程都有強調,妥善管理 volumes 同理解 docker-compose down 嘅各種參數,對於維持一個整潔嘅開發或生產環境係好關鍵嘅。
最後要提一提,容器刪除並唔會影響到用來創建容器嘅 Image(鏡像)。鏡像會一直保留喺本地,直到你手動用 docker image prune 之類嘅命令去清理。所以,成個容器操作流程總結起嚟就係:1) 確認數據已備份(特別係Volume裏面嘅);2) 用 docker stop 安全停止容器;3) 檢查並決定相關網絡同數據卷嘅去留;4) 根據情況,用 docker rm、docker container prune 或 docker-compose down 進行移除;5) 定期檢查同清理未使用的資源,維持系統健康。記住,安全刪除嘅核心思想係「有備份,無懸念」,做好資源管理,先可以令你嘅 Docker 環境又乾淨又高效。
AboutDocker rm 命令Professional illustrations
常見錯誤解決方案
好啦,講到用 Docker rm 命令 去清理 Container,好多香港嘅開發者同 DevOps 朋友都試過撞板,彈出啲錯誤訊息搞到頭都大埋。呢段就同大家拆解幾個 常見錯誤解決方案,等你可以順暢咁做 容器清理,唔使咁炆憎。首先,最經典嘅錯誤就係你未 停止容器 就想直接 移除容器。Docker 設計上好安全,唔會俾你刪除一個運行緊嘅 容器,因為咁樣會好易整爛啲服務同數據。如果你心急打咗 docker rm 容器名 但個 容器 仲行緊,Docker CLI 實會鬧你,話個容器正在運行中。咁點算?好簡單,跟住個正確嘅 容器生命週期管理 步驟做就無錯:先停後刪。你可以用 docker stop 容器名 或者用容器 ID 都得,等佢狀態變成「已停止的容器」之後,再行 docker rm 就搞掂。呢個係最基本,但好多人會忘記嘅步驟。
另一個常見嘅掗拃情況,就係個 容器 明明已經停咗,但係你用 docker rm 都係刪唔到,成日話個容器仲連接住某啲資源。呢度就涉及到 Docker 裡面嘅 Network(網絡)同 Volume(數據卷)嘅綁定問題。有時你建立 容器 嘅時候,掛載咗啲 volumes,又或者連接到啲自定義嘅 network,就算個容器停咗,呢啲連結關係唔一定會自動解除。咁樣就會阻住你進行 容器刪除。解決方法係,你要檢查清楚呢啲依附關係。例如,你可以用 docker inspect 容器名 去睇吓個容器綁定咗邊啲 volumes 同 networks。如果係 volumes 問題,你可以考慮喺刪除容器時加 -v 參數,即係 docker rm -v 容器名,咁樣就會連同佢關聯嘅匿名 volumes 一併移除,幫你做好 資源回收。不過要小心,呢個操作會刪除 volume 裡面嘅數據,如果係重要數據就一定要先備份。如果係 network 問題,你可能需要先將個容器從個網絡度斷開,又或者直接用 docker network disconnect 手動處理咗個連接先。
講開又講,有時你發現磁碟唔夠位,想大掃除,用 docker container prune 呢個指令真係好方便,可以一次過清走所有 已停止的容器,係 系統清理 嘅利器。不過,prune 指令都係有啲陷阱。佢預設只會刪除停咗嘅容器,但唔會理佢哋關聯嘅 volumes 或者 images。所以如果你做完 prune 之後,發現 磁盤空間管理 嘅效果唔明顯,可能就係因為啲無人用嘅 volumes(Docker 叫佢做 dangling volumes)或者舊 Image 仲霸住位。呢個時候,你可能要進階啲,用 docker system prune -a 之類嘅指令去清理埋啲 unused resources,包括網絡、鏡像同緩存。但緊記,用呢啲強力清理指令前,一定要確認清楚有冇重要嘢未拎出嚟,唔係就返唔到轉頭。
仲有一種情況係,你喺用 Docker Compose(或者而家叫 docker-compose)管理一堆服務嘅時候,直接用 docker-compose down 通常會幫你停晒同刪除晒相關嘅 容器、網絡。但如果你係用 docker rm 逐個手動刪除 Compose 起嘅容器,可能會搞亂咗 Compose 自己維護嘅狀態同網絡設定,下次行 docker-compose up 可能會出錯。所以,對於由 Docker Compose 管理嘅項目,最好都係跟返佢套 容器管理 流程,用返 docker-compose down 或者 docker-compose rm 呢類指令去做 容器移除,咁樣先可以確保 資源管理 得乾淨俐落,唔會留低啲散修修嘅網絡或者卷。
最後提一提,唔同嘅學習資源好似 Docker文檔、Linuxize、DigitalOcean 嘅教程,或者中文嘅 菜鳥教程,都會有詳細講解 docker rm 同相關指令嘅參數同最佳實踐。例如,有啲高手會教用 --force 或 -f 參數去強制刪除運行中嘅容器,但呢個係高危動作,除非你好清楚個容器嘅作用同後果,否則唔好亂用。做 容器資源管理,最緊要係有條理,知道每個指令背後做緊咩,同埋定期做 system cleanup 去釋放 disk space,咁先可以保持你個開發或生產環境既清爽又高效。記住,Docker rm 命令 唔單止係刪除,更係 容器操作 同 資源回收 裡面好重要嘅一環,處理得好,之後管理起上嚟就事半功倍啦。