Creación de Containers en Docker y su integración entre ellos

docker_facebook_share

Vamos a realizar como dice en el título la creación e integración de containers en Docker.

En este caso serán la creación de tres contenedores que se comunicarán entre ellos utilizando diferentes tecnologías (MySQL y MVC Core).

Pero primero, ¿Qué es Docker?

Todos hemos escuchado hablar, aunque sea de oídas, la palabra Docker o contenedor. Pues bien, la idea detrás de Docker es crear contenedores ligeros y portables para las aplicaciones software que puedan ejecutarse en cualquier máquina con Docker instalado, independientemente del sistema operativo que la máquina tenga por debajo, facilitando así también los despliegues.

Para que me entiendas es como imaginarte un barco de contenedores, pues cada contenedor del barco es una máquina de lo que quieras (Server Core, Oracle, MySql, etc.) y que se pueden integrar y comunicar entre ellas fácilmente, con el añadido de que lo puedes hacer correr en cualquier lado y sistema operativo.

Una vez aclarado más o menos lo que es Docker y para qué sirve, pasemos a la creación de contenedores.

Primero y más importante instalaremos Docker. En mi caso lo instale en Windows.

Lo podemos descargar de este link de la página oficial de Docker y una vez descargado lo instalaremos dando en siguiente – siguiente instalar ( ya sé que esto no es muy recomendable para las instalaciones pero en este caso no hay que configurar nada previamente a la instalación) y esperamos a que se instale. Una vez instalado nos pedirá deslogearnos le decimos que sí. Una vez iniciado de nuevo nos pedirá que habilitemos Windows-native Hyper-V virtualization and networking, le decimos que sí y se nos reiniciara el PC. Una vez se inicie de nuevo ya tendríamos listo Docker para su uso. Como último dato, nos pedirá una cuenta Docker con la manejar Docker y así poder subir tus contenedores a DockerHub para que lo vean otras personas.

Una vez seguido el paso anterior nos disponemos a crear nuestros contenedores, pero primero necesitamos crearnos nuestra red en Docker donde irán los contenedores para que se puedan comunicar entre ellos.

Con el comando docker network create nombre_de_la_red creamos la red.

1

En mi caso la he llamado mi-red y si nos aparecen esos números y letras es que se ha creado correctamente.

Ahora procederemos a la creación de la primera de los tres contenedores. El primer contenedor será el de MySQL.

2

Con el comando docker run –name nombre_del_contenedor –network nombre_red -e MYSQL_ROOT_PASSWORD=contraseña_root -d imagen_y_version_de_la_imagen creamos el contenedor de MySQL.

En mi caso llame a mi contenedor mysqldb, le he puesto el nombre de la red que hemos creado antes, de contraseña le he puesto de ROOT le he puesto mysql para así acceder fácilmente en esta práctica y por ultimo le puse la imagen y la versión a utilizar en mi caso es mysql versión 8 (mysql:8.0.0).

Si nos aparecen los números y las letras es que se ha creado correctamente, pero por si acaso ejecutamos el comando docker ps o si el contenedor no está corriendo docker ps –a

3

Ahora ejecutamos el contenedor para así poder configurar nuestra base de datos MySQL.

Con el comando docker exec -it nombre_contenedor contraseña_root -uroot -p lo ejecutamos.

4

Como veis una vez ejecutado el comando nos pide de nuevo la contraseña de root, una vez introducida nos da acceso a MySQL.

Una vez dentro crearemos una base de datos con una tabla e insertaremos unos datos para utilizarlo en la tabla.

5
6
7

Una vez realizado esto escribimos exit y salimos de MySQL. Y ya tendríamos listo el contenedor de MySQL.

Ahora ejecutamos el comando docker inspect nombre_red y así sabremos que contenedores tenemos en esa red y de ahí necesitaremos para la practica la IPv4Address para conectarlo con el core.

8

