Hello humanOS!!! Hoy les voy a hablar sobre como facilitar y aumentar nuestra productividad y la de nuestros proyectos, no importa que seas estudiante, trabajador o director de centro si te gusta programar o estas en este mundo este artículo te será útil. En general voy a mencionar varias tecnologías que hace un tiempo vienen cambiando nuestro mundo, si no las conocen les sugiero que sigan estos enlaces Docker y Docker Compose. Trataré de que vean las ventajas que tiene el uso de #Docker en nuestro proceso de desarrollo de software por lo que este artículo estará dividido en 3 partes “Configuración de Entorno de Desarrollo”, “Desarrollo y Pruebas” y por último “Producción”, dicho esto comencemos.

Configuración de Entorno de Desarrollo

En cada ocación cuando nos enfrentamos a un proyecto lo primero que hacemos es configurar nuestro entorno de #desarrollo, esto con el fin de adecuarlo a las necesidades tecnológicas del producto a desarrollar. Como ejemplo tomaremos la creación de una app web en el #framework #php #Symfony, así que veamos como se hace en los dos estilos (tradicional y docker).

Estilo Tradicional:

No importa el SO lo primero será instalar y configurar #PHP y las librerías que utiliza el #framework, luego un servidor de Bases de Datos y por último un servidor Web. Ahora los cálculos, tomemos que el tiempo de instalación y configuración de las herramientas (TICH) mencionadas anteriormente es de 1 h y que el equipo de desarrollo es de 8 personas (P), como es de esperar todos los miembros del equipo tendrán que hacer pasar por el TICH así que el tiempo total (TT) será de:

TT = TICH * P = 1h * 8 = 8h  

Estilo Docker

Tenemos un TT de referencia de 8h veamos si lo podemos reducir. En este caso lo primero sera instalar y configurar #Docker y #Docker #Compose (ICD), luego crear una imagen con las librerías (CI) nesesarias para el interprete PHP y por último crear un archivo de configuración (CAC) para el Docker Compose con la imagen creada anteriormente, una imagen de base de datos y una con el servidor web. Para hacerlo más tangible les pondré unos ejemplos reales:

Crear Imagen #PHP con las librerías nesesarias para #Synfony:

1- Crear un Dockerfile

FROM php:7.1-fpm
MAINTAINER dev@chialab.it

# Install PHP extensions and PECL modules.
RUN buildDeps=" \
        libbz2-dev \
        libmemcached-dev \
        libmysqlclient-dev \
        libsasl2-dev \
        libldap2-dev \

       
    " \
    runtimeDeps=" \
        curl \
        git \
        libfreetype6-dev \
        libicu-dev \
        libjpeg-dev \
        libmcrypt-dev \
        libmemcachedutil2 \
        libpng12-dev \
        libpq-dev \
        libxml2-dev \
        php-soap \
    " \
    && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y $buildDeps $runtimeDeps \
    && docker-php-ext-install bz2 calendar iconv intl mbstring mcrypt mysqli opcache pdo_mysql pdo_pgsql pgsql zip \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install gd \
    && docker-php-ext-install soap\
    && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \
    && docker-php-ext-install ldap \
    && pecl install memcached redis \
    && docker-php-ext-enable memcached.so redis.so \
    && apt-get purge -y --auto-remove $buildDeps \
    && rm -r /var/lib/apt/lists/*

# Install Composer.
ENV COMPOSER_HOME /root/composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
ENV PATH $COMPOSER_HOME/vendor/bin:$PATH

2- Construir la imagen

docker build .

Crear un archivo de configuración para el Docker Compose

version: '2'

services:
    web:
        image: nginx:latest
        ports:
            - "80:80"
        links:
            - php:php
            - postgres:postgres
        volumes:
            - /home/SiteFolder:/var/www/html:rw
    php:
        image: php-fmp-custom:1.0
        links:
            - postgres2:postgres
        volumes:
            - /home/SiteFolder:/var/www/html:rw
    postgres:
        image: postgres:9.5
        ports:
            - "5432:5432"
        volumes:
            - /home/SiteFolder/DBData:/var/lib/postgresql/data
        environment:
            - POSTGRES_PASSWORD=postgres

Ahora los cálculos digamos que ICD toma un tiempo de 10 min,  CI consume 1h, CAC toma 30 min y con un equipo de igual cantidad de personas que en el caso anterior. La gran diferencia aquí está en que las personas del equipo solo tienen que hacer el ICD por lo que el tiempo total es:

TT = ICD * P + CI + CAC = 10 min * 8 + 1h + 30 min = 80 min + 60 min + 30 min = 170 min = 2.8 h

Comparemos

Usando el Estilo Tradicional tomará unas 8 horas preparar al equipo para que puedan comenzar a desarrollar mientras que en el Estilo Docker solo 2.8 horas. Además para finalizar veamos que ocurre cuando una nueva persona llega al equipo; En el estilo Tradicional necesitará 1 hora para que este lista mientras que en el Estilo Docker solo requiere de 10 minutos.

El próximo

Terminando, espero que esten pensando ya en #Docker pero si no esperen a ver las etapas de “Desarrollo y Prueba” y “Producción”. Espero sus opiniones en los comentarios y no se olviden de compartir el artículo.