docker run — -d, --name, --rm, -it

~12 daq · Docker · Konteynerlar bilan ishlash

Muammodan boshlaylik

docker run — Docker ning eng ko'p ishlatiladigan buyrug'i. Lekin parametrlarsiz u noqulay:

  • Terminal band bo'lib qoladi — boshqa buyruq yoza olmaysiz
  • Konteynerlarga tasodifiy nomlar: elegant_hopper, zealous_turing — qaysi biri qaysi?
  • Har bir sinovdan keyin to'xtatilgan konteynerlar to'planib qoladi
  • Konteyner ichiga kirib bo'lmaydi

Bu darsda eng muhim parametrlarni tartibga solamiz.


Umumiy shakl

docker run [PARAMETRLAR] IMAGE [BUYRUQ] [ARGUMENTLAR]
docker run -d --name web -p 8080:80 nginx:1.27
#          └──── parametrlar ────┘   └ image ┘

docker run --rm ubuntu ls -la /etc
#          └param┘ └image┘ └buyruq + argumentlar┘

Muhim: parametrlar image nomidan oldin. Image dan keyin yozilgan narsa — konteyner ichida bajariladigan buyruq.

docker run nginx -d       # ❌ -d nginx ga argument sifatida uzatiladi, Docker ga emas
docker run -d nginx       # ✅

-d — orqa fonda (detached)

docker run nginx          # terminal band, loglar ekranda; Ctrl + C — konteyner to'xtaydi
docker run -d nginx       # konteyner ID sini chiqaradi va terminal bo'shaydi

Serverlar, bazalar, veb-ilovalar — doim -d.


--name — nom berish

docker run -d --name baza postgres:17
docker logs baza
docker stop baza

Nom — ID o'rniga qulay identifikator. Har bir nom — noyob:

docker: Error response from daemon: Conflict. The container name "/baza" is already in use

Eski konteynerni o'chiring (docker rm -f baza) yoki boshqa nom bering.


--rm — to'xtaganda o'chirish

docker run --rm ubuntu cat /etc/os-release

Konteyner ishini tugatgach avtomatik o'chiriladi. Bir martalik buyruqlar va sinovlar uchun — majburiy odat, aks holda docker ps -a yuzlab "Exited" konteynerlar bilan to'ladi.


-it — interaktiv terminal

docker run -it --rm ubuntu bash
docker run -it --rm python:3.13
  • -i (interactive) — klaviatura kiritishini konteynerga uzatish
  • -t (tty) — haqiqiy terminal (ranglar, kursor, Ctrl + C)

Deyarli doim birga ishlatiladi. Ichkarida ishlash, REPL, debug uchun.


Buyruqni almashtirish

Har bir image da standart buyruq bor (nginx → nginx serverini ishga tushirish). Image dan keyin yozilgan buyruq uni almashtiradi:

docker run --rm node:22 node --version          # v22.11.0
docker run --rm node:22 npm --version
docker run --rm python:3.13 python -c "print(2**100)"
docker run --rm alpine ping -c 3 google.com

Boshqa foydali parametrlar

docker run -d \
  --name api \
  -p 3000:3000 \
  -e NODE_ENV=production \
  -v api-data:/app/data \
  -w /app \
  --restart unless-stopped \
  --memory 512m \
  mening-api:1.0
Parametr Vazifasi
-p host:konteyner Port
-e KALIT=qiymat Muhit o'zgaruvchisi
-v manba:yo'l Volume yoki bind mount
-w /yo'l Ishchi papka
--restart Qayta ishga tushish siyosati
--memory, --cpus Resurs chegaralari
--network Tarmoq (23-dars)
--platform linux/amd64 Arxitektura (Apple Silicon da)
-u 1000:1000 Qaysi foydalanuvchi sifatida ishlash

Uzun buyruqlar va Compose

docker run -d --name api -p 3000:3000 -e NODE_ENV=production -e DB_HOST=baza \
  -e DB_PASSWORD=... -v api-data:/app/data --network loyiha --restart unless-stopped mening-api:1.0

Bunday buyruqni har safar yozish, eslab qolish va jamoaga yetkazish qiyin. 26-darsda Docker Compose bularning hammasini bitta o'qishli faylga yozish imkonini beradi. Hozircha docker run ni yaxshi bilish — Compose ichida nima bo'layotganini tushunish uchun zarur.


Nima uchun shunday?

Nima uchun parametrlar image nomidan oldin, buyruq esa keyin yoziladi?

Chunki image dan keyingi hamma narsa konteyner ichidagi dasturga tegishli — Docker uni o'qimaydi, shunchaki uzatadi. Docker o'zi uchun parametrlarni image nomigacha o'qiydi, undan keyin esa "bu mening ishim emas" deydi. Bu chegara aniq bo'lishi kerak: aks holda docker run ubuntu ls -l dagi -l Docker parametrimi yoki ls nikimi — noaniq bo'lardi.


Xulosa

Eslab qoling:

  • docker run [parametrlar] image [buyruq] — parametrlar image dan oldin
  • -d — fonda; --name — noyob nom; --rm — tugagach o'chirish
  • -it — interaktiv terminal
  • Image dan keyingi buyruq — standart buyruqni almashtiradi
  • -p, -e, -v, --restart, --memory — keyingi darslarda batafsil
  • Uzun docker run lar — Compose ga (26-dars)

Keyingi dars

7-dars: Boshqaruv — ps, stop, start, rm, prune