Docker

Asosiy Docker buyruqlari

Docker bilan samarali ishlash uchun bir nechta asosiy buyruqni bilish kifoya. Ushbu darsda konteyner va image'larni ko'rish, ishga tushirish, to'xtatish va o'chirish uchun kerak bo'ladigan barcha buyruqlarni misollar bilan o'rganamiz. Bu darsni ko'proq amaliyot bilan mustahkamlang.

docker ps โ€” ishlab turgan konteynerlar

docker ps buyrug'i ayni paytda ishlab turgan konteynerlar ro'yxatini ko'rsatadi:

docker ps
CONTAINER ID   IMAGE   COMMAND                  STATUS         PORTS                  NAMES
a1b2c3d4e5f6   nginx   "/docker-entrypoint."   Up 5 minutes   0.0.0.0:8080->80/tcp   mening-serverim

Har bir konteyner haqida ID, image nomi, holati, portlari va nomi ko'rsatiladi. Ammo bu faqat ishlab turgan konteynerlarni beradi. To'xtatilganlarini ham ko'rish uchun -a (all) bayrog'ini qo'shamiz:

docker ps -a

-a bilan barcha konteynerlar ko'rinadi โ€” ishlab turganlari ham, to'xtaganlari ham. Bu ayniqsa xatoliklarni topishda foydali: konteyner darhol to'xtab qolgan bo'lsa, uni faqat -a bilan ko'rasiz.

docker images โ€” mavjud image'lar

Kompyuteringizga yuklab olingan image'lar ro'yxatini ko'rish uchun:

docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    a1b2c3d4e5f6   2 weeks ago    187MB
node         20        f6e5d4c3b2a1   3 weeks ago    1.1GB
ubuntu       latest    1a2b3c4d5e6f   1 month ago    77.9MB

Bu yerda image nomi (REPOSITORY), versiyasi (TAG), noyob ID'si, yaratilgan vaqti va hajmi ko'rinadi. TAG โ€” bu versiya belgisi. Agar tag ko'rsatilmasa, standart holatda latest ishlatiladi.

docker pull โ€” image yuklab olish

Image'ni oldindan yuklab olish uchun docker pull ishlatiladi. Odatda docker run buni avtomatik qiladi, ammo ba'zan image'ni oldindan tayyorlab qo'yish qulay:

# Standart (latest) versiyasini yuklash
docker pull nginx

# Aniq versiyasini yuklash
docker pull node:20
docker pull postgres:16
Ishlab chiqarishda (production) doim aniq versiya (tag) ko'rsating, masalan node:20, latest emas. Chunki latest vaqt o'tishi bilan o'zgaradi va ilovangiz kutilmaganda buzilishi mumkin.

docker run โ€” konteyner ishga tushirish va bayroqlari

docker run โ€” asosiy buyruq. Uning eng muhim bayroqlari:

Barcha bayroqlarni birlashtirgan to'liq misol โ€” PostgreSQL ma'lumotlar bazasini ishga tushirish:

docker run -d \
  --name mening-bazam \
  -e POSTGRES_PASSWORD=maxfiy123 \
  -e POSTGRES_DB=dukon \
  -p 5432:5432 \
  -v baza-malumoti:/var/lib/postgresql/data \
  postgres:16

Bu yerda: -e orqali parol va baza nomi beriladi, -p orqali port ochiladi, -v orqali ma'lumot saqlanadigan volume ulanadi. Endi PostgreSQL fonda ishlab turadi.

-e (environment) juda muhim: ko'plab image'lar o'z sozlamalarini muhit o'zgaruvchilari orqali oladi. Masalan, postgres image'i parolni POSTGRES_PASSWORD orqali kutadi. Har bir image hujjatida qanday o'zgaruvchilar kerakligi yozilgan.

docker stop / start / rm โ€” boshqarish

Konteynerlarni to'xtatish, qayta ishga tushirish va o'chirish uchun quyidagi buyruqlar ishlatiladi:

# Konteynerni to'xtatish
docker stop mening-serverim

# To'xtatilgan konteynerni qayta ishga tushirish
docker start mening-serverim

# Konteynerni butunlay o'chirish (avval to'xtatilgan bo'lishi kerak)
docker rm mening-serverim

# Ishlab turgan konteynerni majburan o'chirish
docker rm -f mening-serverim

Muhim farq: stop konteynerni to'xtatadi, ammo o'chirmaydi โ€” u docker ps -ada qoladi va qayta ishga tushirilishi mumkin. rm esa konteynerni butunlay yo'q qiladi.

docker rm bilan o'chirilgan konteyner ichidagi ma'lumotlar (agar volume ishlatilmagan bo'lsa) butunlay yo'qoladi. Muhim ma'lumotni doim volume orqali saqlang โ€” bu haqda alohida darsda gaplashamiz.

docker rmi โ€” image o'chirish

Endi keraksiz image'ni o'chirish. Diqqat: bu rm emas, rmi (remove image):

# Image'ni nomi bilan o'chirish
docker rmi nginx

# Image'ni ID orqali o'chirish
docker rmi a1b2c3d4e5f6
Agar image'dan foydalanayotgan konteynerlar mavjud bo'lsa, docker rmi xatolik beradi. Avval o'sha konteynerlarni o'chirishingiz kerak. Keraksiz image'lar diskda ko'p joy egallaydi, shuning uchun vaqti-vaqti bilan tozalab turing.

docker exec -it โ€” ishlab turgan konteynerga kirish

Ba'zan ishlab turgan konteyner ichiga kirib, buyruq berish kerak bo'ladi (masalan, xatolikni tekshirish yoki fayllarni ko'rish uchun). Buning uchun docker exec ishlatiladi:

docker exec -it mening-serverim bash

Bu buyruq ishlab turgan mening-serverim konteyneri ichida interaktiv bash terminalini ochadi. Endi siz konteyner ichidasiz va uning fayl tizimini ko'rishingiz mumkin. Chiqish uchun exit yozing.

-it ikkita bayroqning birlashmasi: -i (interactive) โ€” kiritishga imkon beradi, -t (tty) โ€” terminal muhitini yaratadi. Ular deyarli doim birga ishlatiladi.

Ba'zi yengil image'larda (masalan, alpine) bash bo'lmaydi. Bunday holatda sh ishlatiladi: docker exec -it konteyner sh.

docker logs โ€” konteyner jurnallari

Fonda ishlab turgan konteyner nima qilayotganini, xatolar bor-yo'qligini ko'rish uchun uning jurnallarini (logs) o'qiymiz:

# Barcha jurnallarni ko'rsatish
docker logs mening-serverim

# Jonli kuzatish (yangi loglar chiqishi bilan ko'rsatiladi)
docker logs -f mening-serverim

# Faqat oxirgi 50 qatorni ko'rsatish
docker logs --tail 50 mening-serverim

-f (follow) bayrog'i jurnalni jonli kuzatadi โ€” bu ilova ishlashini real vaqtda kuzatish uchun juda foydali. Kuzatishni to'xtatish uchun Ctrl+C bosing (bu konteynerni to'xtatmaydi, faqat kuzatishni tugatadi).

docker logs โ€” nosozliklarni tuzatishda (debugging) birinchi murojaat qiladigan buyruqingiz bo'lishi kerak. Konteyner darhol to'xtab qolsa, sababini deyarli har doim loglarda topasiz.

Xulosa