Yüksək Performanslı PHP Tətbiqləri üçün Docker Konteynerləri necə optimallaşdırılır
Düzgün Aparılan Konteynerləşdirmə
Docker tətbiqetmə proseslərində inqilab yaratdı, lakin yavaş bir tətbiqi konteyner daxilinə salmaq sizə yalnız yavaş bir konteyner verər. Schweis-də biz `Dockerfile` faylımızı kod bazamızın kritik bir hissəsi kimi görürük. PHP üçün Docker-ı optimallaşdırmaq yalnız fayl ölçüsü ilə bağlı deyil; iş zamanı səmərəliliyi, təhlükəsizlik və yığılma sürəti ilə bağlıdır.
1. Əsas İmaj Seçimi
Hər zaman `alpine` ilə başlayırıq. `php:8.3-fpm-alpine` imajı bizim qızıl standartımızdır. Minimum saldırı sahəsi təqdim edir. Daha az kitabxana, daha az təhlükəsizlik boşluğu (CVE) deməkdir. Hansı kitabxanaları quraşdıracağımız barədə bizi aydın və seçici olmağa məcbur edir, beləliklə istehsalat mühitinə lazımsız şişkinliklərin sızmasının qarşısını alır.
2. OpCache Parametrləri
PHP interpretasiya edilən bir dildir; yəni skriptləri hər sorğuda təkrar kompilyasiya etmək boşa xərclənən CPU dövrləridir. Konteyner konfiqurasiyalarımızda OpCache-i aqressiv şəkildə tənzimləyirik:
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
Bu konfiqurasiya, tətbiq kodumuzun bir dəfə kompilyasiya edilməsini və yaddaşda qalmasını təmin edir. Bloq kimi "oxuma intensiv" bir sayt üçün bu, cavab müddətlərini demək olar ki, statik fayl sürətlərinə endirir.
3. Çoxmərhələli Yığımlar (Multi-Stage Builds)
İstehsalat imajlarımızı tərtəmiz saxlamaq üçün çoxmərhələli yığımlara etibar edirik. Yığım alətləri və inkişaf asılılıqları bir `builder` mərhələsində qalır və heç vaxt yekun imaja daxil olmur. Həmçinin `Dockerfile` əmrlərimizi diqqətlə sıralayırıq. Koddan əvvəl asılılıq fayllarını kopyalamaq, Docker-in qat kükünün (layer cache) hər dəfə kodu dəyişdikdə hər şeyi yenidən yükləməsinin qarşısını alır.
Təhlükəsizlik Kontekstləri
Konteynerləri heç vaxt `root` kimi işlətmirik. Dockerfiles fayllarımız açıq şəkildə `www-data` və ya xüsusi bir istifadəçiyə keçir. Mümkün olan yerlərdə yalnız oxuna bilən fayl sistemləri istifadə edirik və mütləq lazım olanlar xaricindəki bütün səlahiyyətləri ləğv edirik. Yüksək təhlükəsizlikli bir mühitdə konteyner sərhədi, son müdafiə xəttidir; biz onu bir qala edirik.
Schweis Project
Collective Intelligence