En este paso vamos a configurar el MVC Core. Nos vamos al Visual Studio y creamos un nuevo proyecto (tenemos dos formas, una empty que sería crear el controller, models, configurar starup, etc desde cero o la que utilizaremos en este caso en la que pone MVC que ya viene con ello creado así ahorramos tiempo). Una vez creado el proyecto nos vamos al archivo appsettings.json y escribimos la cadena de conexión y ahí es donde pone server donde ponemos la IP que cogimos antes para que pueda contactar con MySQL.

«ConnectionStrings»: {

    «cadenamysql»: «server=172.19.0.2;port=3306;user id=root;persistsecurityinfo=True;database=mysqldb;password=mysql»

2

Ahora nos vamos al archivo startup.cs al método ConfigureServices() para indicar que utilizaremos la inyección de MySQL. Y añadimos las siguientes líneas:

String cadenaconexionmysql = this.configuration.GetConnectionString(«cadenamysql»);

services.AddDbContext<ICochesContext, CochesContext>(options => options.UseMySql(cadenaconexionmysql));

services.AddTransient<IRepositoryCoches, RepositoryCoches>();

services.AddMvc();

1

Y por último creamos un archivo en el proyecto txt llamado DockerFile. Una vez creado le eliminamos la extensión txt y lo dejamos como archivo y te preguntaras ¿porque hace esto? Es por la sencilla razón de que Visual no deja crearlo por si solo por se hace esta ñapa. Ahí dentro escribimos el siguiente código (os pongo explicado que hace cada parte):

# Indica la imagen (Linux) sobre la que montará la App

FROM microsoft/dotnet:sdk AS build-env

# Indica el directorio de la máquina Linux para nuestra aplicación

WORKDIR /app 

# Copia el archivo CSPROJ con los NuGet relacionados que haya declarados

COPY *.csproj ./

# Utiliza el comando RESTORE para resolver los packages de los NuGet

RUN dotnet restore

# Copia todo lo demás y publica la aplicación como versión final (Release)

COPY . ./

RUN dotnet publish -c Release -o out 

# Construye la imagen basándose en la DLL de nuestra aplicación.

FROM microsoft/dotnet:aspnetcore-runtime

WORKDIR /app

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

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

3

El resto de las configuraciones como son configurar el controlador, vista, repositorios, etc. Queda a vuestro cargo que cada lo configure como más le guste.

Estando en el proyecto core le damos click encima y abrimos la carpeta donde esta instalado el proyecto y desde ahí abrimos un cmd de esa ruta.

Cuando se abra el terminal creamos una imagen de nuestro proyecto con el siguiente comando: docker buid -t nombre_proyecto:latest . y se creara nuestra imagen. Hay que esperar a que termine. Si te pone succesfully se habrá creado correctamente.

9
5

Al ya tener la imagen del proyecto creada podemos crear el contenedor.

Creamos el contenedor con este comando: docker run -p puerto_que_quieras:80 –network nombre_red –rm -d nombre_de_la_imagen:latest

2

En mi caso yo utilice el puerto 8005 y en el nombre de la imagen ponemos el nombre de la imagen que creamos antes.

Comprobamos que esta creada perfectamente y up con el comando docker ps.

7

Y con el comando docker network inspect nombre_red comprobamos que estén en la misma red y se puedan comunicar.

6

Una vez hemos comrobado que están en la misma red solo nos quedaría acceder mediante un buscador y la ruta localhost:puerto_utilizado. En el caso de la practica seria localhost:8005

4

Muchas gracias por seguir mi post. Os dejare el enlace a GitHub abajo.

Autor/a: Sergio Peña Lancha

Curso: Microsoft MCSA Web Applications + MCSD App Builder + Xamarin 

Centro: Tajamar 

Año académico: 2018-2019 

LinkedIn: https://www.linkedin.com/in/sergio-pe%C3%B1a-lancha-38147b145/

Código / recursos utilizados / Otros datos de interés: He utilizado Docker, cmd y Visual Studio.

DockerHub: https://hub.docker.com/r/sergto/contenedorescoremysql

GitHub: https://github.com/Sergto/contenedorescoremysql

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.