Docker själv pålägger väldigt lite overhead, det är bara att isolera processen från andra processer på värden. Det finns dock massor av saker du kan göra för att försämra prestandan hos en behållare:
- Kör det i Windows/MacOS samtidigt som du bara ger den inbäddade virtuella datorn en bråkdel av minnet/processorn i det överordnade operativsystemet.
- Begränsa CPU- eller minnesresurser inuti behållaren.
- Starta många behållare på din värd. Docker är inte magi, om 10 instanser av Java vardera använder 2 gig ram tar värden till en genomsökning utanför behållaren, kommer de inte att fungera bättre inuti behållare.
- Nätverkskomplikationer. Varje behållare är som standard snurrad upp på en isolerad nätverksbrygga, där IO kan ta lite längre tid med de extra hoppen. Och om din DNS inte är korrekt konfigurerad kan du se extra förseningar från misslyckade sökningar.
- Krav på bar metall som direkt diskåtkomst är inte tillåtna som standard i Docker. Du kan ge åtkomst till specifika enheter, men annars isoleras den behållarversionen av appen avsiktligt.
- Data i volymer kan finnas på en mindre effektiv plats. Som standard är det ditt /var/lib/docker-filsystem, men du kan enkelt peka detta på en NFS-montering där prestandan skulle vara ännu sämre.
- Felkonfigurerad DB, t.ex. glömmer att skapa ett index.
Kort sagt, det är osannolikt att behållaren är själva problemet, men se till att du gör en jämförelse mellan äpplen och äpplen.