Swego czasu byłem na szkoleniu z Dockerów i tam człowiek "co się zna" mówił, że na Linux proces odpalony w Dockerze ma praktycznie zerowy narzut i z grubsza działa tak jak system odpalony bez użycia dockera. Oczywiście docker na maszynie developerskiej niesie ze sobą pewne koszty np. udostępnianie volumenów z hosta itp, ale nadal przy zdroworozsądkowym podejściu to są różnice mierzone w procentach a nie setkach procent.
No, trochę prawda - trochę nie prawda. Tutaj chodzi o to że jeśli odpalasz kontener dockera z takim samym kernelem jak host, to śmiga, a jak nie, to są przeprowadzane transformacje pamięci i procesów. Np kontener linuxowy na linxie śmiga; ale kontener windowsowy na windowsie śmiga. Jak są odwrotnie, np kontener windowsowy na linuxie, albo kontener linuxowy na windowsie - to wtedy działa wolno.
Więć to nie jest tak że Linux - dobry, Windows - zły; tylko zgodne kernele działają szybko, niezgodne działają wolno.
Taki rozrzut jak tutaj opisałeś to obstawiam jeden lub kilka z powyższych czynników:
- odpaliłeś Dockery na Windows lub MacOs
- udostępniałeś jakieś duże ilości plików z HOSTA (w Linux narzut jest niewielki, ale już udostępnianie z Windowsa to spory problem). Tutaj polecam prosty trick jak kopiowanie do Dockera wszelkich zasobów, których nie edytujesz do kontenera (np. całe vendory można tam śmiało wrzucić zamiast udostępniać jako udział)
- miałeś złą konfigurację - np. oficjalne obrazy od PHP mają wyłączony opcache i trzeba go skonfigurować w Dockerfile
Ogólnie powiem tak - pracuję na Ubuntu z bardzo zasobożernym systemem Magento, który ma ogromną ilość vendorów, których NIE wrzucam do kontenera tylko udostępniam jako wolumin (czyli niezbyt to optymalne) i nie obserwuję żadnych znaczących problemów z wydajnością. Ten sam zestaw odpalam na produkcji (tylko oczywiście wtedy już cały code base w kontenerze) i nie odbiega on wydajnością od tradycyjnego systemu.
No, to mogłoby być jakimś rozwiązaniem; jeśli nigdy nie zmieniasz zależności; bo jeśli pracujesz na różnych branchach, na którym masz różne zależności w różnych wersjach, to teraz oprócz instalacji zależności (np npm install
, mvn install
, composer install
); musisz też przenosić je na kontener.
Także znowu, coś za coś.
Co do zysków z dockerów to dla mnie uniezależnienie się od różnic w konfiguracji serwera i środowiska dev jest ogromną wartością. Sporo pracuję z aplikacjami komunikującymi się między sobą po API, wiec praktycznie każdy projekt ma inny setup. Możliwość przechowywanie setupu w pliku i prostego odtworzenia go w czasie deployu na serwerze to jest ogromne ułatwienie. Jak jeszcze doda się do tego takie narzędzia jak Traefik czyli taki jakby serwer proxy dla kontenerów + gihtub actions to bardzo łatwo zautomatyzować wszystko po drodze czyli testy, statyczna analiza kodu, deployment, przebudowywanie środowisk testowych itd itp.
Tak, docker zapewnia odseparowanie aplikacji od środowiska; ale czy to jest taka dobra rzecz? Pracowałem 2 lata temu w firmie, w której mieliśmy dockerka; ale jeden z pracowników odpalił go na swojej lokalnej maszynie; i aplikacja przestała działać. Okazało się jednak, że problem nie był z jego środowiskiem, tylko był autentyzcny bug w aplikacji, którego nie widzieliśmy na dockera, ponieważ każdy miał takiego samego. Odwzorowaliśmy potem konfiguracje lokalnej maszyny w teście i naprawiliśmy buga.
Także tak; jeśli aplikacja się jebie na róznych lokalnych maszynach; to być może wszystko jest git, i docker jest git; albo być może jest źle napisana i różnica w środowisku to objaw, a nie przyczyna; i należałoby ją wyleczyć
Także znowu - coś za coś.