1. Prerequisiti e installazione Podman
Installare Podman su Windows 11
Scarica e installa Podman per Windows dall'indirizzo ufficiale:
https://podman.io/
Scarica il file .exe dell'ultima versione stabile (es. podman-v5.x.x-setup.exe) ed eseguilo.
Inizializzare la Podman Machine
Podman su Windows utilizza una macchina virtuale Linux in background. Inizializzala con risorse adeguate allo sviluppo:
podman machine init --memory 4096
Viene creata una macchina virtuale con nome podman-machine-default. Volendo posso anche dare un nome alla macchina usando il comando podman machine init nome-macchina
Per avviare e fermare la macchina usa questi comandi
podman machine start
podman machine stop
I container possono girare in due modalità
- Rootless: I container girano senza privilegi di root
- Rootful: I container girano come root dentro la VM
Se voglio far girare la macchine con privilegi di root lanciare il seguente comando e poi fermare e riavviare la macchina
podman machine set --rootful
podman machine stop
podman machine start
Per vedere la macchina virtuale installata
podman machine list
Nel caso in cui desideri cancellare e ricreare la macchina usa
podman machine rm
Verifica che tutto funzioni:
podman version
podman info
Per vedere la macchina installa con wsl lanciare il seguente comando
wsl -l -v
Installare podman-compose
podman-compose permette di orchestrare più container tramite un file compose.yaml, ed è l'equivalente di docker-compose per Podman.
pip install podman-compose
Se non hai Python installato, scaricalo da https://python.org e assicurati di aggiungere Python al PATH durante l'installazione.
2. Struttura del progetto
Crea questa struttura di cartelle. La cartella D:\temp\wamp-podman contiene tutta la configurazione dei container. I tuoi siti web risiedono nella sottocartella www e vengono montati nel container senza essere copiati al suo interno.
D:\temp\wamp-podman\
│
├── .env ← tutte le variabili configurabili qui
├── compose.yaml ← orchestrazione dei container
│
├── php-apache\
│ ├── Dockerfile ← immagine custom PHP 8.5.4-fpm + Apache
│ ├── apache\
│ │ ├── vhosts.conf ← configurazione virtual host Apache
│ │ └── start.sh ← script di avvio PHP-FPM + Apache
│ └── php\
│ ├── custom.ini ← impostazioni PHP aggiuntive
│ └── fpm-pool.conf ← configurazione pool PHP-FPM
│
└── www\ ← i tuoi siti (solo montata nel container)
├── sito1\
├── sito2\
└── ...
3. File di configurazione centrale .env
Questo è il punto unico dove modificare tutte le variabili dell'ambiente. Non dovrai mai toccare altri file per cambiare porte, credenziali o percorsi.
Percorso: D:\temp\wamp-podman\.env
# ─────────────────────────────────────────────
# PERCORSI
# ─────────────────────────────────────────────
# Percorso della cartella che contiene i tuoi siti web.
# Usa la sintassi con slash (/).
SITES_ROOT=D:/temp/wamp-podman/www
# ─────────────────────────────────────────────
# PORTE HOST
# ─────────────────────────────────────────────
# Porta su cui Apache risponde su Windows (http://localhost:APACHE_PORT)
APACHE_PORT=8080
# Porta interna del container su cui Apache ascolta
# Per wordpress tenere allineato questo valore con APACHE_PORT
APACHE_INTERNAL_PORT=8080
# Porta su cui phpMyAdmin è raggiungibile da Windows
PHPMYADMIN_PORT=8081
# Porta interna del container su cui phpMyAdmin ascolta
PHPMYADMIN_INTERNAL_PORT=80
# Porta per MariaDB (utile per client esterni come DBeaver)
MARIADB_PORT=3306
# ─────────────────────────────────────────────
# MARIADB
# ─────────────────────────────────────────────
MARIADB_ROOT_PASSWORD=root
# ─────────────────────────────────────────────
# NOMI CONTAINER
# ─────────────────────────────────────────────
# prefisso usato da Podman per nominare tutte le risorse
COMPOSE_PROJECT_NAME=devenv
4. Dockerfile per PHP-FPM + Apache
Questo Dockerfile usa come base php:8.5.4-fpm, che include PHP-FPM ma non un web server.
Apache viene installato tramite apt-get e configurato per comunicare con PHP-FPM
tramite FastCGI usando il modulo mod_proxy_fcgi.
PHP-FPM ascolta su socket Unix per prestazioni migliori rispetto a TCP.
Percorso: D:\temp\wamp-podman\php-apache\Dockerfile
# Immagine base ufficiale PHP 8.5.4 con PHP-FPM preinstallato.
# Non include un web server: Apache viene installato separatamente qui sotto.
FROM php:8.5.4-fpm
# Aggiorna l'indice dei pacchetti apt prima di qualsiasi installazione.
RUN apt-get update
# Installa Apache e il modulo FastCGI.
# apache2 è il web server che riceve le richieste HTTP.
# libapache2-mod-fcgid è necessario per la comunicazione FastCGI tra Apache e PHP-FPM,
# anche se il modulo che usiamo effettivamente è mod_proxy_fcgi (abilitato più avanti).
RUN apt-get install -y apache2 libapache2-mod-fcgid
# Installa le librerie di sistema necessarie per compilare le estensioni PHP.
# Queste sono le dipendenze native (headers e librerie C) richieste da:
# - libzip-dev, libpng-dev, libjpeg62-turbo-dev, libwebp-dev, libfreetype6-dev → GD (immagini)
# - libonig-dev → mbstring (stringhe multibyte)
# - libxml2-dev → soap, xsl, xml
# - libcurl4-openssl-dev, libssl-dev → curl e connessioni sicure
# - libmagickwand-dev → ImageMagick
# - libicu-dev → intl (internazionalizzazione)
# - libxslt1-dev → xsl (trasformazioni XSLT)
# - libsqlite3-dev → pdo_sqlite
# - unzip, curl, git, nano → strumenti generali utili dentro il container
RUN apt-get install -y libzip-dev libpng-dev libjpeg62-turbo-dev libwebp-dev libfreetype6-dev libonig-dev libxml2-dev libcurl4-openssl-dev libssl-dev libmagickwand-dev libicu-dev libxslt1-dev libsqlite3-dev unzip curl git nano
# GD richiede un configure separato per specificare quali formati immagine supportare.
# configure e install devono stare nello stesso RUN per mantenere lo stato della configurazione.
RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp && docker-php-ext-install gd
# Estensioni matematiche e di utilità generale.
# bcmath → calcoli decimali ad alta precisione (richiesto da Laravel e molti pacchetti)
# calendar → conversioni tra formati di calendario
# exif → lettura metadati da immagini (richiesto da WordPress per la gestione media)
# gettext → internazionalizzazione tramite file .po/.mo
RUN docker-php-ext-install bcmath calendar exif gettext
# Estensioni per stringhe e database MySQL.
# intl → internazionalizzazione avanzata (richiesto da Laravel)
# mbstring → gestione stringhe multibyte (UTF-8), richiesto praticamente da tutto
# mysqli → interfaccia procedurale per MySQL/MariaDB (richiesto da WordPress)
RUN docker-php-ext-install intl mbstring mysqli
# Estensioni per processi e database.
# pcntl → controllo processi (richiesto da Laravel queue e Artisan)
# pdo → interfaccia PDO generica per database
# pdo_mysql → driver PDO per MySQL/MariaDB (richiesto da Laravel)
# pdo_sqlite → driver PDO per SQLite (utile per test)
RUN docker-php-ext-install pcntl pdo pdo_mysql pdo_sqlite
# Estensioni per protocolli e formati.
# soap → protocollo SOAP per web service
# sockets → comunicazione tramite socket di basso livello
# xsl → trasformazioni XSLT su documenti XML
# zip → creazione e lettura di archivi ZIP (richiesto da Composer e molti pacchetti)
RUN docker-php-ext-install soap sockets xsl zip
# ImageMagick: libreria avanzata per manipolazione immagini.
# Installata tramite PECL perché non fa parte delle estensioni core di PHP.
# Offre funzionalità superiori a GD (resize, watermark, conversioni, PDF, ecc.)
RUN pecl install imagick
RUN docker-php-ext-enable imagick
# Redis: estensione per comunicare con un server Redis.
# Utile per cache, sessioni e code in Laravel e WordPress.
# Installata tramite PECL perché non fa parte delle estensioni core di PHP.
RUN pecl install redis
RUN docker-php-ext-enable redis
# Copia il binario di Composer dall'immagine ufficiale.
# Composer è il gestore di dipendenze PHP, necessario per Laravel e molti progetti moderni.
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Abilita i moduli Apache necessari.
# proxy_fcgi → permette ad Apache di passare le richieste PHP a PHP-FPM via FastCGI
# setenvif → richiesto da proxy_fcgi per impostare variabili d'ambiente sulle richieste
# rewrite → riscrittura URL, richiesto da Laravel (.htaccess) e WordPress
# headers → gestione degli header HTTP
# expires → header per la cache del browser
# deflate → compressione gzip delle risposte
# ssl → supporto HTTPS
# vhost_alias → abilita VirtualDocumentRoot per i virtual host wildcard
RUN a2enmod proxy_fcgi setenvif rewrite headers expires deflate ssl vhost_alias
# Copia la configurazione dei virtual host Apache,
# sovrascrivendo il virtual host di default dell'immagine base.
COPY apache/vhosts.conf /etc/apache2/sites-available/000-default.conf
# Copia le configurazioni PHP personalizzate nella cartella conf.d,
# che viene letta da PHP all'avvio per sovrascrivere i valori di php.ini.
COPY php/custom.ini /usr/local/etc/php/conf.d/custom.ini
# Sovrascrive la configurazione del pool PHP-FPM di default
# per usare un socket Unix invece di TCP.
COPY php/fpm-pool.conf /usr/local/etc/php-fpm.d/www.conf
# Copia lo script di avvio che lancia sia PHP-FPM che Apache,
# e lo rende eseguibile.
COPY apache/start.sh /usr/local/bin/start.sh
RUN chmod +x /usr/local/bin/start.sh
# Allinea l'UID e GID dell'utente www-data a 1000.
# Su Windows/Linux l'utente proprietario dei file montati ha tipicamente UID 1000.
# Questo evita problemi di permessi quando Apache o PHP-FPM
# devono leggere, scrivere o creare file nella cartella montata.
RUN usermod -u 1000 www-data
RUN groupmod -g 1000 www-data
# Imposta la cartella di lavoro predefinita del container.
WORKDIR /var/www/html
# Documenta che il container espone la porta 80.
# Questo valore viene sovrascritto dinamicamente dallo script start.sh
# in base alla variabile APACHE_INTERNAL_PORT passata dal compose.yaml.
EXPOSE 80
# Sostituisce il CMD predefinito dell'immagine base (php-fpm)
# con il nostro script che avvia sia PHP-FPM che Apache.
CMD ["/usr/local/bin/start.sh"]
Script di avvio
Poiché il container deve eseguire sia PHP-FPM che Apache, serve uno script che li avvii entrambi.
L'immagine base php:8.5.4-fpm ha come CMD predefinito solo php-fpm:
lo script lo sostituisce avviando entrambi i processi.
Percorso: D:\temp\wamp-podman\php-apache\apache\start.sh
#!/bin/bash
export APACHE_LOG_DIR=/var/log/apache2
export APACHE_RUN_DIR=/var/run/apache2
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_LOCK_DIR=/var/lock/apache2
export APACHE_PID_FILE=/var/run/apache2/apache2.pid
# Porta dinamica da variabile d'ambiente, default 80 se non impostata
APACHE_INTERNAL_PORT=${APACHE_INTERNAL_PORT:-80}
# Imposta la porta di ascolto
echo "Listen ${APACHE_INTERNAL_PORT}" > /etc/apache2/ports.conf
# Sostituisce la porta nei VirtualHost
sed -i "s/\*:APACHE_PORT/\*:${APACHE_INTERNAL_PORT}/g" /etc/apache2/sites-available/000-default.conf
# crea la cartella dove PHP-FPM scriverà il socket Unix. Il flag -p evita errori se la cartella esiste già
mkdir -p /var/run/php
# assegna la cartella all'utente www-data, che è l'utente con cui girano sia Apache che PHP-FPM
chown www-data:www-data /var/run/php
# avvia PHP-FPM in background
php-fpm &
# avvia Apache in primo piano. Questo è l'ultimo comando e non ritorna mai finché il container è in esecuzione.
# Docker e Podman richiedono che almeno un processo giri in foreground per mantenere il container attivo:
# se questo processo termina, il container si spegne.
apache2ctl -D FOREGROUND
5. Configurazione Apache
Apache riceve le richieste HTTP e passa quelle PHP a PHP-FPM tramite FastCGI
usando la direttiva SetHandler proxy:unix.
Il socket Unix /var/run/php/php-fpm.sock è il canale di comunicazione
tra Apache e PHP-FPM all'interno del container.
Percorso: D:\temp\wamp-podman\php-apache\apache\vhosts.conf
# ─── Virtual Host di default ─────────
<VirtualHost *:APACHE_PORT>
ServerName localhost
DocumentRoot /var/www/html
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<FilesMatch "\.php$">
SetHandler "proxy:unix:/var/run/php/php-fpm.sock|fcgi://localhost"
</FilesMatch>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# ─── Virtual Host dedicato per progetti Laravel ──────────
# La DocumentRoot punta alla sottocartella /public.
# Duplica questo blocco per ogni progetto Laravel aggiuntivo.
# Ricorda di aggiungere il dominio al file hosts di Windows:
# C:\Windows\System32\drivers\etc\hosts
# 127.0.0.1 sito1.localhost
<VirtualHost *:APACHE_PORT>
ServerName sito1.localhost
DocumentRoot /var/www/html/sito1/public
<Directory /var/www/html/sito1/public>
AllowOverride All
Require all granted
</Directory>
<FilesMatch "\.php$">
SetHandler "proxy:unix:/var/run/php/php-fpm.sock|fcgi://localhost"
</FilesMatch>
</VirtualHost>
# ─── Virtual Host wildcard per WordPress e siti senza /public ────────────────
# Gestisce automaticamente tutti i siti la cui DocumentRoot
# è la cartella radice del progetto, senza aggiungere un VirtualHost per ognuno.
<VirtualHost *:APACHE_PORT>
ServerName wildcard.localhost
ServerAlias *.localhost
UseCanonicalName Off
VirtualDocumentRoot /var/www/html/%1
<Directory /var/www/html>
AllowOverride All
Require all granted
</Directory>
<FilesMatch "\.php$">
SetHandler "proxy:unix:/var/run/php/php-fpm.sock|fcgi://localhost"
</FilesMatch>
</VirtualHost>
Configurazione pool PHP-FPM
Sovrascrivi la configurazione di default del pool PHP-FPM per usare un socket Unix invece di TCP, che è più performante per comunicazioni locali all'interno del container.
Percorso: D:\temp\wamp-podman\php-apache\php\fpm-pool.conf
[www]
; Utente e gruppo con cui girano i processi PHP-FPM.
; Deve corrispondere all'utente di Apache per evitare problemi di permessi
; sui file montati dalla cartella Windows.
user = www-data
group = www-data
; Usa un socket Unix invece di TCP (es. 127.0.0.1:9000).
; Il socket Unix è più performante per comunicazioni locali all'interno
; dello stesso container, poiché evita il overhead del protocollo TCP.
listen = /var/run/php/php-fpm.sock
; Permessi sul socket: owner e group devono corrispondere all'utente Apache
; in modo che Apache possa scrivere sul socket e passare le richieste a PHP-FPM.
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
; Gestione dinamica dei processi worker.
; PHP-FPM crea e distrugge i worker in base al carico,
; mantenendosi tra un minimo e un massimo definiti qui sotto.
pm = dynamic
; Numero massimo di processi worker simultanei.
; Ogni worker gestisce una richiesta PHP alla volta.
pm.max_children = 20
; Numero di worker avviati insieme al container.
pm.start_servers = 4
; Numero minimo di worker inattivi mantenuti in standby.
; Se scende sotto questo valore PHP-FPM ne crea di nuovi.
pm.min_spare_servers = 2
; Numero massimo di worker inattivi tollerati.
; Se supera questo valore PHP-FPM ne termina alcuni per liberare memoria.
pm.max_spare_servers = 6
6. Configurazione PHP
Andiamo ora a sovrascrivere alcune direttive di php con un file ini custom
Percorso: D:\temp\wamp-podman\php-apache\php\custom.ini
; ─── Impostazioni generali ───────
display_errors = On
display_startup_errors = On
error_reporting = E_ALL
log_errors = On
; ─── Limiti di risorse ──────────
memory_limit = 512M
max_execution_time = 120
max_input_time = 120
max_input_vars = 3000
; ─── Upload ───────
upload_max_filesize = 64M
post_max_size = 64M
; ─── Timezone ────────
date.timezone = Europe/Rome
; ─── OPcache ──────
opcache.enable = 0
opcache.memory_consumption = 128
opcache.max_accelerated_files = 10000
; 0 = nessuna cache del timestamp: Apache vede sempre i file aggiornati
opcache.revalidate_freq = 0
; ─── Sessioni ──────
session.gc_maxlifetime = 3600
8. File compose.yaml
Un file compose.yaml serve a definire e avviare più container (servizi) insieme con una sola configurazione,
descrivendo come devono funzionare e interagire tra loro
Percorso: D:\temp\wamp-podman\compose.yaml
# Nome del progetto, usato come prefisso per container, volumi e reti.
# Il valore viene letto dal file .env.
name: ${COMPOSE_PROJECT_NAME}
# Definizione della rete interna condivisa tra tutti i container.
# Con il driver bridge i container sulla stessa rete si raggiungono
# tramite il loro nome servizio (es. "mariadb", "php-apache"),
# ma sono isolati dal resto della rete della macchina host.
networks:
devnet:
driver: bridge
# Dichiarazione dei volumi persistenti gestiti da Podman.
# Un volume è una cartella gestita direttamente da Podman, separata
# dal filesystem del container. I dati sopravvivono al riavvio e
# alla rimozione del container, e vengono eliminati solo con
# "podman volume rm" oppure "podman-compose down -v".
volumes:
mariadb_data:
driver: local
services:
php-apache:
# Costruisce l'immagine dal Dockerfile invece di scaricarla da un registry.
# context indica la cartella che viene inviata al build engine come contesto,
# ovvero la cartella da cui il Dockerfile legge i file con le istruzioni COPY.
build:
context: ./php-apache
dockerfile: Dockerfile
container_name: ${COMPOSE_PROJECT_NAME}_php
# Riavvia il container automaticamente se si blocca o se la macchina viene riavviata.
# "unless-stopped" significa che si riavvia sempre tranne quando lo si ferma manualmente.
restart: unless-stopped
# Mappa la porta esterna (Windows) sulla porta interna (container).
# Formato: "porta_host:porta_container"
# Entrambi i valori vengono letti dal file .env per essere configurabili in un solo punto.
ports:
- "${APACHE_PORT}:${APACHE_INTERNAL_PORT}"
volumes:
# Questo è un bind mount: monta una cartella esistente sul filesystem host
# direttamente dentro il container. I file non vengono copiati: il container
# accede in tempo reale agli stessi file presenti in ./www su Windows.
# Qualsiasi modifica fatta dal container (lettura, scrittura, creazione, cancellazione)
# si riflette immediatamente sulla cartella Windows e viceversa.
# Il flag ":z" è necessario su sistemi con SELinux abilitato per assegnare
# la label di sicurezza corretta al mount.
- "./www:/var/www/html:z"
environment:
# Passa la porta interna di Apache allo script start.sh che la usa
# per configurare dinamicamente Apache al momento dell'avvio del container.
- APACHE_INTERNAL_PORT=${APACHE_INTERNAL_PORT}
networks:
- devnet
# Garantisce che MariaDB sia avviato prima di PHP-Apache.
# Utile per evitare errori di connessione al database durante l'avvio.
depends_on:
- mariadb
mariadb:
# Scarica l'immagine ufficiale MariaDB 12.2 dal registry Docker Hub.
image: mariadb:12.2
container_name: ${COMPOSE_PROJECT_NAME}_db
restart: unless-stopped
ports:
- "${MARIADB_PORT}:3306"
volumes:
# Questo è un volume mount: diversamente dal bind mount sopra,
# qui non si monta una cartella Windows ma un volume gestito da Podman.
# "mariadb_data" è il volume dichiarato nella sezione "volumes" in cima al file.
# I dati del database vengono salvati qui dentro e non nella cartella Windows,
# per due motivi: le prestazioni del filesystem Windows su mount sono inferiori
# rispetto a un volume nativo, e MariaDB richiede un filesystem Linux nativo
# per funzionare correttamente.
- mariadb_data:/var/lib/mysql:z
environment:
MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD}
networks:
- devnet
phpmyadmin:
image: phpmyadmin:latest
container_name: ${COMPOSE_PROJECT_NAME}_pma
restart: unless-stopped
ports:
- "${PHPMYADMIN_PORT}:${PHPMYADMIN_INTERNAL_PORT}"
environment:
# Nome del container MariaDB a cui phpMyAdmin si connette.
# Podman risolve "mariadb" all'indirizzo IP corretto grazie alla rete devnet.
PMA_HOST: mariadb
PMA_PORT: 3306
# Dimensione massima dei file SQL importabili tramite interfaccia web.
UPLOAD_LIMIT: 64M
networks:
- devnet
depends_on:
- mariadb
9. Avvio e gestione dell'ambiente
Apri PowerShell nella cartella D:\temp\wamp-podman.
Prima build
Da eseguire solo la prima volta, o dopo modifiche al Dockerfile:
cd D:\temp\wamp-podman
podman-compose build
Nel caso in cui si verificono problemi, a container avviati, per ricostruire tutto
# ferma e rimuove i container in esecuzione. I dati nel volume MariaDB restano intatti.
podman-compose down
# ricostruisce le immagini leggendo il Dockerfile da zero, ignorando qualsiasi layer memorizzato nella cache.
# Necessario quando modifichi il Dockerfile o i file che copia
podman-compose build --no-cache
# crea e avvia i container basandosi sulle immagini appena costruite
podman-compose up -d
Avviare, fermare e verificare i container
# Avvia tutti i container in background
podman-compose up -d
# Verifica che i container siano in esecuzione
podman ps
# Ferma i container senza rimuoverli
podman-compose stop
# Ferma e rimuove i container (i dati del DB rimangono nel volume)
podman-compose down
Accedere ai servizi
Siti web → http://localhost:8080
Sito specifico → http://sito1.localhost:8080
phpMyAdmin → http://localhost:8081
Log e shell
# Log in tempo reale di tutti i container
podman-compose logs -f
# Log di un singolo container
podman logs -f devenv_php
# Aprire una shell nel container PHP
podman exec -it devenv_php bash
All'interno del container puoi eseguire comandi Composer e Artisan direttamente nell'ambiente PHP:
composer install
php artisan migrate
php -m
10. Uso quotidiano
Avvio/Stop rapido
podman machine start
cd D:\temp\wamp-podman
podman-compose up -d
podman-compose stop
Modificare una variabile
Apri D:\temp\wamp-podman\.env, modifica il valore desiderato, poi riavvia i container:
podman-compose down
podman-compose up -d
Aggiungere un nuovo sito
Crea la cartella del sito in D:\temp\wamp-podman\www\nuovo-sito\, poi aggiungi una riga al file hosts di Windows (come amministratore):
127.0.0.1 nuovo-sito.localhost
Il file hosts si trova in C:\Windows\System32\drivers\etc\hosts.
Se il sito usa Laravel, aggiungi un VirtualHost dedicato in vhosts.conf con DocumentRoot che punta a /var/www/html/nuovo-sito/public, poi ricostruisci:
podman-compose down
podman-compose build
podman-compose up -d
Se il sito è WordPress o ha la DocumentRoot nella root del progetto, il virtual host wildcard lo gestisce automaticamente senza modifiche.
Gestire i database
# Via browser
http://localhost:8081
# Via CLI nel container
podman exec -it devenv_db mariadb -u root -p
Backup e ripristino del database
# Esporta tutti i database
podman exec devenv_db mariadb-dump -u root -prootpassword --all-databases > backup.sql
# Ripristino
podman exec -i devenv_db mariadb -u root -prootpassword < backup.sql
Controllare i moduli PHP attivi
podman exec devenv_php php -m
Avviare Podman machine automaticamente con Windows
Per evitare di eseguire manualmente podman machine start ogni giorno, crea un Task nel Task Scheduler di Windows con questi parametri:
Trigger: All'avvio di Windows
Programma: podman
Argomenti: machine start