/ HOWTO

Como poner en funcionamiento un Web Apache2 con PHP 7.0.


Como crear un contenedor con Apache 2.4 y PHP 7.0, subir contenido y automatizar el proceso.


El proceso es bastante sencillo, lo realizaremos paso a paso, nos servirá para ver todos los comandos que debemos hacer hasta lograr tener corriendo nuestro contenedor con un web PHP dentro.


Creamos las carpetas que usaremos para guardar todos los ficheros necesarios.

# mkdir webphp
# mkdir webphp/web

Luego generamos un fichero “DockerFile” que servirá para:

  1. Bajar una imágen Docker de internet
  2. Construir localmente una imágen con Linux+Apache+Php7
  3. Copiar lo que haya en nuestra carpeta real “web” dentro de la imágen nueva en la carpeta “/var/www/html”
  4. compartiremos el puerto 80
# cd webphp
# vi Dockerfile
FROM php:7.0-apache
COPY web /var/www/html
EXPOSE 80

Editamos una página PHP de ejemplo. En la realidad aqui deberíamos copiar el contenido real HTML.

# cd web
# vi index.php
<?php
echo "Hola mundo en español !";

Ahora generamos nuestra imágen local “imagen_web_php” usando el fichero “Dockerfile” recién creado.

# cd ..
# docker build -t imagen_web_php .

Verificamos las imágenes que tenemos en nuestro equipo real. En este caso 390 MB asignados.

# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
imagen_web_php          latest              916585f6e84d        12 minutes ago      390MB

Llegamos a la parte de armar nuestro contenedor y ponerlo en funcionamiento. Correrá en modo interactivo con lo que podremos ver los logs y compartirá el puerto WEB/HTTP(80). Usaremos nuestra imágen recién creada.

# docker run -it -p 80:80 imagen_web_php
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Thu Oct 26 13:33:48.637883 2017] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.10 (Debian) PHP/7.0.24 configured -- resuming normal operations
[Thu Oct 26 13:33:48.637914 2017] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'

Vemos algunos errores de Apache que nos indican que las variables de configuración del web no son correctas, el web está asociado al ip 172.16.0.2 puerto 80, aún sin nombre. También nos da información sobre las versiones, Apache 2.4.10 y PHP 7.0.24.


Podemos verificar su ID y que efectivamente está corriendo

# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
fcae16cb80b4        imagen_web_php      "docker-php-entryp..."   30 seconds ago      Up 29 seconds       80/tcp              eloquent_mayer

Y desde nuestro navegador con http://localhost podremos verificar el funcionamiento.

Hola mundo en español!

Veremos en la ventana del contenedor cada conexión al WEB:

172.17.0.1 - - [26/Oct/2017:14:31:53 +0000] "GET / HTTP/1.1" 200 253 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0"

Aunque sepamos que cada contenedor que correo usará el IP 172.17.0.2 en adelante, existe un comando para saber que IP fue asignado a este contenedor.


# docker inspect -f '{{ range .NetworkSettings.Networks }}{{ .IPAddress }}{{ end }}' 092d7808fec2


172.17.0.2

A partir de aqui podremos parar y arrancar ese contenedor.

# docker stop  fcae16cb80b4
# docker start fcae16cb80b4

Recordemos que cada contenedor creado no se borrará salvo que lo indiquemos.

# docker rm fcae16cb80b4

En este modelo de trabajo, cada ves que cambiemos el contenido del web local (archivos dentro de la carpeta /web), deberemos regenerar la imágen local, podemos ( o no ) eliminar los contenedores viejos y volver a crear/correr el contenedor.

Agregar contenido a la carpeta “web” y rearmar todo.

# docker rmi imagen_web_php --force
# docker rm  fcae16cb80b4
# docker build -t imagen_web_php .
# docker run -it -p 80:80 imagen_web_php

Veremos que hay varias maneras de automatizar este proceso, quizás lo mas sencillo es escribir un script en bash:

# vi todo.sh

#!/bin/bash
docker rmi imagen_web_php --force
docker build -t imagen_web_php .
docker run -it -p 80:80 imagen_web_php

Subscríbete y recibirás los últimos artículos semanalmente en tu email.