Ir a Parte 4: https://naldog.blogspot.com/2019/10/docker-en-windows-parte-4-administrando.html
Ir a Parte 6: https://naldog.blogspot.com/2019/10/docker-en-windows-parte-6-dockerfile-y.html
Bueno partamos. La imagen oficial de Apache es esta https://hub.docker.com/_/httpd
Juguemos un poco. Escribe como siempre:
Si haces un
docker ps -a
Se verá que no está corriendo ya que está en modo Exited (0)
Haz un
docker stop <id>
Vamos de nuevo. Si leemos la documentación de Apache en Docker Hub, nunca dijo que el port es 8080, así que dejémoslo en 80. Para nosotros, afuera si es 8080.
docker rm <nombre>
Corrámoslo de nuevo y le damos un nombre
docker run -d -p 8080:80 --name php_apache <imagen>
Ahora si ves
docker ps -a
Verás la columna PORTS
0.0.0.0:8080->80/tcp
Bien. Y está Up 1 minute.
Si haz a tu navegador y ejecutas
http://localhost:8080
Verás un magnífico error de Apache. Si. levantó.
Dockerfile y build
Pasemos al siguiente nivel, creemos un dockerfile y metámosle un script php adentro del Contenedor.
Crea una carpeta en disco C llamada docker
adentro otra carpeta phpapp
Crea otra carpeta llamada src dentro de phpapp
Crea un archivo llamado dockerfile (sin extensión, usa un editor de texto) y déjalo en C:\docker\phpapp\
Dentro del dockerfile escribe y guarda el archivo
FROM php:7.2-apache
COPY src/ /var/www/html/
Dentro de src crea un archivo llamado index.php
primero detén y borra el contenedor php_apache ya que lo crearemos de nuevo.
Ve a la carpeta
cd c:\docker\phpapp
Creando la Imagen
Allí adentro ejecuta:
docker build -t php_app .
Saldrá mensaje de que estás armando una imagen a partir Windows y que debes tener ojo con los permisos.
Si haces docker images verás la nueva imagen tuya, pesa 400 MB y algo.
Creando contenedor
Ejecuta docker run para crear el contenedor a partir de la imagen:
docker run -d -p 8080:80 --name php_apache php_app
Si ves los contenedores verás que está corriendo ok
docker ps -a
Si vas a http://localhost:8080 verás la magia por fin.
Viendo Logs
Si escribes
docker logs <nombre contenedor>
Ejemplo
Ir a Parte 6: https://naldog.blogspot.com/2019/10/docker-en-windows-parte-6-dockerfile-y.html
______________________________
Bueno partamos. La imagen oficial de Apache es esta https://hub.docker.com/_/httpd
Juguemos un poco. Escribe como siempre:
docker run -it -p 8080:8080 httpd
Aquí tenemos algo raro, la salida es algo así:
AH00558: httpd: 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: httpd: 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
[Wed Oct 02 01:37:52.268432 2019] [mpm_event:notice] [pid 1:tid 140578472174720] AH00489: Apache/2.4.41 (Unix) configured -- resuming normal operations
[Wed Oct 02 01:37:52.268710 2019] [core:notice] [pid 1:tid 140578472174720] AH00094: Command line: 'httpd -D FOREGROUND'
[Wed Oct 02 01:37:52.557702 2019] [mpm_event:notice] [pid 1:tid 140578472174720] AH00492: caught SIGWINCH, shutting down gracefully
Y si vas al navegador y escribes http://localhost:8080/ da error ya que no levantó.
Esto está raro....
Esto está raro....
Volvamos a leer. En la página de Docker Hub indica que es la versión sin PHP. Pero si queremos HTTPD (Apache) con PHP dice que veas el sitio de PHP en Docker Hub en la sección con tags -apache. Entonces, vamos a la página de PHP: https://hub.docker.com/_/php y leamos bien.
Partamos deteniendo y borrando el contenedor e imagen
docker stop <nombre de contenedor>
docker rm <nombre de contenedor>
Eliminar imagen
docker rmi <id de imagen>
En la página de PHP sección tag -apache dice que si quieres PHP con Apache usa
php:<version>-apache
docker stop <nombre de contenedor>
docker rm <nombre de contenedor>
Eliminar imagen
docker rmi <id de imagen>
En la página de PHP sección tag -apache dice que si quieres PHP con Apache usa
php:<version>-apache
Entonces usa
docker run -it -p 8080:8080 php:7.2-apache
Luego dirá:
Status: Downloaded newer image for php:7.2-apache
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 10 01:28:23.004899 2019] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.38 (Debian) PHP/7.2.23 configured -- resuming normal operations
[Thu Oct 10 01:28:23.006068 2019] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
[Thu Oct 10 01:28:24.464910 2019] [mpm_prefork:notice] [pid 1] AH00170: caught SIGWINCH, shutting down gracefully
Mismo mensaje...
Si haces un
docker ps -a
Se verá que no está corriendo ya que está en modo Exited (0)
Haz un
docker stop <id>
Vamos de nuevo. Si leemos la documentación de Apache en Docker Hub, nunca dijo que el port es 8080, así que dejémoslo en 80. Para nosotros, afuera si es 8080.
docker rm <nombre>
Corrámoslo de nuevo y le damos un nombre
docker run -d -p 8080:80 --name php_apache <imagen>
Ahora si ves
docker ps -a
Verás la columna PORTS
0.0.0.0:8080->80/tcp
Bien. Y está Up 1 minute.
Si haz a tu navegador y ejecutas
http://localhost:8080
Verás un magnífico error de Apache. Si. levantó.
Dockerfile y build
Pasemos al siguiente nivel, creemos un dockerfile y metámosle un script php adentro del Contenedor.
Crea una carpeta en disco C llamada docker
adentro otra carpeta phpapp
Crea otra carpeta llamada src dentro de phpapp
Crea un archivo llamado dockerfile (sin extensión, usa un editor de texto) y déjalo en C:\docker\phpapp\
FROM php:7.2-apache
COPY src/ /var/www/html/
Dentro de src crea un archivo llamado index.php
<html>
<body>
<?php echo '<p>holaa</p>'; ?>
</body>
</html>
Ve por PowerShell primero detén y borra el contenedor php_apache ya que lo crearemos de nuevo.
Ve a la carpeta
cd c:\docker\phpapp
Creando la Imagen
Allí adentro ejecuta:
docker build -t php_app .
Saldrá mensaje de que estás armando una imagen a partir Windows y que debes tener ojo con los permisos.
Si haces docker images verás la nueva imagen tuya, pesa 400 MB y algo.
Creando contenedor
docker run -d -p 8080:80 --name php_apache php_app
Si ves los contenedores verás que está corriendo ok
docker ps -a
Si vas a http://localhost:8080 verás la magia por fin.
Viendo Logs
Si escribes
docker logs <nombre contenedor>
Ejemplo
docker logs php_apache
Verás el clásico log de apache, como los accesos, fecha hora, navegador, etc.
Verás el clásico log de apache, como los accesos, fecha hora, navegador, etc.
Error bizarro
Si al escribir
docker run -d -p 8081:80 --name php_apache php_app
Te da el error
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: driver failed programming external connectivity on endpoint php_apache (584c1135bb9806413f8d151751663752ce5e9fd1c3cae04421956bd01b5b8df3): Error starting userland proxy: /forwards/expose/port returned unexpected status: 500.
En todos lados dicen que se soluciona:
1. Reiniciando Docker (botón derecho sobre la ballenita)
2. Reiniciando el PC
3. Cambiando el port público a 8081
docker run -d -p 8081:80 --name php_apache php_app
En mi caso, no había caso, y solo la opción 3 me funcionó.
______________________________