Bosh sahifa Wiki Docker

Docker

Docker — ilovalarni container ichida ishga tushirish va boshqarish uchun ishlatiladigan platforma. Docker yordamida dastur kodi, kutubxonalar, sozlamalar va kerakli runtime muhit bitta standart paketga yig‘iladi.

Docker dastur bir kompyuterda ishlasa, boshqa serverda ham xuddi shu muhitda ishlashiga yordam beradi. Bu ishlab chiqish, test, deployment va DevOps jarayonlarida keng qo‘llanadi.

Vazifasi

Docker ilovani alohida va boshqariladigan muhitda ishga tushirish uchun ishlatiladi.

Docker quyidagi vazifalarni bajaradi:

  • ilovani container ichida ishga tushirish;
  • dependency va runtime muhitni bir joyga yig‘ish;
  • local va server muhitlarini yaqinlashtirish;
  • deployment jarayonini soddalashtirish;
  • service’larni alohida containerlarda yuritish;
  • Docker image yaratish;
  • containerlarni ishga tushirish, to‘xtatish va o‘chirish;
  • microservice arxitekturasini boshqarish;
  • CI/CD jarayonlari bilan ishlash;
  • serverdagi ilovalarni izolyatsiya qilish.

Masalan, backend API, PostgreSQL, Redis va Nginx alohida Docker containerlarda ishlashi mumkin.

Docker qanday ishlaydi?

Docker ilovani image asosida container sifatida ishga tushiradi. Image ichida ilova uchun kerakli fayllar, kutubxonalar va ishga tushirish sozlamalari bo‘ladi.

Oddiy jarayon:

Docker host operatsion tizim kernelidan foydalanadi, lekin ilova uchun alohida izolyatsiyalangan muhit yaratadi.

Container

Container — Docker image asosida ishga tushgan yengil izolyatsiyalangan muhit. Container ichida ilova va uning kerakli dependency’lari ishlaydi.

Container quyidagilarni o‘z ichiga olishi mumkin:

  • dastur kodi;
  • runtime;
  • kutubxonalar;
  • environment variable’lar;
  • konfiguratsiya;
  • ishga tushirish buyrug‘i;
  • port sozlamalari;
  • volume ulanishlari.

Masalan, Python backend ilovasi alohida containerda, Redis esa boshqa containerda ishlashi mumkin.

Image

Imagecontainer yaratish uchun ishlatiladigan tayyor shablon. Image ichida ilova ishlashi uchun kerakli fayllar va sozlamalar bo‘ladi.

Image quyidagilarni o‘z ichiga oladi:

Masalan, python:3.12, node:20, postgres:16, redis:7 kabi image’lar Docker Hub’da mavjud.

Dockerfile

Dockerfile — Docker image qanday yaratilishini belgilaydigan matnli fayl. Unda image uchun kerakli buyruqlar ketma-ket yoziladi.

Dockerfile ichida quyidagi buyruqlar uchraydi:

  • FROMbase image tanlash;
  • WORKDIR — ishchi papkani belgilash;
  • COPY — fayllarni image ichiga ko‘chirish;
  • RUNbuild vaqtida buyruq bajarish;
  • ENV — environment variable berish;
  • EXPOSE — portni ko‘rsatish;
  • CMDcontainer ishga tushganda bajariladigan buyruq;
  • ENTRYPOINT — asosiy bajariladigan jarayonni belgilash.

Dockerfile image yaratish jarayonining asosiy konfiguratsiyasi hisoblanadi.

Base image

Base image — yangi Docker image yaratishda asos sifatida ishlatiladigan image. U odatda operatsion tizim yoki runtime muhitini beradi.

Base image misollari:

  • ubuntu;
  • debian;
  • alpine;
  • python;
  • node;
  • nginx;
  • postgres;
  • redis.

Masalan, Python backend uchun python:3.12-slim base image sifatida ishlatilishi mumkin.

Layer

Layer — Docker image ichidagi qatlam. Dockerfile’dagi ko‘p buyruqlar image ichida alohida layer hosil qiladi.

Layerlar quyidagi maqsadlarda ishlatiladi:

  • image tarixini saqlash;
  • cache’dan foydalanish;
  • build jarayonini tezlashtirish;
  • o‘zgarishlarni qatlamlarga ajratish;
  • image hajmini boshqarish.

Masalan, dependency o‘rnatish alohida layer, kodni ko‘chirish esa boshqa layer bo‘lishi mumkin.

Docker build

docker buildDockerfile asosida image yaratish uchun ishlatiladigan buyruq.

Misol:

docker build -t my-app .

Bu buyruq joriy papkadagi Dockerfile’dan my-app nomli image yaratadi.

