Docker na Macu trpí problémy s rychlostí. Pokud chcete používat Mac a mít rychlý docker, musíte občas dělat různé šílenosti. Třeba si do virtuálního stroje nainstalovat Linux a docker mít spuštěný v něm. Naštěstí se zdá, že je tomu konec.
Před pár dny vyšel na stránkách dockeru příspěvek s informací o zlepšení výkonu na Macu. Byl jsem docela skeptický. Takových prohlášení jsem už četl několik, ale výkon dockeru byl stále o dost horší než na Linuxu. Naposled jsem testy prováděl na půjčeném Macbook Pro 2015 s 8GB RAM a bylo to dost peklo. Bez optimalizací se stránka načítala několik minut. Níže uvedené testy byly provedeny na MacBooku Air M1 s 16GB RAM.
Provedl jsem test se základní Symfony aplikaci (symfony/skeleton). Pomocí make:controller jsem přidal prázdný controller routovaný na /. Spustil jsem produkční container, udělal 10x refresh v prohlížeči a z konzole vzal TTFB.
gRPC-FUSE | Virtiofs |
477 | 111 |
292 | 91 |
144 | 78 |
150 | 78 |
147 | 84 |
152 | 87 |
133 | 73 |
140 | 85 |
136 | 84 |
∅ 177 ms | ∅ 77 ms |
Zlepšení je dost slušné. Symfony Skeleton je úplný základ bez databáze a nějaké složité logiky.
Zkusil jsem test také se symfony demo z https://github.com/symfony/demo a v dev módu naměřil tyto časy (hodnota z debug baru Total time):
gRPC-FUSE | Virtiofs |
1936 | 507 |
947 | 379 |
620 | 361 |
603 | 373 |
607 | 372 |
615 | 410 |
636 | 374 |
606 | 362 |
608 | 388 |
641 | 375 |
∅ 782 ms | ∅ 390 ms |
V produkčním módu TTFB:
gRPC-FUSE | Virtiofs |
1270 | 315 |
779 | 353 |
473 | 298 |
580 | 291 |
447 | 299 |
440 | 292 |
468 | 277 |
445 | 281 |
461 | 263 |
521 | 273 |
∅ 588 ms | ∅ 294 ms |
Byl použit Docker Desktop ve verzi 4.6, v Preferences -> Experimental features jsem zapnul/vypnul podporu VirtioFS.
Zlepšení je opravdu slušné, při spuštění bez vygenerované cache je načítání stránky při použití VirtioFS asi 4x rychlejší. Ještě musím zkusit nějakou větší aplikaci, na které jsem pracoval. Jakmile budu mít výsledky, přidám je do článku.
Použitý dockerfile:
FROM php:8.1-apache
RUN apt-get update -y && apt-get install -y \
sendmail libpng-dev libfreetype6 libfreetype6-dev libjpeg62-turbo libjpeg62-turbo-dev libxpm-dev \
zlib1g-dev libicu-dev g++ libzip-dev
RUN docker-php-ext-install mysqli
RUN docker-php-ext-configure intl
RUN docker-php-ext-install intl
RUN docker-php-ext-install zip
RUN apt-get install -y libfreetype6-dev libpng-dev libjpeg62-turbo-dev libmcrypt-dev libpng-dev &&\
docker-php-ext-configure gd &&\
docker-php-ext-install -j2 gd
RUN apt-get update -y && apt-get install -y --no-install-recommends libmagickwand-dev
RUN pecl install imagick && docker-php-ext-enable imagick
ADD docker/vhost.conf /etc/apache2/sites-enabled/
RUN a2enmod rewrite
docker-compose.yml
version: '2'
services:
web:
volumes:
- ./test:/var/www/html
build:
context: .
dockerfile: Dockerfile
ports:
- 80:80
restart: always
Musím říct, že mě výkon dockeru překvapil a to nejen při použití nového VirtioFS. Podle článků na Internetu je výkonnost dockeru na Macu jako sázka do loterie. Já si, zdá se, vylosoval slušnou rychlost i se starým FS. Nebo možná pomohly další optimalizace, které do nové verze 4.6 vývojáři přidali.
V každém případě se zdá, že až budu někdy v budoucnu přecházet s pracovním strojem na macOS, nebude už výkon dockeru problém.
UPDATE 21.03.2022 19:00
Uživatelé mají možnost hlásit případné chyby v tomto vlákně na GitHubu. Odpovídají přímo vývojáři, vydali také nový build s opravenými některými chybami. Vypadá to, že se opravdu snaží s výkonem něco udělat a reagovat na zpětnou vazbu od testujících uživatelů.