Skip to main content

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:

  1. Docker Client (docker CLI)

    • Foydalanuvchi interfeysi
    • Buyruqlarni Docker daemon'ga yuboradi
    • Local yoki remote daemon bilan ishlaydi
  2. Docker Daemon (dockerd)

    • Asosiy xizmat
    • Image'lar, containerlar, network va volume'larni boshqaradi
    • REST API orqali client'lar bilan aloqa
  3. 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!