Build jarayonida Dockerfile’dagi buyruqlar ketma-ket bajariladi va image hosil bo‘ladi.

Docker run

docker runimage asosida yangi container ishga tushirish uchun ishlatiladi.

Misol:

docker run -p 8000:8000 my-app

Bu buyruq my-app image’dan container yaratadi va hostdagi 8000-portni containerdagi 8000-portga bog‘laydi.

docker run orqali containerga port, volume, environment variable va network sozlamalari berilishi mumkin.

Docker ps

docker ps — ishlayotgan containerlar ro‘yxatini ko‘rsatadi.

Misol:

docker ps

Barcha containerlarni, jumladan to‘xtaganlarini ham ko‘rish uchun:

docker ps -a

Bu buyruqlar container nomi, ID’si, image’i, holati va portlarini ko‘rsatadi.

Docker stop

docker stop — ishlayotgan container’ni to‘xtatish uchun ishlatiladi.

Misol:

docker stop container_name

Container to‘xtatilganda uning jarayoni tugaydi, lekin container o‘chirilmaydi. Uni keyin qayta ishga tushirish mumkin.

Docker start

docker start — to‘xtagan container’ni qayta ishga tushirish uchun ishlatiladi.

Misol:

docker start container_name

Bu buyruq mavjud container’ni image’dan qayta yaratmasdan ishga tushiradi.

Docker rm

docker rmcontainer’ni o‘chirish uchun ishlatiladi.

Misol:

docker rm container_name

Container o‘chirilganda uning runtime holati yo‘qoladi. Agar ma’lumot volume’da saqlanmagan bo‘lsa, container ichidagi vaqtinchalik ma’lumotlar ham yo‘qolishi mumkin.

Docker rmi

docker rmi — Docker image’ni o‘chirish uchun ishlatiladi.

Misol:

docker rmi image_name

Image o‘chirilsa, undan yangi container yaratib bo‘lmaydi. Lekin shu image’dan avval yaratilgan containerlar alohida mavjud bo‘lishi mumkin.

Docker logs

docker logscontainer loglarini ko‘rish uchun ishlatiladi.

Misol:

docker logs container_name

Real vaqt rejimida log ko‘rish uchun:

docker logs -f container_name

Loglar ilova xatolari, server chiqishlari va container ichidagi jarayonlarni kuzatishda ishlatiladi.

Docker exec

docker exec — ishlayotgan container ichida buyruq bajarish uchun ishlatiladi.

Misol:

docker exec -it container_name bash

Yoki:

docker exec -it container_name sh

Bu buyruq container ichiga terminal orqali kirish imkonini beradi.

Port mapping

Port mapping — host kompyuter portini container portiga bog‘lash jarayoni.

Misol:

-p 8080:80

Bu yerda:

  • 8080 — host porti;
  • 80container ichidagi port.

Masalan, Nginx container ichida 80-portda ishlasa, hostda 8080-port orqali ochilishi mumkin.

Volume

Volumecontainer ma’lumotlarini container tashqarisida saqlash uchun ishlatiladigan Docker mexanizmi. Container o‘chirilsa ham volume ichidagi ma’lumotlar saqlanib qolishi mumkin.

Volume quyidagi ma’lumotlar uchun ishlatiladi:

  • database fayllari;
  • media fayllar;
  • loglar;
  • konfiguratsiya;
  • upload qilingan fayllar;
  • persistent storage.

Masalan, PostgreSQL ma’lumotlari volume’da saqlansa, container qayta yaratilganda ham database yo‘qolmaydi.

Bind mount

Bind mount — host kompyuterdagi papkani container ichiga ulash usuli. Bu local development jarayonida ko‘p ishlatiladi.

Misol:

-v /home/user/app:/app

Bu holatda hostdagi /home/user/app papkasi container ichidagi /app papkasiga ulanadi.

Bind mount orqali kodni hostda o‘zgartirib, container ichida darhol ko‘rish mumkin.

Network

Docker network — containerlar bir-biri bilan aloqa qilishi uchun ishlatiladigan tarmoq mexanizmi.

Docker network orqali:

  • containerlar nomi orqali bir-birini topadi;
  • backend database bilan ulanadi;
  • Nginx backendga so‘rov yuboradi;
  • microservice’lar o‘zaro ishlaydi;
  • tashqi va ichki tarmoqlar ajratiladi.

Masalan, backend container postgres containerga db:5432 orqali ulanishi mumkin.

Docker Compose

Docker Compose — bir nechta containerdan iborat ilovalarni bitta konfiguratsiya fayli orqali boshqarish vositasi. Compose fayli odatda docker-compose.yml yoki compose.yml deb nomlanadi.

