Konečně rychlý Docker na Macu?

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-FUSEVirtiofs
477111
29291
14478
15078
14784
15287
13373
14085
13684
∅ 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-FUSEVirtiofs
1936507
947379
620361
603373
607372
615410
636374
606362
608388
641375
∅ 782 ms ∅ 390 ms

V produkčním módu TTFB:

gRPC-FUSE Virtiofs
1270315
779353
473298
580291
447299
440292
468277
445281
461263
521273
∅ 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ů.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *