====== 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 \