Table of Contents
Docker desktop alternative for macOS
Questa è una guida basata sulle indicazioni di Rens Verhage aggiornate alle versioni disponibili ad oggi (venerdì 17 novembre 2023)
Anche se ci sono metodi alternativi, questa breve guida si basa sull'utilizzo del gestore di pacchetti Homebrew
podman
Una volta installato podman (versione 4.7.2 alla data odierna) via
$ brew install podman
è necessario inizializzare una VM Linux nella quale potranno essere eseguiti i container. Per default podman inizializzerebbe una VM con 1CPU e 2GB di RAM e 100GB di disco. Se si hanno a disposizione abbastanza risorse, può essere utile aumentare quelle assegnate alla VM
$ podman machine init --cpus 4 --memory 4096 --disk-size 100
Questo genera una VM basata su fedora-coreOS-39 che può essere messa in esecuzione via
$ podman machine start
docker
podman sostituisce tutti i comandi docker mantenendone la sintassi. Per chi è abituato ad utilizzare docker, può essere utile definire
$ alias docker='podman'
e magari inserirlo nel .bash_profile (o nell'equivalente delle altre shell)
$echo "alias docker='podman'" >> ~/.bash_profile
docker-compose
Siccome docker-compose è una soluzione specifica di Docker e non esiste un equivalente in podman, è necessario installarlo (sempre via Homebrew)
$ brew install docker-compose
e quindi bisogna eseguire
mkdir -p ~/.docker/cli-plugins ln -sfn /opt/homebrew/opt/docker-compose/bin/docker-compose ~/.docker/cli-plugins/docker-compose
docker-compose build
Per poter effettuare il build, docker-compose utilizza l'immagine moby/buildkit:buildx-stable-1 che fa partire nel container buildx_buildkit_default
Tale container esegue il build all'interno della VM per l'architettura corrente e definisce anche la variabile d'ambiente TARGETPLATFORM che può essere utilizzata all'interno del Dockerfile. Ad esempio:
RUN if [ "$TARGETPLATFORM" = "linux/arm64" ] || [ "$TARGETPLATFORM" = "linux/aarch64" ]; then ARCH=aarch64; \ elif [ "$TARGETPLATFORM" = "linux/x86_64" ] || [ "$TARGETPLATFORM" = "" ] || [[ -z "$TARGETPLATFORM" ]] ; then ARCH=x86_64; \ else echo "Plarform not supported. Exiting"; exit 1 ;\ fi \