We.Developers 046 – Docker

En este episodio Diego y yo aprendemos un montón de cosas sobre Docker, con la inestimable ayuda de Javi Moreno, que nos cuenta desde los fundamentos UNIX de esta herramienta y el sistema de ficheros por capas que utiliza, a como crear contenedores a base de imagenes y hacer orquestación de contenedores con herramientas como Swarm, Apache Mesos o Kubernetes. También analizamos el impacto que ha tenido esta herramienta en el mundo del desarrollo, como simplifica la forma de trabajar de los equipos, facilita la integración continua de los proyectos y la puesta en producción rápida y ágil de cualquier proyecto. Hasta Windows Server se ha subido al carro de Docker!

Notas del Programa


Play
  • Diego

    Hola *WeDeveloperos*, soy un oyente bastante antiguo del podcast y aunque no soy nada activo en los mundos 2.0, me he decidido a escribiros para daros las gracias por los buenos ratos que he pasado ilustrándome con vosotros, y también para daros ánimos para seguir con el proyecto.
    ¡Aúpa con esa labor de entretenimiento y divulgación!.

    En cuanto a este capítulo, Docker es una tecnología “novedosa” (chroot+jail+enlaces duros y aplicación==inmutable jajaja) e interesante, en mi caso lo he usado de manera simple y solamente de cara a desarrollo, y aún así es impresionante ver como y con que velocidad monta y aprovisiona toda una infraestructura con un solo comando como `docker run micontenedor` o `docker-compose up`.

    En cuestiones de desarrollo hace muy cómodo usar una aplicación de manera “desentendida”, por ejemplo con Docker para levantar un sever RabbitMQ con el plugin de gestión web sería similar a lo siguiente:

    docker run -d –hostname rabbit3 –name rabbit3 rabbitmq:3-management -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE=’SOMTECOOKIEXTHERE’

    Alternativamente se puede usar `docker-compose`, simplemente se crea un archivo docker-compose.yml similar a esto según las necesidades:
    “`yaml
    # docker-compose.yml v2 for RabbitMQ Server
    version: “2″
    services:
    rabbit3:
    image: “rabbitmq:3-management”
    hostname: “rabbit3″
    environment:
    RABBITMQ_ERLANG_COOKIE: “SOMTECOOKIEXTHERE”
    RABBITMQ_DEFAULT_USER: “guest”
    RABBITMQ_DEFAULT_PASS: “guest”
    RABBITMQ_DEFAULT_VHOST: “/”
    ports:
    – “15672:15672″
    – “5672:5672″
    labels:
    NAME: “rabbitmq3″
    “`
    Y se crearía/levantaría con el comando `docker-compose up` desde el mismo directorio en el que se crea el archivo.
    Con cualquier opción, obtenemos un contenedor funcional, que expone los puertos indicados a la maquina host, y con la aplicación configurada mediante variables de entorno establecidas en el arranque de la “maquina” guest.

    Otra cuestión es el tema comentado del almacenamiento, que como Javi comenta hay controversia, personalmente creo que las opciones más cómodas de cara a desarrollo, es “montar” directamente un volumen (carpeta) del host en el contenedor, pero también existe la posibilidad de utilizar contenedores específicos de almacenamiento (storage containers).

    Yo estoy empezando a incorporarlo de manera habitual en mi flujo de trabajo, sin tener experiencia (más allá de pruebas con maquinas virtuales) en cuestiones como deploy o clústeres, y sin ni por asomo llegar al punto de aprovechamiento de la plataforma que Javi plantea, considero aún así a Docker una herramienta más que interesante con en la que tareas como estandarizar un entorno de desarrollo (y seguramente de producción y el posterior deploy), probar parches, actualizaciones y cambios en el código o incluso en la arquitectura (software, pues nos abstrae del hardware al igual que una máquina virtual), se convierten en comandos simples y que se ejecutan en segundos. Os recomiendo hojear cuestiones como la posibilidad de hacer “commit” al estilo Git/BTRFS/ZFS del estado del contenedor de tu aplicación, permitiendo hacer rollbacks totalmente transparentes durante el desarrollo.

    ¡Un saludo y de nuevo mucho ánimo!

    • Diego Freniche

      Wow! ¡Esto se merece su propio blog post! Gracias por compartirlo. Al final tendremos que usarlo y todo :-D