Docker Asoslari: Boshlang'ichlar Uchun To'liq Qo'llanma

Muallif: Javohir Abdullayev · · Server va DevOps

Docker Asoslari: Boshlang'ichlar Uchun To'liq Qo'llanma

Docker Nima va U Nega Har Bir Dasturchiga Kerak?

Dastur yaratish jarayonida eng ko'p uchraydigan muammolardan biri — bu «Mening kompyuterimda ishlayotgan edi, serverda esa ishlamayapti» degan vaziyatdir. Ishlab chiqish muhiti (local environment) bilan ishlab chiqarish serveri (production) o'rtasidagi farqlar turli xil xatolarga sabab bo'ladi. Docker aynan shu muammoni tubdan hal qilish uchun yaratilgan.

Docker — bu ilovalarni barcha bog'liqliklari (kutubxonalar, Python versiyasi, tizim sozlamalari) bilan birgalikda yagona ixcham paketga, ya'ni konteynerga joylash va uni istalgan tizimda bir xil natija bilan ishga tushirish imkonini beruvchi konteynerlashtirish platformasidir.

Konteyner va Virtual Mashina (VM) O'rtasidagi Farq

Ko'pchilik boshlovchilar konteynerlarni VirtualBox yoki VMware kabi virtual mashinalar bilan adashtirishadi. Biroq ular tubdan farq qiladi:

  • Virtual Mashina: Har bir virtual tizim uchun alohida to'liq operatsion tizim (Guest OS) o'rnatiladi. Bu gipervizor orqali ishlaydi, juda ko'p operativ xotira (RAM) va disk maydonini talab qiladi hamda sekin yuklanadi.
  • Docker Konteyneri: Asosiy operatsion tizimning (Host OS) yadrosidan (kernel) birgalikda foydalanadi. Faqatgina zarur kutubxonalar va dastur fayllarini o'z ichiga oladi. Natijada konteynerlar bir necha soniyada ishga tushadi va juda kam resurs sarflaydi.

Docker-ning Asosiy Tushunchalari

Docker bilan ishlashni boshlashdan oldin to'rtta tayanch tushunchani yaxshi o'zlashtirish zarur:

  1. Dockerfile: Ilovani qanday qurish kerakligi yozilgan bosqichma-bosqich ko'rsatmalar fayli.
  2. Image (Obraz): Dockerfile asosida yig'ilgan, o'zgarmas shablon. Buni dasturning «qolip nusxasi» deb tasavvur qilish mumkin.
  3. Container (Konteyner): Image-ning tirik, ishlayotgan nusxasi. Agar Image sinf (class) bo'lsa, Konteyner undan olingan obyektdir (instance).
  4. Docker Hub: Tayyor obrazlar saqlanadigan ommaviy reyestr (masalan, Python, PostgreSQL, Redis rasmiy obrazlari).

Amaliy Qadam: Python Ilovasi Uchun Dockerfile Yozish

Keling, sodda Python veb-ilovasini Docker konteyneriga joylaymiz. Buning uchun loyiha papkasida Dockerfile nomli fayl yaratamiz:

# Asosiy obraz sifatida rasmiy yengil Python obrazini olamiz
FROM python:3.11-slim

# Konteyner ichidagi ishchi papkani belgilaymiz
WORKDIR /app

# Avval faqat requirements.txt faylini nusxalaymiz (keshlash samarali ishlashi uchun)
COPY requirements.txt .

# Kutubxonalarni o'rnatamiz
RUN pip install --no-cache-dir -r requirements.txt

# Loyihaning qolgan barcha fayllarini nusxalaymiz
COPY . .

# Ilova ishlaydigan portni ochiq deb belgilaymiz
EXPOSE 8000

# Konteyner ishga tushganda bajariladigan asosiy buyruq
CMD ["python", "main.py"]

Kundalik Ishda Eng Ko'p Ishlatiladigan Docker Buyruqlari

Loyihani boshqarishda siz eng ko'p murojaat qiladigan buyruqlar quyidagilardir:

  • docker build -t mening-ilovam . — Dockerfile asosida yangi obraz yig'ish.
  • docker run -d -p 8000:8000 --name mening_konteynerim mening-ilovam — Obrazdan konteyner yaratish va uni fonda ishga tushirish (8000-portni kompyuter portiga bog'laydi).
  • docker ps — Hozirda ishlab turgan konteynerlar ro'yxatini ko'rish (barcha to'xtaganlarini ko'rish uchun -a bayrog'i qo'shiladi).
  • docker logs -f mening_konteynerim — Konteyner ichidagi chiqishlar va xatoliklar logini real vaqt rejimida kuzatish.
  • docker stop mening_konteynerim — Ishlab turgan konteynerni to'xtatish.
  • docker rm mening_konteynerim — To'xtatilgan konteynerni o'chirish.
  • docker rmi mening-ilovam — Keraksiz obrazni diskdan butunlay o'chirish.

Docker Compose Nima va U Nega Zarur?

Haqiqiy loyihalar faqat bitta dasturdan iborat bo'lmaydi. Masalan, Django sayti yonida PostgreSQL ma'lumotlar bazasi va Redis kesh tizimi ham kerak bo'ladi. Har birini alohida buyruq bilan ishga tushirish juda noqulay.

Docker Compose — bu ko'p konteynerli ilovalarni bitta docker-compose.yml fayli orqali sozlash va docker compose up buyrug'i orqali bir vaqtning o'zida hammasini ishga tushirish vositasidir.

version: '3.8'
services:
  web:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - db
  db:
    image: postgres:15
    environment:
      POSTGRES_DB: mydatabase
      POSTGRES_USER: user
      POSTGRES_PASSWORD: secretpassword
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:

Boshlovchilar Uchun 4 Ta Muhim Maslahat

  1. .dockerignore faylidan foydalaning: .git, venv, __pycache__ kabi keraksiz papkalarni Dockerfile ichiga ko'chirmang. Bu obraz hajmini sezilarli darajada kichraytiradi.
  2. Yengil bazaviy obrazlarni tanlang: Imkon qadar alpine yoki slim tegli obrazlardan foydalaning.
  3. Layer keshidan to'g'ri foydalaning: Tez-tez o'zgaradigan kod fayllarini kutubxonalar o'rnatilgandan keyin ko'chiring.
  4. Xavfsizlik: Konteyner ichida barcha jarayonlarni doimiy ravishda root foydalanuvchi sifatida yurgizmaslikka odatlaning.

Docker dasturchi hayotini osonlashtiruvchi, loyihani serverga yuklash (deploy) va jamoada birgalikda ishlashni yangi darajaga olib chiquvchi zamonaviy standartdir. Uni o'rganish orqali siz IT sohasidagi o'z qimmatingizni sezilarli oshirasiz.

Teglar: #Docker #DevOps #Server #Linux #Dockerfile