Docker en desarrollo

Basta de instalar servicios

Motivación

Motivación

  • Cada vez que vamos a trabajar en un proyecto nuevo debemos configurar muchas cosas

  • Ejemplo: Servidor de base de datos

Proyecto nuevo

¿Qué DBMS usar?

  • ¿Queremos un MySQL 5.6?

 

  • ¿O quizá sería mejor usar la versión 8.0?

 

  • En realidad quisiera probar también con un servidor Postgres

 

  • ¿O acaso usar un SQL Server?

¿Qué haríamos normalmente en estos casos?

  • Probablemente instalemos las diferentes versiones de cada DBMS, configurando servicios y otras tantas herramientas que ni queríamos.

Docker facilita el aprovisionamiento

Docker facilita el aprovisionamiento

  • Si queremos un servidor de base de datos MySQL versión 5.6, ejecutamos el comando:

docker run mysql:5.6

  • Docker se encargará de descargar la imagen del Docker Hub y de ejecutarla para que tengamos la aplicación disponible en nuestro equipo.

Docker facilita el aprovisionamiento

  • La versión 5.6 no contaba con todas las funcionalidad que necesitamos, quizá la versión 8.0 si las tiene?

 

  • Fácil, ejecutamos docker run mysql:8.0 y al cabo de unos segundos tenemos un servidor MySQL versión 8.0 en nuestro equipo.

Contenedores, contenedores, contenedores

Contenedores, contenedores, contenedores

  • Al ejecutar el comando docker run mysql:5.6 estamos ejecutando una instancia (contenedor) de una “máquina virtual” que contiene lo necesario para ejecutar un servidor MySQL versión 5.6.

 

  • La ejecución de este contenedor ocurre de forma aislada del sistema operativo residente, y de otros contenedores que estén en ejecución.

Contenedores, contenedores, contenedores

  • Para comunicarnos con el DBMS que tenemos corriendo en el contenedor, necesitamos mapear el puerto interno (3306 por defecto en MySQL) con un puerto de nuestro equipo, a través del cual podremos comunicarnos con la bd.

docker run -p 3306:12345

 

Contenedores, contenedores, contenedores

  • Para listar los contenedores en ejecución, ejecutamos el comando docker ps, que nos mostrará algo como:

 

CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS                      PORTS               NAMES

6177b0109a59        postgres                       "docker-entrypoint..."   20 seconds ago      Up 19 seconds               5432/tcp            nervous_easley

090a0ced3076        mysql                          "docker-entrypoint..."   20 seconds ago      Up 50 seconds               3306/tcp            wizardly_hermann

d3dfb0e9e75a        microsoft/mssql-server-linux   "/bin/sh -c /opt/m..."   2 days ago          Up 3 hours                  1433/tcp            server_mssql_1

Contenedores, contenedores, contenedores

  • Para detener un contenedor en ejecución, ejecutamos el comando docker stop id, donde id del contenedor mostrado en docker ps.

 

  • El contenedor quedará detenido, y los logs que haya generado se podrán consultar con el comando docker logs id.

 

  • Un contenedor detenido NO puede volver a ejecutarse. Es necesario crear otra instancia.

¿Hay vida después de la finalización de un contenedor?

¿Hay vida después de la finalización de un contenedor?

  • Los contenedores “viven” mientras la aplicación este en ejecución, si la aplicación termina, el contenedor también, junto con los datos que fueron modificados en esta instancia.

     

  • ¿Cómo hacemos para persistir la información modificada por un contenedor?

¿Hay vida después de la finalización de un contenedor?

  • Si queremos persistir información debemos mapear un volumen.

  • Definimos una carpeta de adentro del contenedor (donde la aplicación persistirá los datos) y una fuera de este (en el sistema operativo residente).

  • De esta forma podemos detener nuestro servidor de bd y al reanudarlo seguiremos con los datos que habíamos modificado.

¿Hay vida después de la finalización de un contenedor?

  • Docker es muy útil cuando tenemos que trabajar en distintos proyectos que usan tecnologías diferentes y no queremos mantener una gran cantidad de servicios corriendo hasta el momento que tengamos que volver sobre cada proyecto.

Mas ejemplos de uso

Mas ejemplos de uso

  • Este es solo un ejemplo del uso de Docker en desarrollo, también puede ser usado para:

    • Desplegar nuestra aplicación en un ambiente controlado y definido

    • Facilitar la configuracion de un nuevo equipo (ya sea de un integrante del equipo o alguien nuevo)

    • Proveer un conjunto de servicios para el funcionamiento de un sistema, usando docker compose

Mas ejemplos de uso

  • Este es solo un ejemplo del uso de Docker en desarrollo, también puede ser usado para:

    • Escalar una aplicación entre varios servidores usando docker swarm

    • Ejecutar CI en un ambiente “de cero” y aislado

    • Asegurar que las versiones de las partes de un sistema son las mismas en los diferentes ambientes (desarrollo, staging, producción)

¿A dónde voy ahora?

¿A dónde voy ahora?

 

  • Docker Hub

    https://hub.docker.com/

    Repositorio principal de imagenes de Docker, a donde va a buscar la imagen `mysql:5.6` cuando queremos ejecutar un contenedor.

Docker en desarrollo

By Rodrigo Rivera

Docker en desarrollo

  • 359