Vibecoding · 17-dars · 9-sinf (DevOps Track)
Fan: Vibecoding · DevOps & Server Arxitekturasi Kohorta: 9-sinf Junior Vibecoder Hafta: 4 (1-soat)

Docker va Konteynerlar: Har Qanday Tizimda Bir Xil Ishlash

Dasturchilarning eng mashhur bahonasi: "Mening kompyuterimda ishlayotgandi-ku!" Serverda esa Node versiyasi boshqa, Linux kutubxonasi yetishmaydi, muhit buzilgan. Bugun siz dasturiy ta'minotni butun muhiti (kutubxonalar, sozlamalar, fayllar) bilan bitta ixcham qutiga o'rab, har qanday serverda bir soniyada ishga tushirishni — Dockerni o'rganasiz.

Real sanoat muammosi

"Mening Kompyuterimda Ishlayotgandi" Sindromi

Klassik muammolar zanjiri

  • Versiyalar to'qnashuvi: Sizda Node v20, serverda esa eski Node v16 o'rnatilgan.
  • OS farqlari: MacOS da ishlaydigan yo'llar (/Users/...) Linux da xato beradi.
  • Yetishmayotgan drayverlar: Python yoki C++ bog'lanmalari serverda yo'q.
  • Qo'lda sozlash azobi: Yangi dasturchi kelganda muhitni sozlash 2 kun oladi.

Docker yechimi: Konteyner

  • Yagona standart paket: Kod + Runtime + Kutubxonalar birga muzlatiladi.
  • Izolyatsiya: Tizimda nima o'rnatilganidan qat'i nazar, konteyner ichi toza.
  • Bir soniyada start: `docker run` buyrug'i tizimni millisekundlarda ko'taradi.
  • Ishonch: Kompyuteringizda qanday ishlagan bo'lsa, AWS va DigitalOcean'da ham 100% xuddi shunday ishlaydi.
Ichki mexanizm

Virtual Mashina (VM) va Konteyner Farqi

