MS Lesson7: Docker

Docker, VM deyil

  • VM (Virtual Machine) → həqiqətən tam ayrı OS yaradır (öz kernel-i var)
  • Docker container → OS yaratmır, host-un kernel-ini paylaşır

 

Docker nə edir?

Container yalnız bunları izolə edir:
  • file system (öz faylları var)
  • proseslər (digər container-lərin proseslərini görmür)
  • network (öz virtual şəbəkəsi var)
  • resurs limiti (CPU, RAM nə qədər istifadə edəcəyini məhdudlaşdırmaq olar)
Amma:
  • Kernel paylaşılır — host-un kernel-ini istifadə edir
  • Tam ayrı OS yoxdur



Kernel nedir?

Kernel — əliyyat sisteminin ən əsas hissəsidir. Hardware ilə proqramlar arasında kör rolunu oynayır.

Nə edir?

  • RAM idarə edir — hansı proqram nə qədər RAM istifadə edəcək
  • CPU idarə edir — hansı proses nə vaxt işləyəcək
  • Hardware ilə danışır — disk, şəbəkə kartı, USB və s.
  • Prosesləri idarə edir — proqramları işə salır, dayandırır
  • Təhlükəsizlik — proqramların bir-birinin yaddaşına girmişinin qarşısını alır



Linux-da

  • Host-un öz Linux kernel-i var
  • Docker birbaşa onu istifadə edir
  • Əlavə heç nə lazım deyil

macOS-da (sənin halın)

  • macOS-un Linux kernel-i yoxdur (Darwin kernel-i var)
  • Docker Desktop quraşdıranda arxa planda kiçik bir Linux VM qaldırır
  • Həmin VM-in Linux kernel-i var
  • Docker konteynerləri həmin VM-in kernel-ini istifadə edir

Windows-da

  • Eyni məntiq — Docker, WSL2 vasitəsilə Linux VM qaldırır
  • Konteynerlar həmin Linux kernel-ini istifadə edir

Qısa:
  • Linux: host kernel-i birbaşa
  • macOS/Windows: Docker özü kiçik Linux VM qaldırır, onun kernel-ini verir




services:
postgres:
image: postgres:17
container_name: demo-postgres
environment:
POSTGRES_DB: demo-app
POSTGRES_USER: demo-app
POSTGRES_PASSWORD: demo-app
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
demo-network:
ipv4_address: 192.168.100.2

pgadmin:
image: dpage/pgadmin4
container_name: demo-pgadmin
environment:
PGADMIN_DEFAULT_EMAIL: admin@admin.com
PGADMIN_DEFAULT_PASSWORD: admin
PGADMIN_SERVER_JSON_FILE: /pgadmin4/servers.json
ports:
- "5050:80"
depends_on:
- postgres
volumes:
- ./pgadmin/servers.json:/pgadmin4/servers.json
networks:
demo-network:
ipv4_address: 192.168.100.3

networks:
demo-network:
ipam:
config:
- subnet: 192.168.100.0/24

volumes:
postgres_data:
{
"Servers": {
"1": {
"Name": "demo-postgres",
"Group": "Servers",
"Host": "192.168.100.2",
"Port": 5432,
"MaintenanceDB": "demo-app",
"Username": "demo-app",
"SSLMode": "prefer"
}
}
}



























Комментарии

Популярные сообщения из этого блога

Interview questions

Lesson1: JDK, JVM, JRE

Lesson_2: Operations in Java