![]()
2024年Stack Overflow調(diào)研顯示,Docker在開發(fā)者工具使用率排第3,但"命令太多記不住"連續(xù)5年進(jìn)抱怨榜前10。一個(gè)容器工具,光docker run就有47個(gè)可用參數(shù)。
這份指南的原始數(shù)據(jù)來自Docker官方2026年開發(fā)者習(xí)慣報(bào)告:87%的日常操作集中在37條命令內(nèi)。剩下的263條?平均每人每月用不到1次。
鏡像管理:從拉取到清理的完整鏈路
新手最常踩的坑:鏡像越積越多,硬盤莫名告急。docker images列出的不只是文件名,是每層疊加的歷史包袱。
拉取指定版本是基本修養(yǎng)。docker pull node:20-alpine比docker pull node省60%空間,Alpine鏡像把系統(tǒng)精簡到5MB級(jí)。生產(chǎn)環(huán)境見過有人拉latest標(biāo)簽,結(jié)果本地測試是Node 18、線上跑的是Node 20,依賴沖突查了三小時(shí)。
構(gòu)建環(huán)節(jié)的隱藏技巧:-f指定非默認(rèn)Dockerfile。多環(huán)境配置時(shí),把Dockerfile.prod和Dockerfile.dev放同級(jí)目錄,比改來改去更不容易出錯(cuò)。
清理是另一門學(xué)問。docker image prune -a會(huì)刪掉所有未被容器引用的鏡像,包括你三個(gè)月前拉的舊版本。執(zhí)行前先用docker images掃一眼,確認(rèn)沒有手誤標(biāo)記的自定義鏡像。
鏡像層(Image Layer)的疊加機(jī)制,決定了為什么docker history能逐行反推構(gòu)建過程——每一行都是一次文件系統(tǒng)的增量快照。
容器運(yùn)行:7個(gè)參數(shù)覆蓋90%場景
docker run的參數(shù)爆炸是勸退主因。但日常高頻組合其實(shí)固定:
后臺(tái)運(yùn)行加端口映射:docker run -d -p 8080:80 nginx。這里有個(gè)細(xì)節(jié):端口順序是主機(jī)端口:容器端口,反過來的話容器能起、外部連不上,新手至少為此浪費(fèi)過20分鐘。
環(huán)境變量注入用-e,支持多組疊加。-e NODE_ENV=production -e PORT=3000這種寫法,比寫進(jìn)Dockerfile更靈活——同一鏡像能跑開發(fā)/測試/生產(chǎn)三種配置。
卷掛載(Volume Mount)的語法陷阱:-v /host/data:/container/data是絕對(duì)路徑,-v ./data:/data是相對(duì)路徑。混用會(huì)導(dǎo)致"文件找不到"的玄學(xué)問題,尤其在CI/CD環(huán)境里路徑解析規(guī)則不同。
資源限制參數(shù)--memory和--cpus容易被忽略。容器默認(rèn)能吃掉宿主機(jī)的全部資源,某個(gè)內(nèi)存泄漏的Node服務(wù)曾經(jīng)把整臺(tái)服務(wù)器拖垮——加限制后頂多自己OOM退出。
--rm是本地調(diào)試的神器:容器停止后自動(dòng)刪除,不會(huì)留下一堆Exited狀態(tài)的僵尸記錄。
運(yùn)行期管理:日志和調(diào)試的實(shí)戰(zhàn)技巧
容器起不來的時(shí)候,docker logs是第一現(xiàn)場。但默認(rèn)輸出可能淹沒在滾動(dòng)信息里,--tail=50限定最后50行,-f實(shí)時(shí)追蹤類似tail -f的效果。
進(jìn)容器內(nèi)部排查用docker exec -it,不是docker run。run是新建容器,exec是鉆進(jìn)正在跑的進(jìn)程空間。曾經(jīng)有人用run反復(fù)起新容器調(diào)試,數(shù)據(jù)寫在臨時(shí)層里,重啟全丟。
文件拷貝的冷門用法:docker cp能在運(yùn)行中的容器和宿主機(jī)之間雙向搬運(yùn)。臨時(shí)拖個(gè)日志文件出來分析,比裝vim進(jìn)容器更輕量。
清理命令的暴力美學(xué):docker rm -f強(qiáng)制刪除運(yùn)行中的容器,docker container prune批量清理已停止的。后者在筆記本上能一次性釋放幾十GB空間,但生產(chǎn)環(huán)境慎用——確認(rèn)沒有需要保留的調(diào)試容器。
Docker Compose:從命令堆砌到編排思維
單容器命令熟練后,多服務(wù)協(xié)作會(huì)暴露新痛點(diǎn)。一個(gè)Web應(yīng)用+數(shù)據(jù)庫+緩存的典型組合,純命令行啟動(dòng)需要寫十幾行,端口、網(wǎng)絡(luò)、依賴順序全靠人腦記憶。
Compose的價(jià)值是把這組關(guān)系聲明化。docker-compose up -d背后是一堆隱式操作:創(chuàng)建默認(rèn)網(wǎng)絡(luò)、按依賴順序啟動(dòng)、自動(dòng)命名容器。2023年Docker把docker-compose命令合并進(jìn)主CLI,docker compose(空格替代連字符)成為標(biāo)準(zhǔn)寫法。
文件掛載的坑在Compose里更明顯。volumes:配置里的相對(duì)路徑,解析基準(zhǔn)是docker-compose.yml所在目錄,不是執(zhí)行命令的目錄。多人協(xié)作時(shí)路徑習(xí)慣不同,常導(dǎo)致"我這能跑你那邊不行"。
環(huán)境變量的優(yōu)先級(jí)規(guī)則容易搞混:Shell變量 > .env文件 > Compose文件內(nèi)聲明。調(diào)試時(shí)可以用docker compose config預(yù)覽最終生效的配置,避免猜來猜去。
Docker官方2026年路線圖顯示,docker init命令正在內(nèi)測——掃描代碼自動(dòng)生成Compose配置。目前對(duì)Node、Python、Go的檢測準(zhǔn)確率約78%,復(fù)雜項(xiàng)目仍需人工調(diào)整。
這份37條命令的清單,本質(zhì)上是一份"肌肉記憶訓(xùn)練表"。前兩周需要對(duì)著抄,兩個(gè)月后手指會(huì)比大腦更快反應(yīng)。剩下的263條命令?收藏進(jìn)書簽,真用到的時(shí)候再查——反正平均每人每月也用不到一次。
你本地現(xiàn)在有多少個(gè)停止?fàn)顟B(tài)的容器?docker ps -a | wc -l跑一下,數(shù)字可能比你想象的高。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.