Virtual Mashina (Og'ir & Sekin)

  • Hypervisor qatlami: Har bir VM alohida to'liq Guest OS (Ubuntu/Windows) yuklaydi.
  • Hajmi: Bitta VM bir necha gigabayt (3–10 GB) diskni egallaydi.
  • Vaqt: Ishga tushishi 1–3 daqiqa vaqt oladi (BIOS, bootloader).

Docker Konteyner (Yengil & Yashin)

  • Umumiy Linux Yadrosi: Host OS yadrosini (Kernel) ulashadi (Namespaces & Cgroups).
  • Hajmi: Faqat kerakli fayllar — 50–150 MB (Alpine bilan atigi 15 MB!).
  • Tezlik: Oddiy operatsion tizim jarayoni (process) kabi 0.2 soniyada start oladi.
Asosiy terminologiya

Docker Uchligi: Dockerfile → Image → Container

1. Dockerfile (Retsept)

Matnli ko'rsatmalar to'plami. Tizim qanday yig'ilishi kerakligini qadamma-qadam ta'riflaydi.

2. Image (Qolip / Surat)

Muzlatilgan, o'zgarmas (immutable) fayllar to'plami. Dastur kodi va barcha kutubxonalar arxivi.

3. Container (Tirik Jarayon)

Imagedan tug'ilgan faol, ishlayotgan virtual muhit. Uni to'xtatish, o'chirish va ko'paytirish mumkin.

Metafora: Dockerfile — bu tort retsepti. Image — bu pishirib muzlatilgan tayyor tort. Container — bu mehmonlarga tortilgan tirik porsiya!

Direktivalar

Dockerfile Anatomiyasi: Node.js Veb-Xizmati

# 1. Baza qatlami (Rasmiy yengil Node)
FROM node:20-alpine

# 2. Konteyner ichidagi ishchi papka
WORKDIR /app

# 3. Avval faqat bog'liqliklar faylini olamiz (Kesh uchun!)
COPY package*.json ./
RUN npm install --omit=dev

# 4. Asosiy dastur kodini nusxalaymiz
COPY . .

# 5. Konteyner qaysi portda tinglashini bildiramiz
EXPOSE 3000

# 6. Konteyner yoqilganda nima ishga tushsin?
CMD ["node", "server.js"]

6 Ta Asosiy Buyruq

  • FROM: Baza sifatida rasmiy xavfsiz image (masalan: `node:20-alpine`, `python:3.11-slim`).
  • WORKDIR: Konteyner ichida barcha buyruqlar bajariladigan asosiy yo'l.
  • COPY: Kompyuteringizdagi fayllarni konteyner ichiga o'tkazish.
  • RUN: Image qurilayotgan paytda buyruqlarni bajarish (`npm install`, `apt-get`).
  • EXPOSE: Tarmoq portini hujjatlashtirish (masalan: 3000 yoki 8080).
  • CMD: Konteyner start olganda ishga tushadigan birlamchi buyruq.
Tezlik siri

Qatlamlar Keshi (Layer Caching): 10x Tezkor Build

❌ Xato Tartib (Har safar qayta yuklaydi)

  • `COPY . .` avval yozilsa, koddagi bitta nuqta o'zgarsa ham butun kesh buziladi.
  • Natijada `RUN npm install` har buildda 5 daqiqa internetdan kutubxona tortadi!

✅ To'g'ri Tartib (Professional Usul)

  • 1. Avval faqat `package.json` nusxalanadi va `npm install` qilinadi.
  • 2. Yangi kutubxona qo'shilmaguncha bu qatlam 0.0 soniyada keshdan olinadi!
  • 3. Shundan keyin `COPY . .` qilinadi — kod o'zgarsa faqat oxirgi qatlam yangilanadi.
DevOps asboblari

Asosiy Docker Buyruqlari: Terminalda Boshqarish

Yig'ish va Ishga Tushirish

  • `docker build -t target-app .` — joriy papkadan `target-app` nomli image yasash.
  • `docker run -d -p 8080:3000 --name web target-app` — orqa fonda (-d) port bilan yoqish.

Monitoring va Tozalash

  • `docker ps` — hozir ishlab turgan faol konteynerlarni ko'rish.
  • `docker logs -f web` — konteyner konsoliga tushayotgan jonli loglarni kuzatish.
  • `docker stop web && docker rm web` — konteynerni to'xtatish va xotiradan tozalash.
Portlar arxitekturasi

Port Mapping: -p 8080:3000 Qanday Ishlaydi?

Host Port (Sizning Kompyuteringiz)

  • `-p [HOST_PORT]:[CONTAINER_PORT]` — birinchi raqam kompyuteringiz porti.
  • Brauzerda `http://localhost:8080` deb ochasiz.
  • Bitta kompyuterda turli portlarda (8081, 8082, 8083) o'nlab konteynerlarni parallel yoqish mumkin!

Container Port (Konteyner Ichi)

  • Konteyner ichidagi Node.js `app.listen(3000)` portida kutib turadi.
  • Docker drayveri 8080 ga kelgan barcha internet trafikni avtomatik 3000 ga yo'naltiradi.
Kiberxavfsizlik qoidasi

.dockerignore va Konteyner Xavfsizligi

# .dockerignore fayli
node_modules
npm-debug.log
.git
.gitignore
.env
Dockerfile
README.md
tests

Kritik 3 Xavfsizlik Qoidasi

  • Hech qachon `.env` ni image ichiga solmang: Maxfiy API kalitlar va parollar ochiq qoladi!
  • Lokal `node_modules` ni chetlab o'ting: Mac/Windows da yig'ilgan kutubxonalar Linux da qulaydi.
  • Root huquqi bilan ishlatmang: `USER node` direktivasini qo'shib, xakerlik xavfini pasaytiring.
12 daqiqalik missiya

Amaliy Vazifa: O'z Loyihangizni Dockerize Qiling

Vazifa Bosqichlari

  • 1. Loyihangiz papkasida `.dockerignore` faylini yarating va `node_modules`, `.env` ni kiriting.
  • 2. Ko'p qatlamli toza `Dockerfile` yozing (Node:20-alpine bazasida).
  • 3. Terminalda `docker build -t my-cyber-app .` buyrug'i bilan imagini quring.
  • 4. Konteynerni `docker run -d -p 5000:3000 my-cyber-app` qilib ishga tushiring.
  • 5. Brauzerda `localhost:5000` ga kirib, saytingiz ishlab turganini isbotlang!

Taymer va Natija

Vaqt: 12 daqiqa. Ishchi varaqangizga `docker ps` buyrug'ining chiqish natijasini va Container ID raqamini yozing.

12:00
Senior muhandislik siri

Multi-Stage Build: 1 GB dan 25 MB gacha Qisqartirish

# 1-bosqich: Yig'uvchi (Builder)
FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build # TypeScript / React yig'ish

# 2-bosqich: Toza Production (Runner)
FROM node:20-alpine AS runner
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/package*.json ./
RUN npm install --omit=dev
USER node
CMD ["node", "dist/main.js"]

Nega Bu Muhim?

  • Nol ortiqcha axlat: TypeScript kompilyatori va test kutubxonalari production imagega tushmaydi.
  • Xavfsizlik: Konteyner qancha kichik bo'lsa, xakerlar buzishi mumkin bo'lgan zaifliklar (CVE) shuncha kam bo'ladi.
  • Tezkor deploy: 25 MB li image serverga 2 soniyada yuklanadi, 1 GB esa 3 daqiqa kutdiradi.
Baholash mezonlari

Xulosa va 10 Ballik Baholash Mezoni

Bugun O'rgangalarimiz

  • Konteyner — host Linux yadrosini ulashuvchi yengil, izolyatsiyalangan jarayondir.
  • Dockerfile — retsept, Image — qolip, Container — tirik ishlayotgan nusxa.
  • Qatlamlar keshi va `.dockerignore` build vaqtini 90% ga qisqartiradi.
  • Port mapping (`-p 8080:3000`) xost va konteyner tarmoqlarini bog'laydi.

10 Ballik Mezon

  • 2 ball: VM va Konteyner farqini tushuntirish va .dockerignore tuzish.
  • 3 ball: To'g'ri qatlamli, xatosiz `Dockerfile` yozish.
  • 3 ball: `docker build` va `docker run` orqali portni muvaffaqiyatli bog'lash.
  • 2 ball: Multi-stage build mohiyatini va xavfsizlik qoidalarini asoslash.
Target International SchoolTarget International School Введение 1 / 1 0–3