Questo tutorial raccoglie qualche appunto per l’installazione di PHP 5.6 su Debian 9 usando Docker.

Premessa

In questi giorni mi sono trovato a dover migrare una vecchia applicazione che non è compatibile con PHP 7 su un server più aggiornato. Ho voluto evitare l’uso di repository non ufficiali e le complicanze derivanti dalla convivenza di due differenti versioni di PHP sulla stessa macchina.

Cosa è Docker?

In breve, Docker è un contenitore indipendente di microservizi isolato dal sistema host. Contiene uno o più applicativi e le relative dipendenze in un ambiente virtuale e può essere eseguito in una o più istanze.
Per l’installazione, rimando alla guida Come installare Docker su Debian.

Installare l’immagine di PHP e creazione del file di configurazione YAML

Nell’archivio di Docker ho trovato una immagine con PHP+NGINX creata da navidonskis che rispondeva alle mie esigenze. Sul terminale del server ho scaricato l’immagine con

root@localhost:~# docker pull navidonskis/nginx-php5.6

L’immagine pesa circa 450MB e contiene tutto il software applicativo e le relative dipendenze.
Per tenere traccia della configurazione (e per gli sviluppi futuri) ho usato un file YAML per la configurazione del container:

web:
    image: navidonskis/nginx-php5.6
    container_name: myapp
    restart: always
    ports:
      - "127.0.0.1:8080:80"
    volumes:
      # 1. monta il path della cartella
      - /path/della/mia/vecchia/applicazione:/var/www
      # 2. monta la configurazione del sito
      - /mnt/docker/applicazione/nginx/sites-enabled:/etc/nginx/sites-enabled
      # 3. creo l'override del file php.ini
      - /mnt/docker/applicazione/php/custom.ini:/etc/php/5.6/fpm/conf.d/custom.ini

Il file di configurazione è piuttosto intuitivo, l’unica nota è la mappatura della porta: l’immagine che sto utilizzando espone la porta 80. Visto che sul server girano altri applicativi ho deciso di mappare la porta 80 del container sulla porta 8080 del server.
Per la pubblicazione uso un server proxy (un’altra installazione di NGINX) configurato per redirigere il traffico della porta 8080 sulla porta 80.

Creazione e avvio del container

Per creare ed eseguire un container bisogna usare docker-compose, un software aggiuntivo al docker che abbiamo già installato.

Per l’installazione rimando al sito ufficiale.

root@localhost:~# docker-compose -f docker-compose.yml up -d

Il comando up serve per creare e avviare il container, mentre il parametro -d esegue il container come demone, liberando la shell.

Per verificare il corretto funzionamento, lanciamo da terminale il seguente comando:

root@localhost:~# docker ps

Dovremmo ottenere un risultato simile a questo:

CONTAINER ID        IMAGE                      COMMAND               CREATED             STATUS              PORTS                    NAMES
a7d6932g5wee        navidonskis/nginx-php5.6   "/bin/bash /cmd.sh"   12 minutes ago       Up 12 minutes        127.0.0.1:8080->80/tcp   myapp