Birinchi konteyner — docker run hello-world, nginx

~10 daq · Docker · Kirish

Muammodan boshlaylik

Veb-server kerak — HTML sahifani brauzerda ko'rish uchun. An'anaviy yo'l: Nginx ni yuklab olish, o'rnatish, konfiguratsiya faylini topish, xizmatni ishga tushirish. Keyin o'chirish kerak bo'lsa — fayllar tizim bo'ylab sochilib qolgan.

Docker bilan — bitta buyruq. O'chirish — yana bitta buyruq, hech qanday iz qoldirmasdan.


Nginx ni ishga tushirish

docker run -d -p 8080:80 --name mening-nginx nginx

Brauzerda http://localhost:8080 ni oching:

Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working.

To'liq ishlaydigan veb-server — va Nginx ni kompyuterga o'rnatmadingiz.

Qism Ma'nosi
docker run Image dan yangi konteyner yaratib, ishga tushirish
-d Detached — orqa fonda; terminal bo'shaydi
-p 8080:80 Kompyuterning 8080 porti → konteynerning 80 porti
--name mening-nginx Konteyner nomi (bo'lmasa — tasodifiy: quirky_turing)
nginx Image nomi

Konteynerlar ro'yxati

docker ps
CONTAINER ID   IMAGE   COMMAND                  STATUS         PORTS                  NAMES
a3f9c2b1d4e5   nginx   "/docker-entrypoint.…"   Up 2 minutes   0.0.0.0:8080->80/tcp   mening-nginx
  • CONTAINER ID — buyruqlarda birinchi 3-4 belgisi yetarli
  • STATUS — Up = ishlayapti
  • PORTS — port ulanishi

Loglar

Sahifani bir necha marta yangilang:

docker logs mening-nginx
172.17.0.1 - - [05/Nov/2026:10:15:32 +0000] "GET / HTTP/1.1" 200 615 "-" "Mozilla/5.0 ..."

Real vaqtda kuzatish: docker logs -f mening-nginx (Ctrl + C — chiqish).


O'z sahifangiz

Papka yarating, ichida index.html:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Docker</title></head>
<body style="font-family: system-ui; text-align: center; padding: 50px;">
  <h1>Salom, Docker! 🐳</h1>
  <p>Bu sahifa konteyner ichidagi Nginx dan kelmoqda.</p>
</body>
</html>

Eski konteynerni o'chirib, yangisini papka bilan ishga tushiring:

docker rm -f mening-nginx
docker run -d -p 8080:80 --name mening-nginx -v "$(pwd)":/usr/share/nginx/html:ro nginx

-v "$(pwd)":/usr/share/nginx/html:ro — joriy papkani konteynerdagi Nginx sahifalar papkasiga ulash (ro — faqat o'qish). Bu bind mount (20-dars).

[!INFO] PowerShell da $(pwd) o'rniga ${PWD}, CMD da — %cd%. WSL terminalida — $(pwd).

http://localhost:8080 — sizning sahifangiz. index.html ni o'zgartirib, brauzerni yangilang — o'zgarish darhol ko'rinadi.


Bir vaqtda bir nechta

docker run -d -p 8081:80 --name nginx-2 nginx
docker run -d -p 8082:80 --name nginx-3 nginx

Uchta mustaqil veb-server, turli portlarda, har biri o'z izolyatsiyalangan muhitida.


Ichiga kirib sinash

docker run -it --rm ubuntu bash
root@7c2a9e1f3b4d:/# cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04 LTS"
root@7c2a9e1f3b4d:/# exit
  • -it — interaktiv terminal
  • --rm — chiqqanda konteyner avtomatik o'chirilsin
  • bash — konteynerda bajariladigan buyruq

Bir soniyada to'liq Ubuntu. Linux buyruqlarini o'rganish uchun ideal "qum qutisi" — hech narsani buzishdan qo'rqmang, exit va hammasi yo'qoladi.

Boshqa tillar — o'rnatmasdan:

docker run -it --rm python:3.13 python
docker run -it --rm node:22 node
docker run --rm php:8.4-cli php -r 'echo PHP_VERSION;'

Tozalash

docker rm -f mening-nginx nginx-2 nginx-3

-f — ishlayotgan bo'lsa ham to'xtatib o'chirish. Image lar kompyuterda qoladi — keyingi safar yuklab olish shart emas:

docker images

Nima uchun shunday?

Nima uchun -p 8080:80 kerak — Nginx konteynerda 80-portda ishlayapti-ku?

Chunki konteyner izolyatsiyalangan: uning o'z tarmog'i va portlari bor. Konteynerdagi 80-port — uning ichki porti, kompyuteringizniki emas. Shuning uchun o'nta konteyner hammasi o'z ichida 80-portni ishlatishi mumkin, to'qnashuvsiz. Tashqaridan kirish kerak bo'lsa — siz aniq aytasiz: "kompyuterning 8080 portini konteynerning 80 portiga ula". Hech narsa tasodifan ochiq qolmaydi.


Xulosa

Eslab qoling:

  • docker run -d -p 8080:80 --name nom image — fonda, port bilan, nomli
  • docker ps — ishlayotgan konteynerlar; docker logs [-f] nom — loglar
  • -v papka:konteyner_yo'li — fayllarni ulash
  • docker run -it --rm image bash — ichiga kirish, chiqqanda o'chadi
  • docker rm -f nom — to'xtatib o'chirish; image lar qoladi

Keyingi dars

4-dars: Image va konteyner — farqi, hayot sikli