Kirish va Asosiy Tushunchalar
Docker nima va nima uchun kerak?
Docker - bu konteynerizatsiya platformasi bo'lib, ilovalarni va ularning barcha bog'liqliklarini (dependencies) yengil, portativ konteynerlar ichida qadoqlash imkonini beradi.
Docker'dan oldingi muammolar:
- "Mening kompyuterimda ishlaydi" muammosi
- Turli muhitlarda (development, staging, production) turlicha ishlash
- Dependency'lar va versiyalar bilan bog'liq muammolar
- Server konfiguratsiyasini qayta yaratishda qiyinchiliklar
Docker bu muammolarni qanday hal qiladi:
- Ilova va uning muhitini bitta konteynerga joylashtiradi
- Har qanday Docker muhitida bir xil ishlashni kafolatlaydi
- Tez va oson deploy qilish imkonini beradi
- Resurslarni samarali ishlatadi
Asosiy Tushunchalar (Key Concepts)
1. Image (Tasvir)
Image - bu konteyner uchun shablon yoki "retsept" hisoblanadi.
Xususiyatlari:
- Read-only (faqat o'qish uchun)
- Layerlar (qatlamlar) dan tashkil topgan
- Dockerfile orqali yaratiladi
- Registry'larda saqlanadi va tarqatiladi
Misol:
# Ubuntu 20.04 image'ni yuklab olish
docker pull ubuntu:20.04
# Node.js 14 image'ni yuklab olish
docker pull node:14-alpine
2. Container (Konteyn)
Container - bu image'ning ishlaydigan nusxasi (running instance).
Xususiyatlari:
- Image asosida yaratiladi
- O'zining fayl tizimi, network va jarayonlariga ega
- Izolatsiyalangan muhit
- Yaratilishi va o'chirilishi juda tez
Misol:
# Ubuntu konteynerini yaratish va bash ishga tushirish
docker run -it ubuntu:20.04 bash
# Nginx web server'ni background'da ishga tushirish
docker run -d --name my-nginx -p 8080:80 nginx
3. Registry
Registry - Docker image'larni saqlash va ulashish uchun xizmat.
Turlari:
- Public Registry: Docker Hub (hub.docker.com)
- Private Registry: Kompaniya ichki registry'lari
- Cloud Registry: AWS ECR, Google Container Registry
Misol:
# Docker Hub'dan image yuklab olish
docker pull nginx:latest
# Image'ni registry'ga yuklash
docker push myregistry/myapp:v1.0
4. Volume
Volume - ma'lumotlarni saqlash va containerlar o'rtasida ulashish mexanizmi.
Nima uchun kerak:
- Ma'lumotlar container o'chirilganda yo'qolmaydi
- Bir nechta container o'rtasida ma'lumot ulashish
- Host va container o'rtasida fayl almashish
Misol:
# Named volume yaratish va ishlatish
docker volume create my-data
docker run -v my-data:/data ubuntu
# Host papkasini container'ga bog'lash
docker run -v /home/user/data:/app/data ubuntu
Docker Arxitekturasi
Docker client-server arxitekturasiga asoslangan:
Docker Components:
-
Docker Client (docker CLI)
- Foydalanuvchi interfeysi
- Buyruqlarni Docker daemon'ga yuboradi
- Local yoki remote daemon bilan ishlaydi
-
Docker Daemon (dockerd)
- Asosiy xizmat
- Image'lar, containerlar, network va volume'larni boshqaradi
- REST API orqali client'lar bilan aloqa
-
Docker Registry
- Image'larni saqlash joyi
- Push/pull operatsiyalari
- Version control
Asosiy Buyruqlar (Essential Commands)
Tizim Ma'lumotlari
# Docker versiyasini ko'rish
docker version
# Tizim to'liq ma'lumotlarini ko'rish
docker info
# Docker daemon holatini tekshirish
docker system info
# Disk foydalanishini ko'rish
docker system df
# Foydalanilmayotgan resurslarni tozalash
docker system prune
Image'lar bilan Ishlash
# Local image'lar ro'yxati
docker images
# yoki
docker image ls
# Image yuklab olish
docker pull ubuntu:20.04
# Image haqida batafsil ma'lumot
docker inspect ubuntu:20.04
# Image'ni o'chirish
docker rmi ubuntu:20.04
# Barcha foydalanilmayotgan image'larni o'chirish
docker image prune
Container'lar bilan Ishlash
# Ishlaydigan containerlar
docker ps
# Barcha containerlar (to'xtaganlar ham)
docker ps -a
# Container yaratish va ishga tushirish
docker run ubuntu:20.04 echo "Hello Docker"
# Container'ni to'xtatish
docker stop container_name_or_id
# Container'ni o'chirish
docker rm container_name_or_id
# Barcha to'xtagan containerlarni o'chirish
docker container prune
Docker'ning Afzalliklari
1. Portativlik
- "Write once, run anywhere" tamoyili
- Development'dan production'gacha bir xil ishlash
- Cloud provider'lar o'rtasida oson ko'chirish
2. Samaradorlik
- Virtual Machine'larga qaraganda kamroq resurs
- Host OS kernel'ini ulashadi
- Tez ishga tushish (sekundlar ichida)
3. Masshtablanish (Scalability)
- Mikroservislar arxitekturasi uchun ideal
- Load balancing va auto-scaling
- Horizontal scaling
4. Izolyatsiya (Isolation)
- Har bir container alohida muhit
- Security boundaries
- Dependency conflicts'ni oldini olish
5. DevOps Integration
- CI/CD pipeline'larga oson integratsiya
- Infrastructure as Code
- GitOps workflows
Amaliy Misollar
1. Hello World
# Eng oddiy misol - Docker'ning ishlashini tekshirish
docker run hello-world
2. Interaktiv Shell
# Ubuntu konteynerida bash ishga tushirish
docker run -it ubuntu:20.04 bash
# Alpine Linux (minimal) bilan
docker run -it alpine:latest sh
3. Web Server
# Nginx web server'ni port 8080'da ishga tushirish
docker run -d -p 8080:80 --name my-nginx nginx:latest
# Browser'da http://localhost:8080 ochib ko'rish
4. Development Environment
# Node.js development muhiti
docker run -it --name node-dev \
-v $(pwd):/app \
-w /app \
-p 3000:3000 \
node:14 bash
Docker Hub bilan Ishlash
1. Account yaratish
- hub.docker.com saytida ro'yxatdan o'tish
- Email tasdiqlash
2. Login qilish
docker login
# Username va password kiritish
3. Image'ni push qilish
# Image'ga tag berish
docker tag my-app:latest username/my-app:v1.0
# Docker Hub'ga yuklash
docker push username/my-app:v1.0
Keyingi Qadamlar
Bu sahifada Docker'ning asosiy tushunchalari bilan tanishdik. Keyingi sahifada:
- Container'larni batafsil boshqarish
- Volume'lar va network'lar bilan ishlash
- Multi-container applications
- Monitoring va debugging
Docker'ni o'rganishda amaliyot juda muhim. Har bir buyruqni o'zingiz sinab ko'ring!