Desarrollo en php utilizando docker composer slimframework

Enviado por Francisco Carrizales el Jue, 12/10/2017 - 21:01

Requisitos:

  • Tener instalado docker
  • Tener disponible docker-composer
  • Saber utilizar composer

 

Integrar Docker para desarrollar en php

En la entrada anterior vimos el hola mundo utilizando docker y php y una pequeña probada del poder docker.  En esta publicación abordaremos el tema de instalar extensiones  y como utilizar composer.

Para iniciar vamos a organizar nuestro espacio de trabajo al siguiente:

docker php nueva estructura directorios

 

Donde el directorio "server" se utiliza como el espacio de trabajo para el contenedor de apache/php  este directorio contiene el composer.json  y a su vez un directorio public donde colocaremos nuestro punto de entrada (index.php) que llamara al autoload.php.

También hay que cambiar un poco nuestro Dockerfile para agregar las extensiones e instalar composer

 

FROM php:5.6-apache
RUN apt-get update && apt-get install git libicu-dev  g++ zlib1g-dev libmcrypt-dev -y 
RUN docker-php-source extract
RUN docker-php-ext-install zip mcrypt
RUN a2enmod rewrite
RUN service apache2 restart 


COPY ./server/public/ /var/www/html/
COPY ./server/composer.json /var/www/

RUN usermod -u 1000 www-data
RUN chown -R www-data:www-data /var/www/

RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php --filename=composer --install-dir=/usr/local/bin
RUN php -r "unlink('composer-setup.php');"
RUN cd /var/www/ && composer install

Donde:

  • La primer linea no cambia,  que indica cual repositorio vamos a utilizar
  • Para poder instalar ciertas extensiones es necesario instalar algunas librerias para compilarlas para eso es la segunda linea.
  • El paquete al que hacemos referencia en la primer linea ya cuenta con algunas extensiones "empaquetadas" para facilitar habilitar ciertos modulos
  • Este contendor cuenta con un comando para instalar extenciones "docker-php-ext-install <nombre_ext>" en nuestro ejemplo instalamos zip y mcrypt
  • La siguiente linea activamos el modrewrite que en la mayoria de los casos es obligatoria
  • Reiniciamos el servicor apache
  • Copiamos el directorio public a /var/www/html
  • Copiamos nuestros composer.json a /var/www/  por lo tanto estaremos instalando el vendor en /var/www/vendor
  • Las ultimas lineas son cambios de permisos e instalación de composer tal como indica la documentación

 

Hay que actualizar ademas el  docker-compose.yml para crear el volumen y montar el public en www/html

version: '2'
services:
  server:
    build: .
    ports:
     - "8080:80"
    volumes:
     - ./server/public:/var/www/html/

Donde:

  • El único cambio es la última linea que cambia el directorio a montar en el contenedor.

 

Creamos el composer.json en /server/composer.json con la siguiente contenido. para este primer ejemplo utilizaremos Slim

{

	"require": {
		"slim/slim": "^3.0"
	}
}

 

Ya para finalizar nuestra nueva estructura editamos el index.php

<?php

require_once '../vendor/autoload.php';

$app = new \Slim\App();

$app->get('/', function ($request, $response, $args) {
    return $response->withStatus(200)->write('Hello World!');
});

$app->get('/hello/{name}', function ( $request,  $response) {
    $name = $request->getAttribute('name');
    $response->getBody()->write("Hello, $name");

    return $response;
});

$app->run();

?>

Donde:

  • Solo puedo resaltar la ubicación  del autoload.php en la primer linea del resto es el hello World de Slim Framework

 

Casi olvido el .htacces 

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]

 

Con toda esta estructura ya puedo  construir el contendor y el servicio.

docker-compose build

 

docker-compose up

 

Y listo podemos abrir el navegador  http://localhost:8080/   

 

docker php slimframework

Y la segunda url  http://localhost:8080/hello/fcarrizalest

docker php slimframework hol mundo

 

Repositorio:

https://github.com/fcarrizalest/docker-php-ejemplo

Añadir nuevo comentario

HTML Restringido

  • Etiquetas HTML permitidas: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Saltos automáticos de líneas y de párrafos.
  • Las direcciones de correos electrónicos y páginas web se convierten en enlaces automáticamente.