Home Blog Verklein je Docker Image wanneer je gebruik maakt van de League Flysystem s3 adapter

"Docker"

Verklein je Docker Image wanneer je gebruik maakt van de League Flysystem s3 adapter

Als je je PHP applicaties deployed d.m.v. Docker images en je werkt met S3 als filesystem met Flysystem, dan weet je dat je Docker image niet klein zal zijn. Flysystem is een fantastische package voor interactie met het bestandssysteem en het toevoegen van ondersteuning voor interactie met een S3 bucket is heel eenvoudig, maar het komt met het nadeel dat je de enorme AWS PHP SDK erbij moet installeren.

De huidige AWS PHP SDK bevat alle classes voor elke AWS service, zelfs als je nooit van plan bent iets anders dan S3 te gebruiken. De auteur van Flysystem (Frank de Jonge) heeft dit al gemarkeerd als een probleem, omdat de hele AWS PHP SDK 29mb groot is. Je kunt die discussie hier vinden: Reducing package size.

Deze enorme SDK is moeilijk uit te leggen als je maar een heel klein beetje van de functionaliteit nodig hebt, dus laten we dat oplossen!

Verwijder alle ongebruikte dependencies

Als antwoord hierop heeft het AWS-team een mogelijke oplossing voorgesteld, die weinig van jou als ontwikkelaar vraagt, maar je wel 28mb bespaart! Het AWS-team heeft een callback gemaakt die je kunt toevoegen aan je composer.json en die alle diensten verwijdert die je niet van plan bent te gebruiken: Removing Unused Services.

Dit zijn alle wijzigingen die je moet aanbrengen in je composer.json en het zal onmiddellijk je Docker image kleiner maken zonder de geweldige functionaliteit of league/flysystem te verliezen:

{
  "require": {
    "league/flysystem-aws-s3-v3": "^1.0"
  },
  "scripts": {
    "pre-autoload-dump": [
      "Aws\\Script\\Composer\\Composer::removeUnusedServices"
    ]
  },
  "extra": {
    "aws/aws-sdk-php": [
      "S3"
    ]
  }
}

Met de pre-autoload-dump hook kun je een taak toevoegen aan het composer proces, dat in dit geval het composer.json bestand leest en bepaalt welke services je wilt behouden. Het zal alle andere services uit de SDK verwijderen. Er zijn een paar services die altijd worden opgenomen, ongeacht of je ze gebruikt of niet:

  • Kms
  • S3
  • SSO
  • Sts

Het AWS-team heeft deze namespaces gemarkeerd als "onveilig om te verwijderen", zodat ze altijd in de dependencies worden opgenomen.

De configuratie in de extra key bevat een lijst van de namespaces die je wilt behouden. Omdat ik alleen de S3 namespace gebruik, is dit de enige dienst die ik vermeld. Technisch gezien hoef ik dit niet te doen, omdat deze namespace nooit verwijderd zal worden door deze Composer hook, maar ik wil graag expliciet zijn over mijn dependencies.

Dus als je probeert je Docker image kleiner te maken en je gebruikt Flysystem met de S3 adapter, implementeer dit dan zeker in je project! Het zal je vele kostbare megabytes besparen!

Gepubliceerd op: January 22nd, 2023

Ik help je met het behalen van geweldige SEO, hogere conversies, en grotere groei van jouw bedrijf

Neem nu contact op om jouw bedrijf te groeien

Roelof Jan Elsinga