Docker Compose orqali quyidagilar boshqariladi:

Masalan, backend, frontend, PostgreSQL, Redis va Nginx bitta Compose faylida tariflanishi mumkin.

Service

Docker Compose’da service — ishga tushiriladigan alohida container turi. Har bir service ma’lum image yoki build konfiguratsiyasiga ega bo‘ladi.

Service misollari:

  • backend;
  • frontend;
  • db;
  • redis;
  • nginx;
  • worker;
  • scheduler.

Compose’da har bir service o‘z porti, volume’i, environment variable’lari va network sozlamalariga ega bo‘lishi mumkin.

Compose up

docker compose upCompose faylidagi service’larni ishga tushirish uchun ishlatiladi.

Misol:

docker compose up -d

Bu yerda -d containerlarni background rejimida ishga tushiradi.

Build bilan birga ishga tushirish:

docker compose up -d --build

Bu buyruq image’larni qayta build qilib, containerlarni ishga tushiradi.

Compose down

docker compose downCompose orqali ishga tushgan service’larni to‘xtatish va o‘chirish uchun ishlatiladi.

Misol:

docker compose down

Bu buyruq container va networklarni o‘chiradi. Volume’lar alohida parametr berilmasa saqlanib qolishi mumkin.

Environment variables

Docker’da environment variable’lar ilova sozlamalarini tashqaridan berish uchun ishlatiladi.

Environment variable misollari:

  • DATABASE_URL;
  • SECRET_KEY;
  • DEBUG;
  • REDIS_URL;
  • PORT;
  • API_URL;
  • POSTGRES_USER;
  • POSTGRES_PASSWORD.

Bu qiymatlar Dockerfile, docker run, Compose fayli yoki .env fayl orqali berilishi mumkin.

.env fayl

.env fayl Docker Compose bilan environment variable’larni saqlash uchun ishlatiladi.

.env ichida quyidagilar bo‘lishi mumkin:

Compose fayl .env ichidagi qiymatlarni o‘qib, service sozlamalarida ishlatishi mumkin.

Docker Hub

Docker Hub — Docker image’larni saqlash va ulashish uchun ishlatiladigan public registry. Unda rasmiy va foydalanuvchi yaratgan image’lar mavjud.

Docker Hub’da quyidagi image’lar uchraydi:

  • nginx;
  • postgres;
  • redis;
  • mysql;
  • node;
  • python;
  • ubuntu;
  • alpine.

Docker Hub’dan image olish uchun docker pull ishlatiladi.

Docker registry

Docker registry — Docker image’larni saqlaydigan xizmat. Docker Hub registry’ning eng mashhur ko‘rinishlaridan biri.

Registry turlari:

CI/CD pipeline image yaratib, registry’ga push qilishi va server shu image’dan foydalanishi mumkin.

Docker pull

docker pullregistry’dan image yuklab olish uchun ishlatiladi.

Misol:

docker pull postgres:16

Bu buyruq Docker Hub’dan postgres image’ining 16-versiyasini yuklab oladi.

Docker push

docker push — local image’ni registry’ga yuborish uchun ishlatiladi.

Misol:

docker push username/my-app:latest

Push qilingan image boshqa server yoki CI/CD pipeline tomonidan ishlatilishi mumkin.

Image tag

Image tagimage versiyasi yoki variantini bildiradigan belgi.

Misollar:

  • latest;
  • 1.0.0;
  • 16;
  • 3.12-slim;
  • alpine;
  • production;
  • dev.

Masalan, postgres:16 image nomi postgres, tag esa 16 ekanini bildiradi.

Container restart policy

Restart policycontainer to‘xtab qolsa, Docker uni qayta ishga tushirishi kerak yoki yo‘qligini belgilaydi.

Restart policy turlari:

  • no;
  • always;
  • unless-stopped;
  • on-failure.

Masalan, server qayta ishga tushganda backend container ham avtomatik ishga tushishi uchun restart policy ishlatiladi.

Healthcheck

Healthcheckcontainer ichidagi ilova ishlayotganini tekshirish mexanizmi. Docker healthcheck orqali container sog‘lom yoki muammoli ekanini aniqlashi mumkin.

Healthcheck quyidagilarni tekshirishi mumkin:

Container holati healthy, unhealthy yoki starting ko‘rinishida bo‘lishi mumkin.

Docker va virtual machine farqi

Docker container va virtual machine o‘xshash maqsadlarda ishlatilishi mumkin, lekin ular texnik jihatdan farq qiladi.

Farqlar:

Docker ko‘p hollarda ilovalarni tez va yengil ishga tushirish uchun ishlatiladi.

