Boshqaruv — ps, stop, start, rm, prune

~10 daq · Docker · Konteynerlar bilan ishlash

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 prune va docker 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 oldin docker volume ls bilan 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'yxat
  • stop (yumshoq) / kill (majburan) / start / restart
  • rm [-f] — konteyner, rmi — image; avval konteyner, keyin image
  • docker system df — disk qancha band
  • prune: container, image [-a], builder, system
  • volume 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