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 \