Nos disponemos a realizar una aplicación MVC Core integrando Docker.  en este proyecto usaremos MariaDB como base de datos.

 Pero antes de comenzar, veamos brevemente qué es Docker.

¿Qué es Docker?

Docker es una herramienta diseñada para facilitar la creación, implementación y ejecución de aplicaciones mediante el uso de contenedores. Los contenedores permiten a un desarrollador empaquetar una aplicación con todas las partes que necesita, como librerías y otras dependencias, y enviarla como un paquete rápidamente.

ExplicacionDockerContainers

Como puede ver en el diagrama, todas y cada una de las aplicaciones se ejecutan en contenedores separados y tienen su propio conjunto de dependencias y librerías.

 Esto asegura que cada aplicación sea independiente de otras aplicaciones, lo que garantiza a los desarrolladores pueden crear aplicaciones que no interfieran entre sí.

En este punto, cualquier persona podría ejecutar el contenedor para replicar el entorno del desarrollador y lanzar la aplicación sin complicaciones.

Habiendo entendido como funciona Docker de una manera sencilla ,pasemos a realizar la aplicación.

En primer lugar debemos instalar Docker:

Puedes descargar Docker desde aquí https://hub.docker.com/editions/community/docker-ce-desktop-windows

Instala Docker con las configuraciones por defecto.

Una vez instalado nos pedirá habilitar Hyper-V (en “Activar o desactivar las características de Windows” encontrarás la opción de habilitarlo con un CheckBox y deberás reiniciar el equipo).

Para finalizar la instalación de Docker debemos crearnos una cuenta y loguearnos para poder manejarlo y subir nuestros contenedores a DockerHub.

Para empezar crearemos nuestro proyecto base en Visual Studio, habilitando Docker Support en el apartado de la derecha.

CreacionAplicacionBase

Podemos observar que nos ha creado un fichero Dockerfile

Pasamos a Crear Nuestro Contenedor:

Desde la consola CMD(“Símbolo del sistema”), ejecutaremos los siguientes comandos.

Entramos en la carpeta de nuestro proyecto donde se encuentre el archivo CSPROJ.

Comando: cd DIRECCION_CARPETA

AbrirCarpetacd

Podemos publicar una imagen de la aplicación para que la muestre como “temporal” en Docker. Pero dicha aplicación solamente tiene el ciclo de vida hasta que cerremos la línea de comandos. 

Comando: dotnet run

PublicarApp

Veremos en nuestro explorador Web que tenemos la imagen publicada en la url:

http://localhost:5000

Paramos nuestra aplicación en CMD con Control + C.

Para poder mantener una aplicación en estado de escucha, debemos utilizar nuestra aplicación en un contenedor, que utiliza MariaDB como base de datos. 

Para que los contenedores puedan comunicarse entre ellos deben encontrarse en la misma red, por lo que pasamos a crearnos una.

Comando: docker network create NOMBRE-RED

CreacionRed

Una vez creada la red, creamos el contenedor MariaDB que se encuentre dentro de esta red

Para crear el contenedor vamos a especificar varias cosas, la primera, especificaremos la clave de superusuario utilizando -e MYSQL_ROOT_PASSWORD=nuestra-pass; además le vamos a asignar un nombre utilizando –name mariadb.

Comando: docker run –name mariadb –network mi-red-maria -e MYSQL_ROOT_PASSWORD=mariadb -d mariadb:latest

CreacionContenedorMaria

Visualizamos nuestro contenedor activo.

Comando: docker ps

ComprobacionContenedorMaria

Ahora vamos a conectarnos al Docker de MariaDB en línea de comandos.

Comando: docker exec -it mariadb mariadb -uroot -p

ConexionServidorMaria

Creamos nuestra base de datos.

Comandos(Ejecutar por separado):CREATE SCHEMA `empresa` ;

use empresa;

create TABLE empleados

( empleado_id INT(11) NOT NULL,

  empleado_name VARCHAR(25) NOT NULL,

  empleado_salary INT(11),

  empleado_hiredate DATE,

CONSTRAINT Empleados_pk PRIMARY KEY (empleado_id));

insert into empleados values(1,»David»,10000,now()),(2,»Sara»,100,now()),(3,»Jonathan»,1700,now()),(4,»Nacho»,1850,now()),(5,»Benji»,9000,now());

commit;

select * from empleados;

CreacionBBDDMaria

Podemos salir de la consola de MariaDB con el comando Exit.

Comando: exit;

Para poder conectarnos a este container desde nuestra aplicación de Core, necesitamos saber la IP de nuestro servidor MariaDB.

Comando: docker network inspect mi-red-maria

IPServidor

Lo que nos interesa es saber la IP de nuestro container, en la imagen podemos visualizar que le ha asignado 172.19.0.2


Debemos añadir las siguientes líneas en la clase Startup.cs, en el metodo ConfigureServices().

useMysql

En appSetings.json cambiaremos el server de la cadena a la IP del contenedor.

IPVisual

Como observamos al crear la aplicación, se creó un archivo Dockerfile, el cual deberemos borrar.

Sobre el proyecto, agregamos un archivo Text file o Json llamado Dockerfile.

Quitamos la extensión al archivo Dockerfile y escribimos el siguiente código:

FROM microsoft/dotnet:sdk AS build-env

WORKDIR /app

COPY *.csproj ./

RUN dotnet restore

COPY . ./

RUN dotnet publish -c Release -o out

FROM microsoft/dotnet:aspnetcore-runtime

WORKDIR /app

COPY –from=build-env /app/out .

ENTRYPOINT [«dotnet», «ProyectoBase.dll»]

Este es el nombre que deberemos dar a la imagen de nuestra aplicación(el nombre se lo daremos en minúscula).

Comando: docker build -t proyectobase:latest . 

imagenApp

Creamos el contenedor basado en la anterior imagen, estableciéndose en la misma red que MariaDB.

contenedorBasado

Y ya podremos ejecutar nuestro explorador Web en la url localhost del puerto 8020 y visualizar si se comunica correctamente con otro container de Docker.

http://localhost:8020

Autor/a: David Alpañes Peláez
Curso: Microsoft MCSA Web Applications + Microsoft MCSD App Builder + Xamarin
Centro: Tajamar
Año académico: 2019-2020
Código / recursos utilizados / Otros datos de interés: Enlace a GitHub

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.