Boshqaruv — ps, stop, start, rm, prune
Muammodan boshlaylik
Bir hafta Docker bilan ishladingiz. Docker Desktop: "Disk 58 GB band". docker ps -a — 73 ta to'xtatilgan konteyner. docker images — 40 ta image, yarmi nomsiz (<none>). Qaysi biri kerak, qaysi biri — axlat?
Docker hech narsani o'zi o'chirmaydi. Tozalash — sizning ishingiz.
Ko'rish
docker ps # ishlayotgan konteynerlar
docker ps -a # hammasi (to'xtatilganlar bilan)
docker ps -q # faqat ID lar — boshqa buyruqlarga uzatish uchun
docker ps --filter "status=exited"
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
To'xtatish va ishga tushirish
docker stop web # yumshoq: SIGTERM, 10 soniya kutadi, keyin SIGKILL
docker stop -t 30 web # 30 soniya kutish
docker kill web # darhol (SIGKILL) — faqat qotib qolsa
docker start web # to'xtatilganini qayta ishga tushirish
docker restart web # stop + start
docker pause web # jarayonlarni muzlatish (xotira saqlanadi)
docker unpause web
stop — ilovaga "ishni tugat" degan signal beradi: ochiq ulanishlarni yopish, ma'lumotni diskka yozish. Baza konteynerlari uchun muhim — kill bilan ma'lumot buzilishi mumkin.
O'chirish
docker rm web # to'xtatilgan konteynerni o'chirish
docker rm -f web # ishlayotgan bo'lsa ham
docker rm $(docker ps -aq --filter "status=exited") # barcha to'xtatilganlar
Image lar:
docker rmi nginx:1.25 # image ni o'chirish
docker image rm nginx:1.25 # xuddi shu
Image dan konteyner yaratilgan bo'lsa (hatto to'xtatilgan) — o'chirib bo'lmaydi:
Error: conflict: unable to remove repository reference "nginx:1.25" (must force) - container a3f9 is using its referenced image
Avval konteynerni o'chiring.
prune — ommaviy tozalash
docker container prune # barcha to'xtatilgan konteynerlar
docker image prune # "osilib qolgan" (dangling, <none>) image lar
docker image prune -a # hech qanday konteyner ishlatmayotgan BARCHA image lar
docker volume prune # hech qanday konteyner ishlatmayotgan volume lar ⚠️
docker network prune # ishlatilmayotgan tarmoqlar
docker builder prune # build keshi
Hammasi bitta buyruqda:
docker system prune # to'xtatilgan konteynerlar, dangling image lar, tarmoqlar, build keshi
docker system prune -a # + ishlatilmayotgan barcha image lar
[!WARNING]
docker volume prunevadocker system prune --volumes— ma'lumotlar bazalarining ma'lumotlarini o'chirishi mumkin. Konteyner to'xtatilgan va o'chirilgan bo'lsa, uning volume i "ishlatilmayotgan" hisoblanadi. Volume larni prune qilishdan oldindocker volume lsbilan nima o'chirilishini tekshiring.
Disk qancha band
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 40 6 18.2GB 14.7GB (80%)
Containers 73 3 1.2GB 1.1GB (91%)
Local Volumes 12 4 6.3GB 2.8GB (44%)
Build Cache 214 0 9.8GB 9.8GB
RECLAIMABLE — tozalash bilan bo'shatsa bo'ladigan joy.
Dangling image lar
docker images
REPOSITORY TAG IMAGE ID SIZE
mening-api latest 9f2c1a... 180MB
<none> <none> 3b7e4d... 180MB ← dangling
<none> <none> a1c8f2... 178MB ← dangling
docker build -t mening-api . ni har safar qayta ishlatganingizda yangi image mening-api:latest nomini oladi, eskisi esa nomsiz — <none> — qoladi. Ular disk yeydi va hech narsaga kerak emas: docker image prune.
Bir nechta konteyner bilan
docker stop $(docker ps -q) # barcha ishlayotganlarni to'xtatish
docker rm -f $(docker ps -aq) # BARCHA konteynerlarni o'chirish ⚠️
$(...) — bash/WSL sintaksisi. PowerShell da:
docker ps -q | ForEach-Object { docker stop $_ }
Docker Desktop interfeysi
Containers, Images, Volumes bo'limlarida — xuddi shu amallar tugmalar bilan: to'xtatish, o'chirish, loglar, terminal. Boshlanishda qulay, lekin buyruqlarni bilish — serverda (grafik interfeys yo'q) va avtomatlashtirishda zarur.
Tozalash odati
Ishlab chiqish kompyuterida haftada bir marta:
docker system df
docker system prune
Kerakli konteynerlar va volume lar saqlanadi, axlat ketadi. Bir necha gigabayt bo'shaydi.
Nima uchun shunday?
Nima uchun Docker to'xtatilgan konteynerlar va eski image larni o'zi o'chirmaydi?
Chunki u sizning ma'lumotingiz qaysi biri ekanini bilmaydi. To'xtatilgan konteynerda debug uchun kerakli loglar bo'lishi mumkin; eski image — ertaga qaytish kerak bo'ladigan oldingi versiya; ishlatilmayotgan volume — ertaga qayta ulanadigan baza ma'lumotlari. Avtomatik o'chirish bir marta muhim narsani yo'q qilsa — ishonch yo'qoladi. Shuning uchun Docker xavfsiz standart tanlaydi: hech narsani o'chirmaslik, va sizga qulay prune vositalarini berish.
Xulosa
Eslab qoling:
docker ps [-a] [-q]— ro'yxatstop(yumshoq) /kill(majburan) /start/restartrm [-f]— konteyner,rmi— image; avval konteyner, keyin imagedocker system df— disk qancha bandprune:container,image [-a],builder,systemvolume prune— ehtiyot bo'ling, baza ma'lumotlari- Dangling (
<none>) image lar — qayta build qoldig'i; tozalang
Keyingi dars
8-dars: Ichiga kirish va loglar — exec, logs, inspect