====== Docker desktop alternative for macOS ======
Questa è una guida basata sulle indicazioni di [[https://medium.com/team-rockstars-it/how-to-implement-a-docker-desktop-alternative-in-macos-with-podman-bbf728d033da|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 [[https://brew.sh|Homebrew]]
===== podman =====
Una volta installato podman (versione 4.7.2 alla data odierna) via
$ brew install podman
{{:cn:ccr:aai:howto:docker:screenshot_2023-11-17_at_16.09.22.png?600|}}
è 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
{{:cn:ccr:aai:howto:docker:screenshot_2023-11-17_at_16.15.40.png?600|}}
Questo genera una VM basata su fedora-coreOS-39 che può essere messa in esecuzione via
$ podman machine start
{{:cn:ccr:aai:howto:docker:screenshot_2023-11-17_at_16.18.08.png?600|}}
===== 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
{{:cn:ccr:aai:howto:docker:screenshot_2023-11-17_at_16.28.59.png?600|}}
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
{{:cn:ccr:aai:howto:docker:screenshot_2023-11-17_at_16.49.20.png?600|}}
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 \