๐Ÿณ
Hosting

Docker Compose: ko'p konteynerli ilovani bitta YAML faylda boshqarish

03.01.2026
โ† Barcha maqolalar

Zamonaviy veb-ilovalar deyarli hech qachon bitta dasturdan iborat bo'lmaydi. Oddiy bir loyiha ham odatda veb-server, ma'lumotlar bazasi va kesh xizmatini birga talab qiladi. Ana shu komponentlarni har birini alohida o'rnatish, sozlash va bir-biriga ulash ko'p vaqt oladi hamda xatolarga sabab bo'ladi. Docker va Docker Compose aynan shu muammoni hal qilish uchun yaratilgan bo'lib, butun ishlash muhitini bitta fayl orqali e'lon qilish va bir buyruq bilan ishga tushirish imkonini beradi.

Konteyner nima va nega kerak

Docker konteyneri โ€” bu ilovani uning barcha bog'liqliklari bilan birga o'rab oluvchi yengil, izolyatsiya qilingan muhitdir. Virtual mashinadan farqli ravishda konteyner butun operatsion tizimni emas, balki faqat ilova uchun zarur kutubxonalar va fayllarni o'z ichiga oladi, shuning uchun u tez ishga tushadi va kam resurs sarflaydi. Bir xil konteyner dasturchining noutbukida ham, sayt.uz serverida ham bir xil tarzda ishlaydi, bu esa "menda ishlayapti-ku" degan klassik muammoni butunlay yo'qotadi. Konteyner obrazi (image) โ€” bu konteynerni yaratish uchun shablon bo'lib, undan istalgancha bir xil nusxalar ko'tarish mumkin.

Bitta konteyner bilan ishlash oson, lekin haqiqiy loyihalarda bir nechta konteyner kerak bo'ladi va ularni qo'lda boshqarish murakkablashadi. Har bir konteyner uchun alohida tarmoq, port va o'zaro bog'lanishni qo'lda yozish charchatadi. Aynan shu yerda Docker Compose vositasi yordamga keladi va bir nechta konteynerni yagona, izchil tizim sifatida boshqarishni soddalashtiradi.

Docker Compose nima qiladi

Docker Compose โ€” bu ko'p konteynerli ilovalarni e'lon qilish va boshqarish uchun mo'ljallangan vosita. Siz barcha kerakli xizmatlarni, ularning obrazlarini, portlarini, jildlarini va o'zaro bog'liqliklarini bitta docker-compose.yml nomli YAML faylda tasvirlaysiz. Shundan so'ng yagona buyruq bilan butun tizim ishga tushadi: Compose kerakli obrazlarni yuklab oladi, konteynerlarni yaratadi, ular orasida tarmoq o'rnatadi va belgilangan tartibda ishga tushiradi. Bu yondashuv muhitni kod sifatida saqlash imkonini beradi, ya'ni konfiguratsiya faylini Git'da versiyalash va jamoa bilan ulashish mumkin.

docker-compose.yml tuzilmasi

Compose faylining markazida services bo'limi turadi โ€” bu yerda har bir konteyner xizmati e'lon qilinadi. Har bir xizmat uchun image orqali qaysi obraz ishlatilishini, ports orqali tashqi va ichki portlarni bog'lashni, volumes orqali ma'lumotlarni doimiy saqlash uchun jildlarni, environment orqali muhit o'zgaruvchilarini va depends_on orqali ishga tushish tartibini belgilaysiz. Quyidagi misol asosiy maydonlarni ko'rsatadi:

services:
  web:
    image: php:8.2-apache
    ports:
      - "8080:80"
    volumes:
      - ./src:/var/www/html
    environment:
      APP_ENV: production
    depends_on:
      - db
      - cache

Bu yerda ports ostidagi "8080:80" yozuvi serverning 8080-portini konteynerning ichki 80-portiga yo'naltiradi. volumes esa loyiha kodini host tizimdan konteynerga ulaydi, shuning uchun kodni o'zgartirganda konteynerni qayta qurish shart emas. depends_on Compose'ga web xizmatini ma'lumotlar bazasi va keshdan keyin ishga tushirishni aytadi.

Amaliy misol: PHP + MySQL + Redis

Endi to'liq, real loyihaga yaqin misolni ko'rib chiqamiz. Bunda veb-ilova PHP'da ishlaydi, ma'lumotlar MySQL bazasida saqlanadi, tez-tez so'raladigan ma'lumotlar esa Redis keshida turadi. Quyidagi konfiguratsiya uchta xizmatni bir-biriga bog'laydi va ularning barchasini yagona tarmoqda birlashtiradi:

