Una settimana dopo sono riuscito a farlo funzionare, ma in modo diverso. Ho smesso di scherzare con l'host e ho iniziato a imparare come Docker può salvarmi la vita.
Questo post mi ha dato la chiave:
Docker - Esegui Apache su host e container per diversi siti Web
La mia lettura iniciatica su docker è stata questa: PHP Web Development con Docker
Riassumendo, non ho bisogno di installare apache2.2 e PHP5.3 nel mio server host, posso avere un contenitore isolato dove posso installare tutto ciò di cui ho bisogno (di solito un servizio) e dimenticare possibili incompatibilità con la versione del sistema operativo host. Docker gestisce tutto. Quindi posso avere un container con apache 2.2 + PHP 5.3 come sarebbe in un sistema operativo debian squeeze. Un altro contenitore con Apache 2.2 + PHP 5.4 come sarebbe in un Wheezy, un altro con Apache 2.4 + PHP7.0 come in tratto e così via. Tutti lavorano contemporaneamente e servono domini diversi. Per ottenere quest'ultimo, apache / nginx sull'host funziona come proxy inverso reindirizzando ciascun dominio su un diverso contenitore apache-php grazie al mapping delle porte docker. Non hai nemmeno bisogno di avere apache / nginx sull'host, può anche essere in un contenitore.
La modalità docker consiste nell'avere ogni (micro) servizio in un contenitore, in modo da poter avere mariaDB in un altro contenitore, ecc.
I miei passaggi (riepilogativi): ( Non riesco a pubblicare altro che sui link, quando avrò abbastanza reputazione, li modificherò e li aggiungerò )
0 - Leggi sulla docker (meglio è): come costruire immagini con Dockerfile , best practice , networking all'interno della docker, ...
1 - Installa Docker: segui sempre la guida ufficiale .
2 - Crea una directory con il tuo futuro nome di immagine (/ home / user / docker / images / apache22php53 ad esempio), all'interno crea il tuo Dockerfile e le tue configurazioni (conf virtualhost in questo caso) il mio Dockerfile era:
FROM debian:squeeze
LABEL maintainer="raguchi@gmail.com"
# squeeze new mirrors
RUN echo "deb http://archive.debian.org/debian/ squeeze contrib main non-free" > /etc/apt/sources.list
RUN apt-get update
# Common packages
RUN apt-get update && \
apt-get install -y --force-yes curl wget
RUN apt-get update && \
apt-get install -y --force-yes \
apache2 \
libapache2-mod-php5 \
ntp \
php5 \
php5-curl \
php5-gd \
php5-ldap \
php5-mcrypt \
php5-mysql \
vim
RUN a2enmod \
php5 \
rewrite \
ssl
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
# RUN chown -R www-data:www-data /var/www
COPY conf/apache/virtualhosts /etc/apache2/sites-enabled
# disable default virtualhost
RUN a2dissite 000-default
EXPOSE 80
EXPOSE 443
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
All'interno della directory inserisci il tuo file di configurazione virtualhost nel percorso: conf / apache / virtualhosts /
3 - costruisci l'immagine con (cd precedente all'interno della directory):
sudo docker build -t apache22php53 .
4 - avviare il contenitore con:
sudo docker run -ti -d -p 2253:80 -v /var/www/html:/var/www --name apache22php53 apache22php53 /bin/bash
Docker mapperà (-p) la porta host 2253 su 80 porta container. Stiamo montando (-v) anche la radice del documento host (/ var / www / html) nella radice del documento apache-container (in squeeze è / var / www). Stanno anche impostando il nome del contenitore (--name).
5 - ssh nel contenitore con:
sudo docker exec -ti apache22php53 /bin/bash
e avvia apache se necessario (come nel mio caso). "esci" per tornare all'host cli.
6 - vai su ... yourvhostdomain.com:2253 e dovresti vedere il tuo apache in esecuzione con PHP5.3 caricato.
Questa è la base. Successivamente imparerai come montare i dati host (www, database, ecc.) All'interno dei contenitori, come i contenitori possono comunicare tra loro e con l'host (IP privati nella rete docker), come utilizzare la composizione docker per impostare più contenitori contemporaneamente (web, database, ecc.), proxy inverso per server Web a più contenitori, ecc.