Implantación de Docker en Aplicación NET CORE
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.
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.
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
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
Veremos en nuestro explorador Web que tenemos la imagen publicada en la url:
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
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
Visualizamos nuestro contenedor activo.
Comando: docker ps
Ahora vamos a conectarnos al Docker de MariaDB en línea de comandos.
Comando: docker exec -it mariadb mariadb -uroot -p
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;
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
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().
En appSetings.json cambiaremos el server de la cadena a la IP del contenedor.
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 .
Creamos el contenedor basado en la anterior imagen, estableciéndose en la misma red que MariaDB.
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.
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