Desarrollo de aplicaciones con Docker

Miguel Angel Gordián

@ilcapitanozoek

¿Qué es Docker?

¿Por qué usar Docker?

Herramientas disponibles

¿Dónde lo puedo usar?

Docker en el Desarrollo

¿Qué es Docker?

Es una plataforma para el desarrollo, administración y ejecución de contenedores.

¿Por qué usar Docker?

Portabilidad

Aislamiento

Control de versiones

Velocidad en deployment de aplicaciones

Simplifica el mantenimiento

Ligero

Herramientas Disponibles

Docker Engine

Docker Compose

Docker Machine

Swarm

Donde lo puedo usar

Docker en el desarrollo

Ajusta tu flujo a Docker

Definen el stack de tecnologías a emplear.

Granulariza y aisla cada componente

Define el flujo del sistema (toma en cuenta tus políticas)

Desarrolla y haz testing en el contenedor

Cada componente tiene su Dockerfile *

Integra con compose

version: '2'

services:
  tu_evaluas:
    build: .
    ports:
      - "80:80"
      - "443:443"
    links:
      - mariadb:mariadb_server
    volumes:
      - ./docker/env:/var/www/laravel/.env
    environment:
      - APP_LOG=errorlog 
    depends_on:
      - mariadb
    networks:
      - database

  mariadb:
    image: mariadb
    volumes:
      - records:/var/lib/mysql
    networks:
      database:
          aliases:
            - mariadb
            - db

networks:
  database:

volumes:
  records: {}

https://github.com/GobiernoFacil/tu-evaluas

FROM eboraas/laravel 
MAINTAINER  Miguel Angel Gordian <miguel.angel@kaltia.org>

RUN apt-get update && \
    apt-get -y install php5-mysql wget

COPY . /var/www/laravel/
COPY docker/00* /etc/apache2/sites-enabled/

WORKDIR /var/www/laravel

RUN composer install && \
    chown -R www-data:www-data bootstrap storage && \
    ln -sf /dev/stdout /var/log/apache2/access.log && \
    ln -sf /dev/stderr /var/log/apache2/error.log

https://github.com/GobiernoFacil/tu-evaluas

Desarrollo existente o finalizado

Explora y define los componentes en compose

Usa un contenedor vacío y ve explorando el sistema existente.

Después de lograr el comportamiento esperado escribe en el Dockerfile

Puedes usar un sistema con un manejador de procesos en caso de monolitos pero sera doble trabajo.

Recomendaciones

Monta tu directorio de trabajo en el directorio de la aplicación en el contenedor.

Provee al desarrollador de una forma de emular el stack de producción y pruebas.

Usa variables de entorno para cambiar el comportamiento

Usa compose como herramienta primaria, ayudará a recrear ambientes y facilita el desarrollo.

No uses manejador de procesos

Dockerfile por ambiente

Recomendaciones

Si te tardas más de 30 segundos en levantar un nuevo contenedor algo estas haciendo mal

Considera el soporte y la estructura de las imagenes a usar desde el hub de Docker

Las dependencias solo se instalan cuando se (re)?crea la imagen.

No agregues ni modifiques código en el contenedor, todo va en el Dockerfile.

Recomendaciones

En el ambiente de desarrollo prefiere reiniciar el contenedor a recrear.

Utiliza un contenedor nuevo basado en la imagen que creaste para explorar y probar.

En producción siempre recrea los contenedores.

Usa volumenes para persistir y compartir datos

Usa distintas redes para aislar tus componentes.

Questions and feedback

Slides

 http://speakerdeck.com/zoek1/desarrollo-con-docker

 

Contacto

@ilcapitanozoek

Desarrollo de aplicaciones con Docker

By Miguel Angel Gordian

Desarrollo de aplicaciones con Docker

Explora rapidamente las herramientas y algunos modelos para integrar docker a tus desarrollos.

  • 950