Back to "Condivisione immagini con Docker"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

Docker ImageSharp

Condivisione immagini con Docker

Thursday, 01 August 2024

ImageSharp è una grande libreria per lavorare con le immagini in.NET. E'veloce, facile da usare, e ha un sacco di caratteristiche. In questo post, vi mostrerò come usare ImageSharp con Docker per creare un semplice servizio di elaborazione delle immagini.

Che cos'è ImageSharp?

ImageSharp mi permette di lavorare senza soluzione di continuità con le immagini in.NET. Si tratta di una libreria multipiattaforma che supporta una vasta gamma di formati di immagine e fornisce una semplice API per l'elaborazione delle immagini. È veloce, efficiente e facile da usare.

Tuttavia c'è un problema nel mio setup utilizzando docker e ImageSharp. Quando provo a caricare un'immagine da un file, ottengo il seguente errore: Accesso negato al percorso /wwroot/cache/ etc... Questo è causato da Docker ASP.NET installazioni che non consentono l'accesso in scrittura alla directory cache ImageSharp utilizza per memorizzare i file temporanei.

Soluzione

La soluzione è quella di montare un volume nel contenitore docker che punta ad una directory sulla macchina host. In questo modo, la libreria ImageSharp può scrivere nella directory della cache senza problemi.

Ecco come si fa:

mostlylucid:
image: scottgal/mostlylucid:latest
volumes:
- /mnt/imagecache:/app/wwwroot/cache

Qui vedete che ho mappato il file /app/wwwroot/cache in una directory locale sulla mia macchina host. In questo modo, ImageSharp può scrivere nella directory della cache senza problemi.

Sulla mia macchina Ubuntu ho creato una directory /mnt/imagecache e poi ho eseguito il comando following per renderlo scrivibile (da chiunque, so che questo non è sicuro ma non sono un guru Linux:))

chmod  777 -p /mnt/imagecache

Nel mio programma.cs ho questa linea:

builder.Services.AddImageSharp().Configure<PhysicalFileSystemCacheOptions>(options => options.CacheFolder = "cache");

Come impostazione predefinita della cacheroot per wwwroot, ora scriverà alla directory /mnt/imagecache sulla macchina host.

logo

©2024 Scott Galloway