services:
  app:
    image: php:8.2-apache
    ports:
      - "8080:80"
    volumes:
      - ./src:/var/www/html
    depends_on:
      - db
      - cache

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: shop
    volumes:
      - db_data:/var/lib/mysql

  cache:
    image: redis:7
    ports:
      - "6379:6379"

volumes:
  db_data:

E'tibor bering, app xizmati ichidan ma'lumotlar bazasiga ulanishda host sifatida oddiygina db nomini ishlatish mumkin, chunki Compose har bir xizmatni nomi bo'yicha tarmoqda topiladigan qiladi. Pastdagi volumes bo'limida e'lon qilingan db_data โ€” bu nomlangan jild bo'lib, MySQL ma'lumotlari konteyner o'chirilganda ham saqlanib qolishini ta'minlaydi. Bu juda muhim, aks holda har safar konteyner qayta yaratilganda baza bo'shab qolar edi.

Asosiy buyruqlar

Compose bilan ishlash bir nechta sodda buyruqqa tayanadi. Butun muhitni ishga tushirish uchun loyiha papkasida turib docker compose up buyrug'i beriladi; -d bayrog'i bilan u fon rejimida ishlaydi va terminalni band qilmaydi. Tizimni to'xtatib, yaratilgan konteyner va tarmoqlarni tozalash uchun docker compose down ishlatiladi. Xizmatlarning ish jarayonini kuzatish va xatolarni topish uchun docker compose logs buyrug'i juda foydali:

docker compose up -d
docker compose logs -f app
docker compose ps
docker compose down

Bu buyruqlar ortida butun bir muhitning hayoti yotadi. Bitta up bilan dasturchi soatlab davom etadigan qo'lda sozlashlardan qutuladi, down esa muhitni izsiz tozalab, tizimni avvalgi holatiga qaytaradi.

Afzalliklar va dev hamda prod farqi

Docker Compose'ning eng katta afzalligi โ€” butun murakkab muhitni bir buyruq bilan ko'tarish va bir buyruq bilan to'xtatish imkoniyatidir. Yangi dasturchi jamoaga qo'shilganda unga faqat repozitoriyni klonlash va up buyrug'ini berish kifoya; u soatlar emas, daqiqalar ichida ishchi muhitga ega bo'ladi. Kelishuv (konfiguratsiya) fayl ichida yozilganligi sababli, hamma bir xil versiyalardagi xizmatlar bilan ishlaydi va muhitlar orasidagi farqlar yo'qoladi.

Shu bilan birga, ishlab chiqish (dev) va ishlab chiqarish (prod) muhitlari uchun yondashuv biroz farq qiladi. Dev rejimida kodni jonli tahrirlash uchun host jildlarini konteynerga ulash qulay, debug rejimi yoqiladi va parollar oddiy bo'lishi mumkin. Prod rejimida esa xavfsizlik birinchi o'rinda turadi: maxfiy ma'lumotlar muhit o'zgaruvchilari yoki maxsus saqlash orqali himoyalanadi, kodni jonli ulash o'rniga obrazga to'liq joylashtirish afzal ko'riladi va resurs cheklovlari qo'yiladi. sayt.uz serverlarida loyihangizni joylashtirishda aynan shu prod yondashuvni qo'llash barqaror va xavfsiz ishlashni ta'minlaydi. Docker Compose'ni o'rganish bugungi dasturchi va DevOps mutaxassisi uchun zaruriy ko'nikmaga aylangan.

O'xshash maqolalar

๐Ÿ’ฐ Hosting narx taqqoslash: O'zbekistondagi va xalqaro provider'lar ๐Ÿ“ก Server monitoring vositalari: Prometheus, Grafana, Datadog va boshqalar ๐ŸŒ Edge computing hosting: hisoblashni foydalanuvchiga yaqinlashtirish ๐Ÿข Colocation server: o'z hardware'ingizni data center'da joylash
๐ŸŒ Til
๐Ÿ‡บ๐Ÿ‡ฟ O'zbek โœ“ ๐Ÿ‡บ๐Ÿ‡ฟ ะŽะทะฑะตะบ ๐Ÿ‡ท๐Ÿ‡บ ะ ัƒััะบะธะน ๐Ÿ‡ฌ๐Ÿ‡ง English