Aprovecha el precio especial

Antes:$249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Comienza ahora

Termina en:

22h

33m

53s

9

👩‍💻Entorno de trabajo para Symfony usando Docker🐘🐳

Royer
R0Y3R
39869

Cuando llego el momento de preparar mi entorno para ensuciarme las manos con el código Mauro empezó a usar Homestead pero yo prefería virtualizar mi entorno de trabajo con Docker y supongo que muchos de ustedes también lo querrán hacer por eso decidí realizar este tutorial, espero que este tutorial los ayude

Requisitos

El único requisito es que sepas lo básico de Docker y que lo tengas instalado, si aún no sabes de Docker y los infinitos beneficios que puedes obtener al usarlo te recomiendo que tomes el curso de fundamentos de Docker

Archivos y directorios

Lo único que necesitas es replicar este sistema de archivos en la carpeta en la cual ejecutes tu servidor
Image 3.png

docker-compose.yml

En este archivo colocaremos la configuración necesaria para construir nuestros “Servicios”, empecemos con el servidor en este caso yo voy a usar nginx

version:'3'
services:    nginx:        build:            context: .
            dockerfile: Dockerfile-nginx
        volumes:
            - ./symfony/:/var/www/symfony/        ports:
            - 8001:80        networks:
            - symfony
networks:    symfony:

Adicionalmente colocaré una red llamada symfony para poder conectar los diferentes contenedores entre si, a continuación debemos añadir el servicio php

version: '3'

services:
    nginx:
        build:
            context: .
            dockerfile: Dockerfile-nginx
        volumes:
            - ./symfony/:/var/www/symfony/        ports:
            -8001:80        networks:
            - symfony
    php:
        build:
            context: .
            dockerfile: Dockerfile-php
        environment:
            APP_ENV: dev
        volumes:
            - ./symfony/:/var/www/symfony/        networks:
            - symfony
        depends_on:
            - mysql
networks:
    symfony:

Por último necesitaremos una base de datos yo usaré MySQL, el código que necesitamos es…

version: '3'

services:
    nginx:
        build:
            context: .
            dockerfile: Dockerfile-nginx
        volumes:
            - ./symfony/:/var/www/symfony/        ports:
            -8001:80        networks:
            - symfony
    php:
        build:
            context: .
            dockerfile: Dockerfile-php
        environment:
            APP_ENV: dev
        volumes:
            - ./symfony/:/var/www/symfony/        networks:
            - symfony
        depends_on:
            - mysql
    mysql:
        image: mysql
        command: ['--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci','--default-authentication-plugin=mysql_native_password']
        ports:
            -3306:3306        volumes:
            - ./mysql:/var/lib/mysql
        networks:
            - symfony
networks:
    symfony:

✨Listo?

No aún no esta, si estuviste atento a lo que muy probablemente solo copiaste y pegaste añadimos un contexto para la construcción y configuración para las imágenes de php y nginx

Dockerfile-php

FROM php:fpm-stretch

RUNapt-get update && apt-get install -y
RUNapt-get update && apt-get install -y \
        git \
        zlib1g-dev \
        libxml2-dev \
        libzip-dev \
    && docker-php-ext-install \
        zip \
        intl \
		mysqli \
        pdo pdo_mysql
RUNcurl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer
COPYsymfony/ /var/www/symfony
WORKDIR/var/www/symfony/

Lo que hacemos es usar una imagen de docker hub e instalamos un par de herramientas como composer que es un manejador de dependencias para php

Dockerfile-ngnix

FROM nginx:latest
COPY./build/nginx/default.conf /etc/nginx/conf.d/

Adicional a esto necesitamos la configuración de server

default.conf

server {
    listen 80;
    root /var/www/symfony/public;

    location / {
        try_files $uri /index.php$is_args$args;
    }

    location ~ ^/index\.php(/|$) {
        # Connect to the Docker service using fpm
        fastcgi_pass php:9000;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        internal;
    }
    location ~ \.php$ {
        return 404;
    }

    error_log /dev/stdout info;
    access_log /var/log/nginx/project_access.log;
}

Levantar los servicios

Desde la terminal ejecuta el comando dentó de la ruta …/symfony-docker/

docker-compose up -d --build

Esto construirá y creará los contenedores que puedes ver usando docker-compose ps

Instalación de Sympony

Ahora llego lo bueno, debemos entrar al contenedor de php que creamos usando

docker-compose exec php bash

Luego debemos configurar git porque si no la creación del proyecto puede fallar, cosas raras de composer

Ejecutamos en la consola del contenedor php, remplazando lógicamente por nuestros datos

git config --global user.name"John Doe"
git config --global user.email johndoe@example.com

y luego si podemos usar

composer create-project symfony/website-skeleton .

y si vas a 127.0.0.1:8001 debes ver algo así
Image 4.png

No olvides que puedes cambiar los puertos por si usas xampp o algo asi para trabajar en local, todo está en el archivo docker-compose.yml

Escribe tu comentario
+ 2
Ordenar por:
5
27811Puntos
5 años

Algunas recomendaciones sobre entornos usando docker:

  • Siempre que sea posible trata que tu imagen se base en el contenedor de php que usa alpine, es mucho más pequeño.
  • Instala todas tus dependencias cuando construyes tu imagen
  • Copia el proyecto dentro del contenedor
  • Por defecto crea la imagen con los parámetros de producción, la idea es que tu imagen sea inmutable y que el mismo contenedor se ejecute en todos los entornos. Define los ajustes de desarrollo en docker-compose y usa volumenes para montar el proyecto local.

Si te interesa ir a más en estos temas déjame un mensaje para así hacer algunos tutoriales con los temas que más le interesen.

Saludos

4
2821Puntos
5 años

Hola me interesa bastante los pasos que indicas, seria re bueno que hicieras un tutorial. : )

2
39869Puntos
5 años

@mauricioacrueda no soy experto de docker ni mucho menos pero talvez docker no permite el absolute path usa el path relativo

1
31851Puntos
5 años

@ElliotAlderson intente con el path relativo y absoluto, pero no funciono.
Pero tengo otra duda , porque envias ese COPY , si terminas creando un volumen para esa ruta ?

Elimine estas lineas :

COPY symfony/ /var/www/symfony
WORKDIR /var/www/symfony/

Y veo que la imagen sigue funcionando.

Muchas gracias por la respuesta.

1
3454Puntos
3 años

Buenasss … una pregunta , debe ser Dockerfile-php.dockerfile ? o como ?

1
31851Puntos
5 años

Excelente tutorial , me queda una duda con esta linea

Dockerfile-php

COPY symfony/ /var/www/symfony

No lo puedo manejar en una carpeta diferente al Dockerfile la cuestion es que tengo mis proyecto en ~/WWW

COPY ~/WWW/symfony/ /var/www/symfony

pero me genera error , como podria manejar este tema , si la carpeta no esta en la raiz de dockfile.

Error:
“Service ‘php’ COPY failed: no such file or directory”

Adicional , porque se debe copiar toda la carpeta de symfony en la imagen de PHP ?

muchas gracias