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
Instrucciones para instalar en su equipo, videos introductorios, etc
-
Docker Hub
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
- 374