Docker va microservice

Docker microservice arxitekturasida keng ishlatiladi. Har bir service alohida container sifatida ishlashi mumkin.

Microservice loyihada containerlar:

Har bir service alohida build, deploy va scale qilinishi mumkin.

Docker va backend

Backend ilovalar Docker orqali alohida container sifatida ishga tushiriladi. Bu backend uchun kerakli runtime, dependency va sozlamalarni bir joyga yig‘ishga yordam beradi.

Backend container ichida quyidagilar bo‘lishi mumkin:

Masalan, FastAPI yoki Django backend Docker containerda uvicorn yoki gunicorn orqali ishlashi mumkin.

Docker va frontend

Frontend loyihalarda Docker build va deployment jarayonida ishlatilishi mumkin.

Frontend uchun Docker quyidagilarda qo‘llanadi:

Masalan, React build fayllari Docker image ichidagi Nginx orqali foydalanuvchiga berilishi mumkin.

Docker va database

Database’lar ham Docker container ichida ishlashi mumkin. Bu local development va test muhiti uchun ko‘p ishlatiladi.

Docker’da ishlatiladigan database image’lari:

Database container bilan ishlaganda ma’lumotlar volume orqali saqlanadi.

Docker va Nginx

Nginx Docker’da reverse proxy, static file server yoki load balancer sifatida ishlatilishi mumkin.

Nginx container quyidagi vazifalarda ishlatiladi:

  • frontend fayllarni serve qilish;
  • backend API’ga proxy qilish;
  • SSL termination;
  • static fayllarni tarqatish;
  • bir nechta service’ni bitta domen ostida ulash;
  • load balancing.

Masalan, Nginx api.example.com so‘rovlarini backend containerga yo‘naltirishi mumkin.

Docker va CI/CD

Docker CI/CD jarayonlarida keng ishlatiladi. Pipeline koddan image yaratadi, image’ni registry’ga yuboradi va serverda yangi container ishga tushiradi.

CI/CD’da Docker orqali quyidagilar bajariladi:

Docker deployment jarayonini takrorlanadigan va boshqariladigan holatga keltiradi.

Docker Compose va production

Docker Compose local development, test va kichik production muhitlarda ishlatilishi mumkin. Compose bir nechta service’ni bitta faylda boshqaradi.

Production muhitda Compose quyidagilarni boshqarishi mumkin:

Katta tizimlarda Kubernetes yoki boshqa orchestration vositalari ham ishlatilishi mumkin.

Kubernetes bilan bog‘liqligi

Kubernetes — containerlarni katta miqyosda boshqarish uchun ishlatiladigan orchestration platforma. Docker container image’lari Kubernetes ichida ham ishlatilishi mumkin.

Kubernetes quyidagilarni boshqaradi:

Docker container yaratish va image formatida muhim rol o‘ynasa, Kubernetes containerlarni ko‘p serverli muhitda boshqaradi.

Docker xavfsizligi

Docker containerlar izolyatsiya beradi, lekin xavfsizlik alohida e’tibor talab qiladi.

Docker xavfsizligida quyidagi tushunchalar uchraydi:

Docker image va containerlar production tizimga bevosita ta’sir qilishi mumkin.

Docker image hajmi

Docker image hajmi deployment tezligi va server resurslariga ta’sir qilishi mumkin. Image ichida qancha ko‘p fayl va dependency bo‘lsa, hajm ham shuncha katta bo‘ladi.

Image hajmiga ta’sir qiladigan omillar:

Masalan, alpine yoki slim image’lar odatda kichikroq bo‘ladi.

Multi-stage build

Multi-stage buildDockerfile ichida bir nechta build bosqichidan foydalanish usuli. Bu yakuniy image hajmini kamaytirish va faqat kerakli fayllarni qoldirish uchun ishlatiladi.

Multi-stage build quyidagi holatlarda ishlatiladi:

Bu usul production image’larni ixchamroq qilishda ishlatiladi.

Dasturlashdagi o‘rni

Docker zamonaviy dasturlash, DevOps va deployment jarayonlarida muhim vositalardan biridir. U ilovalarni bir xil muhitda ishga tushirish, service’larni ajratish va serverga joylashni soddalashtirish uchun ishlatiladi.

Docker quyidagi joylarda qo‘llanadi:

Docker ilova va uning muhitini container ichida standartlashtirib, dasturiy ta’minotni ishlab chiqish va ishga tushirish jarayonlarini boshqarishga yordam beradi.

Bog‘liq tushunchalar

Container, Image, Dockerfile, Docker Compose, Volume, Network, Registry, CI/CD, Nginx, Backend, Deployment, Kubernetes