<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article
  PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.1 20151215//EN" "https://jats.nlm.nih.gov/publishing/1.1/JATS-journalpublishing1.dtd">
<article article-type="research-article" dtd-version="1.1" specific-use="sps-1.8" xml:lang="es" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink">
	<front>
		<journal-meta>
			<journal-id journal-id-type="publisher-id">ingeniare</journal-id>
			<journal-title-group>
				<journal-title>Ingeniare</journal-title>
				<abbrev-journal-title abbrev-type="publisher">Ingeniare</abbrev-journal-title>
			</journal-title-group>
			<issn publication-format="print">1909-2458</issn>
            <issn publication-format="electronic">2390-0504</issn>
			<publisher>
				<publisher-name>Universidad Libre</publisher-name>
			</publisher>
		</journal-meta>
		<article-meta>
			<article-id pub-id-type="doi">10.18041/1909-2458/ingeniare.29.7432</article-id>
			<article-categories>
				<subj-group subj-group-type="heading">
					<subject>Artículos</subject>
				</subj-group>
			</article-categories>
			<title-group>
				<article-title>Extensión de la arquitectura Docker para el despliegue automático de contenedores</article-title>
				<trans-title-group xml:lang="en">
					<trans-title>Extension of the Docker architecture for automatic container deployment</trans-title>
				</trans-title-group>
			</title-group>
            <contrib-group>
				<contrib contrib-type="author" corresp="yes">
					<name>
						<surname>Gutiérrez López</surname>
						<given-names>Luz Elena</given-names>
					</name>                    
                    <email>egluz@uninorte.edu.co</email>
                    <xref ref-type="aff" rid="aff1"><sup>1</sup></xref>
				</contrib>
				<contrib contrib-type="author" corresp="yes">
                    <name>
						<surname>Guerrero Alarcón</surname>
						<given-names>Carlos Andrés</given-names>
					</name>
                    <email>carlos.guerrero@usantoto.edu.co</email>
                    <xref ref-type="aff" rid="aff2"><sup>2</sup></xref>
				</contrib>
			</contrib-group>
            <aff id="aff1">
                <label>1</label>
                <institution content-type="original">Magíster en Ingeniería Área Informática y Ciencias de la Computación, Ingeniera de Sistemas. Universidad del Norte, Colombia</institution>
                <institution content-type="normalized">Magíster en Ingeniería Área Informática y Ciencias de la Computación, Ingeniera de Sistemas. Universidad del Norte, Colombia</institution>
                <institution content-type="orgname">Magíster en Ingeniería Área Informática y Ciencias de la Computación, Ingeniera de Sistemas. Universidad del Norte, Colombia</institution>
                <addr-line>
                    <city>Bogotá</city>
                </addr-line>
                <country country="CO">Colombia</country>
            </aff>
            <aff id="aff2">
                <label>2</label>
                <institution content-type="original">Ph. D. en Ingeniería, Magíster en Informática, Ingeniero de Sistemas. Universidad Santo Tomás, Colombia</institution>
                <institution content-type="normalized">Ph. D. en Ingeniería, Magíster en Informática, Ingeniero de Sistemas. Universidad Santo Tomás, Colombia</institution>
                <institution content-type="orgname">Ph. D. en Ingeniería, Magíster en Informática, Ingeniero de Sistemas. Universidad Santo Tomás, Colombia</institution>
                <addr-line>
                    <city>Bogotá</city>
				</addr-line>
                <country country="CO">Colombia</country>
            </aff>
			<pub-date pub-type="collection">
				<season>Jul-Dec</season>
				<year>2020</year>
			</pub-date>
			<issue>29</issue>
			<fpage>11</fpage>
			<lpage>26</lpage>
			<history>
				<date date-type="received">
					<day>05</day>
					<month>01</month>
					<year>2020</year>
				</date>
				<date date-type="accepted">
					<day>25</day>
					<month>03</month>
					<year>2020</year>
				</date>
			</history>
			<permissions>
				<license license-type="open-access" xlink:href="https://creativecommons.org/licenses/by-nc-sa/4.0/" xml:lang="es">
					<license-p>Esta obra está bajo una licencia internacional Creative Commons Atribución-NoComercial-CompartirIgual 4.0.</license-p>
				</license>
			</permissions>
			<abstract>
			<title>RESUMEN</title>
				<p>Los contenedores se han convertido es una estrategia ideal para acelerar el proceso de desarrollo de plataformas. Su importancia radica en la capacidad que tienen de separar una aplicación e interactuar con sus partes sin que la totalidad de la aplicación tenga que ser afectada. Los contenedores pueden compartir procesos entre varias aplicaciones, de manera muy similar al esquema propuesto por la arquitectura orientada a servicios. El objetivo de esta investigación fue definir una arquitectura para el despliegue automático de contenedores en contextos académicos; la verificación y validación de la arquitectura se realizó mediante la construcción de una plataforma que adapta los conceptos de la arquitectura y permite visualizar nivel a nivel cada uno de sus componentes. Se realizó un análisis bibliográfico sobre las arquitecturas propuestas para la gestión de contenedores, con lo cual se evidenciaron fortalezas y debilidades. El resultado directo de esta investigación fue la propuesta arquitectónica para el despliegue de contenedores como una extensión de Docker. El resultado indirecto fue la plataforma web con miras a la verificación y la validación de la arquitectura.</p>
			</abstract>
			<trans-abstract xml:lang="en">
			<title>ABSTRACT</title>
			    <p>Containers have become an ideal strategy to speed up the platform development process. The importance of containers is the ability they must separate an application and interact with its parts, without the entire application having to be affected. Containers can share processes between multiple applications, using the same strategy used by service-oriented architecture. The aim this paper is to present a novel architecture for the automatic deployment of containers in academic contexts. The verification and validation of the architecture was carried out through the construction of a platform that adapts the concepts of the architecture and allows to visualize each of its components level by level. In this study, a bibliographic analysis was carried out on the architectures that manage containers, showing strengths and weaknesses. The principal result of this research was the proposal of novel architecture for the deployment of containers as extension of Docker. The secondary result was the development of a web platform, this platform allows to present all characteristics of the novel approach. It was used for the verification and validation of the architecture.</p>
			</trans-abstract>
            <kwd-group xml:lang="es">
			    <title>Palabras clave</title>
				<kwd>A dministración web</kwd>
                <kwd>Contenedor</kwd>
                <kwd>Desarrollo de software</kwd>
                <kwd>Docker</kwd>
			</kwd-group>
			<kwd-group xml:lang="en">
				<title>Keywords</title>
				<kwd>Web management</kwd>
                <kwd>Container</kwd>
                <kwd>Software development</kwd>
                <kwd>Docker</kwd>
			</kwd-group>
            <counts>
				<fig-count count="12"/>
				<table-count count="2"/>
				<equation-count count="0"/>
				<ref-count count="30"/>
				<page-count count="15"/>
			</counts>
		</article-meta>
	</front>
	<body>
		<sec sec-type="intro">
		    <title>1. Introduction</title>
            <p>El diseño y la programación de algoritmos definen las bases y las competencias que debe adquirir un ingeniero de desarrollo, por tanto, los cursos de programación son de vital importancia en el proceso de formación [<xref  ref-type="bibr" rid="r1">1</xref>]. Las habilidades en programación que un estudiante adquiere en su proceso de formación están calificadas como las competencias requeridas en el siglo XXI [<xref  ref-type="bibr" rid="r2">2</xref>], lo que realza la importancia de aplicar un proceso de enseñanza aprendizaje que asegure la adquisición de competencias en el área de programación.</p>
            <p>Facilitar la enseñanza de la programación es una actividad que no solo requiere conocimiento técnico por parte del docente, sino habilidades para motivar a los estudiantes a superar los obstáculos que se presenten en su formación [<xref  ref-type="bibr" rid="r3">3</xref>]. Un estudiante frustrado, probablemente, incrementará las estadísticas de deserción [<xref  ref-type="bibr" rid="r1">1</xref>].</p>
            <p>El proceso de formación de un desarrollador de software requiere de tiempo y dedicación, y existen múltiples problemáticas que inciden en el éxito o el fracaso [<xref  ref-type="bibr" rid="r4">4</xref>]. Entre estas problemáticas se encuentran la formación y la experticia del docente, los conocimientos previos que debe tener el estudiante, así como los recursos tecnológicos a los que tiene acceso el desarrollador, entre otros [<xref  ref-type="bibr" rid="r5">5</xref>].</p>
            <p>En [<xref  ref-type="bibr" rid="r6">6</xref>]critical thinking and collaboration or recognized as Higher Order Thinking Skills (HOTS se plantea que los procesos actuales de enseñanza son ineficientes, lo cual crea en el estudiante una resistencia que, eventualmente, se transformará en miedo a la programación [<xref  ref-type="bibr" rid="r7">7</xref>], [<xref  ref-type="bibr" rid="r8">8</xref>]. Existe evidencia de trabajos —como, por ejemplo, [<xref  ref-type="bibr" rid="r9">9</xref>]— en los que utilizan otras estrategias para enseñar programación (p. ej., el caso de los videojuegos).</p>
            <p>Este documento presenta una arquitectura soportada en Docker [<xref  ref-type="bibr" rid="r10">10</xref>] [<xref  ref-type="bibr" rid="r11">11</xref>] para el despliegue automático de contenedores en procesos de desarrollo software orientados a la web. El enfoque de este proyecto busca proporcionar herramientas que permitan emplear estrategias diferentes dirigidas a que el estudiante en formación del área de sistemas esté en capacidad de construir aplicaciones.</p>
            <p>El artículo está organizado de la siguiente forma: inicia con una revisión de literatura acerca de arquitecturas para el despliegue de contenedores, posteriormente, presenta la arquitectura utilizada como línea de base en la presente investigación. Continua con la descripción de la arquitectura propuesta para el despliegue automático de contenedores en contextos académicos. Finaliza con el planteamiento de las limitaciones de la presente investigación y las conclusiones del estudio.</p>
        </sec>
        <sec>
            <title>2. Revisión de literatura</title>
            <p>La <xref  ref-type="table" rid="t1">Tabla 1</xref> presenta una descripción de arquitecturas para la gestión de contenedores y su comparación con la propuesta de arquitectura de este artículo.</p>
            <p>
                <table-wrap id="t1">
                    <label>Tabla 1</label>
                    <caption>
                        <title>Comparación de estudios</title>
                    </caption>
                    <graphic xlink:href="art7432_t1.png" />
                </table-wrap>
            </p>
        </sec>
        <sec>
            <title>3. Arquitectura de referencia</title>
            <p>El desarrollo de aplicaciones robustas es un requerimiento fundamental en la industria del software [<xref  ref-type="bibr" rid="r14">14</xref>] geographically distributed development teams, new business models and diverse cultural interactions steer these tools. Software development supported by web-based services, built on top of Web 2.0 technologies, is emerging as a new paradigm for distributed software development. New generation software forges (web-based development environments. Una buena práctica para el desarrollo de software es planear y realizar seguimiento a cada fase del ciclo de vida del aplicativo. Por tal motivo, es importante el uso de herramientas que apoyen la producción y la puesta en marcha del software. La arquitectura de referencia utilizada en esta investigación fue Docker [<xref  ref-type="bibr" rid="r10">10</xref>] Docker agiliza la configuración de los equipos de desarrollo, de modo que permite la virtualización de un servidor en muchos espacios aislados de trabajo y compartir recursos en una máquina anfitriona. Adicionalmente, Docker permite encapsular entornos y aplicaciones que, posteriormente, pueden ser utilizadas en otros espacios de trabajo, lo que facilita el uso y la configuración de las herramientas.</p>
            <p>La arquitectura cliente servidor de Docker se presenta en la <xref  ref-type="fig" rid="f1">Figura 1</xref>. La capa cliente puede ejecutar instrucciones directamente sobre el anfitrión de Docker para descargar y desplegar imágenes y contenedores. En el Docker Host existe un Docker Daemon; este se encarga de controlar las imágenes y los contenedores que un cliente puede generar [<xref  ref-type="bibr" rid="r15">15</xref>]. Toda la comunicación entre cliente y servidor se realiza a través de sockets utilizando un API de tipo Restfull [<xref  ref-type="bibr" rid="r11">11</xref>].</p>
            <p>
                <fig id="f1">
                    <label>Figura 1</label>
                    <caption>
                        <title>Arquitectura Docker</title>
                    </caption>
                    <graphic xlink:href="art7432_f1.png" />
                </fig>
            </p>
            <p>El Docker Daemon controla las imágenes a través del Docker registry, el cual es el encargado de organizar y publicar las imágenes que un usuario puede llegar a utilizar. Cada contenedor se crea a partir de una imagen y es un entorno aislado y seguro en el que se ejecuta la aplicación [<xref  ref-type="bibr" rid="r17">17</xref>].</p>
            <p>Docker administra espacios de nombres, dispositivos de red, cortafuegos y, en general, los recursos del sistema operativo a través de libcontainer. La administración de los contenedores se realiza al dar cumplimiento al estándar Open Container Initiative-OCI [<xref  ref-type="bibr" rid="r18">18</xref>], [<xref  ref-type="bibr" rid="r19">19</xref>].</p>
            <p>El despliegue de la arquitectura de Docker se puede realizar sobre un servidor Linux o sobre hipervisores tipo I y II. Los hipervisores tipo I son aquellos que se utilizan a través de hardware, y se caracterizan por ser rápidos y costosos. Los hipervisores tipo II no son tan rápidos como los hipervisores tipo I, sin embargo, son económicos e, incluso, algunos se pueden utilizar de forma gratuita [<xref  ref-type="bibr" rid="r20">20</xref>].</p>
        </sec>
        <sec>
            <title>4. Arquitectura propuesta</title>
            <p>Utilizar Docker para construir una nueva arquitectura requiere tres aspectos fundamentales: 1) la definición de los elementos diferenciadores de las dos arquitecturas; 2) la construcción de los componentes que permiten que la arquitectura se despliegue en un entorno de desarrollo; y 3) la ejecución de pruebas con el fin de validar la implementación de la nueva arquitectura.</p>
            <sec>
                <title>4.1 Diseño de la arquitectura</title>
                <p>La solución tecnológica propuesta en esta investigación se compone de una arquitectura base y una plataforma para la gestión automática de imágenes y contenedores. La arquitectura base reutiliza la totalidad de la arquitectura Docker y añade dos artefactos que permiten la automatización en contextos académicos. La <xref  ref-type="fig" rid="f2">Figura 2</xref> describe la arquitectura base propuesta; en color verde se presentan los elementos diferenciadores con relación a la arquitectura Docker: middleware y primary storage of containers.</p>
                <p>
                    <fig id="f2">
                        <label>Figura 2</label>
                        <caption>
                            <title>Arquitectura Docker</title>
                        </caption>
                        <graphic xlink:href="art7432_f2.png" />
                    </fig>
                </p>
                <p>El cliente Docker permite la ejecución de tres instrucciones que se encargan de realizar la descarga de las imágenes. En la arquitectura base propuesta es posible apreciar una capa que cubre al cliente, la cual automatiza este proceso. Esta capa es un middleware [<xref  ref-type="bibr" rid="r21">21</xref>] que gestiona una plataforma Web, la cual permite el uso y la administración de contenedores a usuarios que están en proceso de aprendizaje en contextos de desarrollo académico.</p>
                <p>La siguiente capa de la arquitectura está ubicada en el cliente y se denomina “almacenamiento primario de contenedores”. La arquitectura define este almacenamiento como un espacio de nombres y un conjunto de repositorios que permiten la identificación, selección y búsqueda de los contenedores que puedan ser definidos por los usuarios. La implementación de la arquitectura en la plataforma utiliza el concepto de identificadores únicos para el almacenamiento primario, con lo cual un usuario puede llegar a crear muchos contenedores con el mismo nombre.</p>
                <p>La arquitectura propuesta encapsula los conceptos de Docker, de modo que se logra una abstracción total para el usuario. Como resultado de esta abstracción un usuario no necesita tener conocimientos técnicos sobre Docker para implementar la arquitectura desarrollada. A continuación, se presentan los artefactos que hacen parte de la arquitectura y de la plataforma desarrollada utilizada para su verificación y validación.</p>
                <sec>
                    <title>4.1.1 Artefactos de la solución</title>
                    <p>• Primer artefacto. Servidor Linux con distribución Ubuntu en su versión 19.04 [<xref  ref-type="bibr" rid="r22">22</xref>]. El hardware para la implementación estaba soportado con un procesador Intel(R) Core (TM) i5-8250U, con 8 gigas de RAM y conexiones ethernet.</p>
                    <p>• Segundo artefacto: Docker Community Edition CE. Lo utilizan desarrolladores nuevos en el uso de la tecnología o grupos pequeños de desarrollo. El canal de actualización para la descarga fue “Stable”, ideal para para personas que necesitan trabajar con contenedores sin errores [<xref  ref-type="bibr" rid="r16">16</xref>].</p>
                    <p>• Tercer artefacto. La plataforma web desarrollada con base en los lineamientos definidos en la arquitectura propuesta. La implementación se realizó con base en patrones arquitectónicos y de diseño, buscando simplificar la funcionalidad, mantenibilidad y escalabilidad del sistema [<xref  ref-type="bibr" rid="r23">23</xref>]. En el desarrollo de la aplicación web se utilizaron los patrones creacionales: Factory Method, Prototype y Singleton. Los patrones estructurales: Decorator y Facade, y los patrones de comportamiento Iterator y Template [<xref  ref-type="bibr" rid="r24">24</xref>].</p>
                    <p>• Cuarto artefacto: Docker registry. Fue utilizado con el fin de acceder a los índices de las imágenes y presentar a los usuarios un listado de componentes reutilizables susceptibles de ser seleccionados sin conocimientos técnicos. La arquitectura puede implementar cualquier tipo de contenedor almacenado en Docker, sin embargo, en la plataforma se personalizaron dos contenedores para facilitar la comprensión de la arquitectura: 1) contenedores para bases de datos MySql [<xref  ref-type="bibr" rid="r25">25</xref>] y 2) contenedor para servidores Web apache.</p>
                </sec>
            </sec>
            <sec>
                <title>4.2 Implementación de la arquitectura</title>
                <p>La arquitectura requiere de una plataforma web para su despliegue y validación. A continuación, se presenta la configuración base requerida por la plataforma, la descarga de imágenes de prueba, la inclusión de las imágenes en el repositorio de la arquitectura y el ejemplo de funcionamiento de la plataforma Web.</p>
                <sec>
                    <title>4.2.1 Instalación y configuración de componentes básicos</title>
                    <p>1. Instalación de la máquina virtual Oracle VM Virtual Box.</p>
                    <p>2. Definir distribución de Linux. Es importante definir qué distribución de Linux utilizar. Según [<xref  ref-type="bibr" rid="r26">26</xref>], las versiones más estables de Linux son: Redhat, Debian, Ubuntu, Linux Mint, Fedora y MX Linux.</p>
                    <p>La versión que se utilizó para este caso de estudio fue Ubuntu (Server 19.04 Disco Dingo), por las</p>
                    <p>siguientes razones:</p>
                    <p>• Distribución sencilla y con un repositorio de paquetes amplio.</p>
                    <p>• Docker tiene paquetes preconfigurados para Ubuntu.</p>
                    <p>• Sistema operativo actualizado cada dos meses y con una frecuencia de soporte a largo plazo (dos años).</p>
                    <p>• Es una distribución utilizada en contextos académicos.</p>
                    <p>3. Instalación de Docker.</p>
                    <p>4. Descarga y sincronización del repositorio base de la arquitectura. En este punto se realizó la descarga de imágenes de prueba tales como: MySql, PHP, Java y Python, entre otras.</p>
                    <p>5. Creación del contenedor MySql a partir de la imagen almacenada en el repositorio de la arquitectura. Este contenedor es el que permite el almacenamiento de usuarios desde la plataforma que gestiona la arquitectura. La plataforma provee una interfaz de usuario final.</p>
                    <p>6. Configuración del archivo Dockerfile para el contenedor que almacena los usuarios de la plataforma, tal como se presenta en la <xref  ref-type="fig" rid="f3">Figura 3</xref>. Los Dockerfile son útiles para usuarios que no tienen conocimiento en la configuración de archivos de Docker [<xref  ref-type="bibr" rid="r27">27</xref>].</p>
                    <p>
                        <fig id="f3">
                            <label>Figura 3</label>
                            <caption>
                                <title>Contenido Dockerfile mysql</title>
                            </caption>
                            <graphic xlink:href="art7432_f3.png" />
                        </fig>
                    </p>
                    <p>La instrucción “FROM” especifica la imagen que se desea descargar, en este caso se solicita la última versión de MySql. La instrucción “ENV” permite inicializar una variable que puede estar definida dentro de la imagen, en este caso se inicializó la variable “MYSQL_ROOT_PASSWORD” con una contraseña de ejemplo. La instrucción “EXPOSE” permite definir el puerto sobre el cual los contenedores de esta imagen prestarán sus servicios.</p>
                    <p>7. Creación del contenedor Apache-PHP a partir de la imagen almacenada en el repositorio de la arquitectura. La plataforma desarrollada que soporta la arquitectura fue construida en el lenguaje de programación PHP.</p>
                    <p>8. En la <xref  ref-type="fig" rid="f4">Figura 4</xref> se presenta la configuración del Dockerfile para el contenedor Apache-PHP.</p>
                    <p>
                        <fig id="f4">
                            <label>Figura 4</label>
                            <caption>
                                <title>Contenido Dockerfile mysql</title>
                            </caption>
                            <graphic xlink:href="art7432_f4.png" />
                        </fig>
                    </p>
                    <p>La instrucción “FROM” especifica la imagen que se desea descargar, en este caso se solicita la versión 7.2 de PHP con Apache. Adicionalmente, se incluyen las instrucciones de descargar las librerías necesarias para descomprimir [<xref  ref-type="bibr" rid="r28">28</xref>]. Posteriormente, se definen las variables básicas para la instalación del apache y se presenta el puerto que será expuesto a fin de consumir los servicios del contenedor.</p>
                </sec>
            </sec>
            <sec>
                <title>4.3 Modelo vista controlador de la plataforma</title>
                <p>La <xref  ref-type="fig" rid="f5">Figura 5</xref> presenta la estructura de ficheros utilizada en el componente de administración de contenedores de la plataforma desarrollada.</p>
                <p>
                    <fig id="f5">
                        <label>Figura 5</label>
                        <caption>
                            <title>Modelo vista controlador del componente administrador</title>
                        </caption>
                        <graphic xlink:href="art7432_f5.png" />
                    </fig>
                </p>
                <p>A continuación, se describen tres ficheros de código que hacen parte de la plataforma desarrollada. La <xref  ref-type="fig" rid="f6">Figura 6</xref> presenta el sistema de conexión de la base de datos a través de PDO [<xref  ref-type="bibr" rid="r29">29</xref>].</p>
                <p>
                    <fig id="f6">
                        <label>Figura 6</label>
                        <caption>
                            <title>Contenido conexion.php</title>
                        </caption>
                        <graphic xlink:href="art7432_f6.png" />
                    </fig>
                </p>
                <p>Como se describió, la arquitectura permite el uso de cualquier contenedor. En la plataforma desarrollada este proceso se automatiza mediante la ejecución de instrucciones parametrizadas que aíslan al usuario final de la problemática de instalación y configuración. La <xref  ref-type="fig" rid="f7">Figura 7</xref> presenta las instrucciones que hacen parte de uno de los controladores para la creación de contenedores.</p>
                <p>
                    <fig id="f7">
                        <label>Figura 7</label>
                        <caption>
                            <title>Contenido contecreacontroller.php</title>
                        </caption>
                        <graphic xlink:href="art7432_f7.png" />
                    </fig>
                </p>
                <p>A fin de visualizar los contenedores se sigue el mismo principio: aislar la complejidad al usuario final y ejecutar instrucciones para presentar los resultados finales. La <xref  ref-type="fig" rid="f8">Figura 8</xref> presenta las instrucciones utilizadas en el propósito de visualizar los contenedores en las vistas de usuario final.</p>
                <p>
                    <fig id="f8">
                        <label>Figura 8</label>
                        <caption>
                            <title>Contenido imágenes base.php</title>
                        </caption>
                        <graphic xlink:href="art7432_f8.png" />
                    </fig>
                </p>
                <p>La arquitectura propuesta fue verificada y validada por la plataforma desarrollada. A continuación, se presentan las funcionalidades de la plataforma, las cuales brindan una comprensión mayor de la arquitectura.</p>
                <sec>
                    <title>4.3.1 Funcionalidades plataforma</title>
                    <p>La plataforma desarrollada para la gestión de los contenedores cuenta con un sistema de autenticación y autorización [<xref  ref-type="bibr" rid="r30">30</xref>]. Por defecto, un usuario requiere un navegador para hacer uso de la plataforma, un usuario y una contraseña que le permiten acceder al componente que administra y gestiona los contendedores. Si el usuario desea crear un contenedor nuevo lo puede realizar a partir de una imagen descargada o, en su defecto, tener acceso a la lista de imágenes que le permitirán acceder a más contenedores sin tener conocimiento técnico de Docker.</p>
                    <p>La <xref  ref-type="fig" rid="f9">Figura 9</xref> presenta el modelo de clases implementado en la autenticación, autorización, gestión de contenedores y descarga de imágenes.</p>
                    <p>
                        <fig id="f9">
                            <label>Figura 9</label>
                            <caption>
                                <title>Modelo de clases plataforma</title>
                            </caption>
                            <graphic xlink:href="art7432_f9.png" />
                        </fig>
                    </p>
                    <p>La clase usuarios representa los posibles desarrolladores que tendrán permisos para gestionar imágenes y contenedores en la plataforma desarrollada. La clase imágenes representa las imágenes almacenadas en la plataforma Docker, las cuales han sido descargadas con anterioridad del sitio oficial. La clase contenedores es una abstracción de los posibles contenedores que puede llegar a crear un usuario a través de la plataforma.</p>
                    <p>La plataforma desarrollada cuenta con las funcionalidades descritas en la <xref  ref-type="table" rid="t2">Tabla 2</xref>.</p>
                    <p>
                        <table-wrap id="t2">
                            <label>tabla 2</label>
                            <caption>
                                <title>Descripción de funcionalidades</title>
                            </caption>
                            <graphic xlink:href="art7432_t2.png" />
                        </table-wrap>
                    </p>
                    <p>A fin de acceder a la plataforma un usuario debe tener credenciales de acceso (f01). La plataforma verifica las credenciales de un usuario, posteriormente, le permite visualizar las imágenes que tiene disponible para su uso, tal como se presenta en la <xref  ref-type="fig" rid="f10">Figura 10</xref> (f02, f03, f05, f06, f07). En cada imagen brinda opciones para crear contenedores (f04) y ver detalles de las imágenes de acuerdo con la información suministrada por el Docker registry. Dependiendo de la imagen a utilizar, se presentan interfaces personalizadas, lo que permite la creación de contenedores con información mínima y sin conocimientos sobre los aspectos técnicos de la filosofía de contenedores.</p>
                    <p>
                        <fig id="f10">
                            <label>Figura 10</label>
                            <caption>
                                <title>Creación contenedores</title>
                            </caption>
                            <graphic xlink:href="art7432_f10.png" />
                        </fig>
                    </p>
                    <p>La creación de un contenedor a través de la plataforma solicita tres valores: nombre del contenedor, puerto sobre el cual desea exponer los servicios y, por último, el nombre del espacio de nombres que el usuario desea manejar para el almacenamiento de sus archivos. Los contenedores creados son de propiedad del usuario en sesión, es decir, que al ingresar con otro usuario no aparecerán esos contenedores.</p>
                    <p>Como se describió, los contenedores tienen propietarios y estos usuarios pueden realizar múltiples funciones con sus contenedores. La plataforma provee opciones para iniciar o detener los servicios de los contenedores (f06).</p>
                    <p>La <xref  ref-type="fig" rid="f11">Figura 11</xref> presenta la interfaz que permite manipular un contenedor de mysql. En cada contenedor se pueden crear bases de datos (f08). Para cada base de datos existe un intérprete (f09) que permite utilizar el lenguaje de definición de datos DDL.</p>
                    <p>
                        <fig id="f11">
                            <label>Figura 11</label>
                            <caption>
                                <title>Administración contenedor mysql</title>
                            </caption>
                            <graphic xlink:href="art7432_f11.png" />
                        </fig>
                    </p>
                    <p>En la Figura 11 se presenta la forma como se pueden visualizar las tablas de cada base de datos (f10).</p>
                    <p>La <xref  ref-type="fig" rid="f12">Figura 12</xref> describe la interfaz para subir sitios web a un contenedor (f11, f12). Los archivos deben estar en formato zip.</p>
                    <p>
                        <fig id="f12">
                            <label>Figura 12</label>
                            <caption>
                                <title>Formulario subir sitio</title>
                            </caption>
                            <graphic xlink:href="art7432_f12.png" />
                        </fig>
                    </p>
                    <p>De acuerdo con [<xref  ref-type="bibr" rid="r12">12</xref>], la plataforma web desarrollada (f13) cumple con el 65 % de los requerimientos funcionales que debería tener un sistema de administración de contenedores. El 35 % de los requerimientos no desarrollados están orientados hacia el balanceo de carga y la transferencia de contenedores entre diferentes hosts, sin embargo, ese 35 % no hace parte del alcance de la presente investigación.</p>
                </sec>
            </sec>
        </sec>
        <sec>
            <title>5. Limitaciones</title>
            <p>• La plataforma desarrollada requiere la implementación de funcionalidades adicionales, como, por ejemplo, la personalización de otros tipos de contenedores.</p>
            <p>• Está orientado solo a contextos académicos en los que las personas están en proceso de aprendizaje para entornos web.</p>
            <p>• La degradación de un contenedor afecta los demás contenedores, por tanto, se debe utilizar un sistema de balanceo a fin de que la plataforma detecte la falla y la corrija de manera automática, tal como lo realiza Kubernates.</p>
            <p>• La cantidad de contenedores y procesos que puede llegar a crear un usuario son ilimitados, por tanto, se debe gestionar una cuota para cada sesión de usuario.</p>
        </sec>
        <sec>
            <title>6. Conclusiones</title>
            <p>• Docker no es una herramienta dirigida a orquestar contenedores, se utiliza para gestionarlos en un entorno particular. Es importante contar con una suite de administración de contenedores. Existen herramientas como Kubernates, un orquestador de contenedores construido por Google que tiene por objeto crear aplicaciones distribuidas soportadas en contenedores. El uso y la administración de Kubernates requiere de conocimiento técnico o personal con capacitación en el tema.</p>
            <p>• Docker Swarm es otra herramienta para organizar clústeres de contendedores. La diferencia con Kubernates radica en su enfoque: Swarm busca extender el uso de la API de Docker a fin de que todos los contenedores se vean como una sola unidad. Existen otras herramientas con fines similares, sin embargo, ninguna de ellas está enfocada en procesos de formación de profesionales.</p>
            <p>• Docker permite extender su arquitectura mediante la adición de componentes, los cuales componentes pueden estar encapsulados en un middleware. A través del middleware se puede realizar la ejecución de código desde una interfaz web hasta el sistema operativo base que contiene el host Docker.</p>
            <p>• El proceso de verificación y validación de la arquitectura se llevó a cabo con la implementación de la plataforma, teniendo un marco controlado de usuarios que permita garantizar la aplicación de todos los conceptos de la arquitectura.</p>
            <p>• La arquitectura propuesta puede utilizarse en entornos de capacitación para formación de desarrolladores junior, puesto que permite encapsular la complejidad de Docker y, al mismo tiempo, utilizar la potencia de Docker.</p>
        </sec>
	</body>
	<back>
		<ref-list>
			<title>Referencias</title>
			<ref id="r1">
				<mixed-citation>V. F. Martins, I. de Almeida Souza Concilio, y M. de Paiva Guimarães, “Problem based learning associated to the development of games for programming teaching”, Comput. Appl. Eng. Educ., vol. 26, n. o 5, pp. 1577-1589, sep. 2018.</mixed-citation>
			    <element-citation  publication-type="journal">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Martins</surname>
                            <given-names>V. F.</given-names>
                        </name>
                        <name>
                            <surname>de Almeida Souza Concilio</surname>
                            <given-names>I.</given-names>
                        </name>
                        <name>
                            <surname>de Paiva Guimarães</surname>
                            <given-names>M.</given-names>
                        </name>
				    </person-group>
                    <year>2018</year>
                    <article-title>Problem based learning associated to the development of games for programming teaching</article-title>
                    <source>Comput. Appl. Eng. Educ.</source>
                    <volume>26</volume>
                    <issue>5</issue>
                    <fpage>1577</fpage>
                    <lpage>1589</lpage>
			    </element-citation>
            </ref>
            <ref id="r2">
				<mixed-citation>S. Popat and L. Starkey, “Learning to code or coding to learn? A systematic review”, Comput. Educ., vol. 128, pp. 365-376, en. 2019.</mixed-citation>
			    <element-citation  publication-type="journal">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Popat</surname>
                            <given-names>S.</given-names>
                        </name>
                        <name>
                            <surname>Starkey</surname>
                            <given-names>L.</given-names>
                        </name>
				    </person-group>
                    <year>2019</year>
                    <article-title>Learning to code or coding to learn? A systematic review</article-title>
                    <source>Comput. Educ.</source>
                    <volume>128</volume>
                    <fpage>365</fpage>
                    <lpage>376</lpage>
			    </element-citation>
            </ref>
            <ref id="r3">
				<mixed-citation>S. Azmi, N. A. Iahad y N. Ahmad, “Attracting students’ engagement in programming courses with gamification”, in 2016 IEEE Conference on e-Learning, e-Management and e-Services (IC3e), 2016, pp. 112-115.</mixed-citation>
			    <element-citation  publication-type="book">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Azmi</surname>
                            <given-names>S.</given-names>
                        </name>
                        <name>
                            <surname>Iahad</surname>
                            <given-names>N. A.</given-names>
                        </name>
                        <name>
                            <surname>Ahmad</surname>
                            <given-names>N.</given-names>
                        </name>
				    </person-group>
                    <year>2016</year>
                    <source>“Attracting students’ engagement in programming courses with gamification”, in 2016 IEEE Conference on e-Learning, e-Management and e-Services (IC3e)</source>
                    <fpage>112</fpage>
                    <lpage>115</lpage>
			    </element-citation>
            </ref>
            <ref id="r4">
				<mixed-citation>I. Hadar, “When intuition and logic clash: the case of the object-oriented paradigm”, Sci. Comput. Program., vol. 78, n. o 9, pp. 1407-1426, sep. 2013.</mixed-citation>
			    <element-citation  publication-type="journal">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Hadar</surname>
                            <given-names>I.</given-names>
                        </name>
				    </person-group>
                    <year>2013</year>
                    <month>sep</month>
                    <article-title>When intuition and logic clash: the case of the object-oriented paradigm</article-title>
                    <source>Sci. Comput. Program.</source>
                    <volume>7</volume>
                    <issue>9</issue>
                    <fpage>1407</fpage>
                    <lpage>1426</lpage>
			    </element-citation>
            </ref>
            <ref id="r5">
				<mixed-citation>F. Špaček, R. Sohlich y T. Dulík, “Docker as platform for assignments evaluation,” Procedia Eng., vol. 100, pp. 1665–1671, en. 2015.</mixed-citation>
			    <element-citation  publication-type="journal">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Špaček</surname>
                            <given-names>F.</given-names>
                        </name>
                        <name>
                            <surname>Sohlich</surname>
                            <given-names>R.</given-names>
                        </name>
                        <name>
                            <surname>Dulík</surname>
                            <given-names>T.</given-names>
                        </name>
				    </person-group>
                    <year>2015</year>
                    <month>en.</month>
                    <article-title>Docker as platform for assignments evaluation</article-title>
                    <source>Procedia Eng.</source>
                    <volume>100</volume>
                    <fpage>1665</fpage>
                    <lpage>1671</lpage>
			    </element-citation>
            </ref>
            <ref id="r6">
				<mixed-citation>M. E. Ismail, N. Sa’adan, M. A. Samsudin, N. Hamzah, N. Razali y I. I. Mahazir, “Implementation of the gamification concept using Kahoot! among TVET students: an observation”, J. Phys. Conf. Ser., vol. 1140, n. o 1, p. 012013, dic. 2018.</mixed-citation>
			    <element-citation  publication-type="journal">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Ismail</surname>
                            <given-names>M. E.</given-names>
                        </name>
                        <name>
                            <surname>Sa’adan</surname>
                            <given-names>N.</given-names>
                        </name>
                        <name>
                            <surname>Samsudin</surname>
                            <given-names>M. A.</given-names>
                        </name>
                        <name>
                            <surname>Hamzah</surname>
                            <given-names>N.</given-names>
                        </name>
                        <name>
                            <surname>Razali</surname>
                            <given-names>N.</given-names>
                        </name>
                        <name>
                            <surname>Mahazir</surname>
                            <given-names>I. I.</given-names>
                        </name>
				    </person-group>
                    <year>2018</year>
                    <month>dic</month>
                    <article-title>Implementation of the gamification concept using Kahoot! among TVET students: an observation</article-title>
                    <source>J. Phys. Conf. Ser.</source>
                    <volume>1140</volume>
                    <issue>1</issue>
                    <fpage>012013</fpage>
                    <lpage>012013</lpage>
			    </element-citation>
            </ref>
            <ref id="r7">
				<mixed-citation>A. Draz, S. Abdennadher y Y. Abdelrahman, “Kodr: a customizable learning platform for computer science education,” En DM Review, vol. 2, pp. 579-582, sep. 201.</mixed-citation>
			    <element-citation  publication-type="journal">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Draz</surname>
                            <given-names>A.</given-names>
                        </name>
                        <name>
                            <surname>Abdennadher</surname>
                            <given-names>S.</given-names>
                        </name>
                        <name>
                            <surname>Abdelrahman</surname>
                            <given-names>Y.</given-names>
                        </name>
				    </person-group>
                    <year>2001</year>
                    <month>sep.</month>
                    <article-title>Kodr: a customizable learning platform for computer science education</article-title>
                    <source>En DM Review</source>
                    <volume>2</volume>
                    <fpage>579</fpage>
                    <lpage>582</lpage>
			    </element-citation>
            </ref>
            <ref id="r8">
				<mixed-citation>S. P. Sarkar, B. Sarker y S. K. A. Hossain, “Cross platform interactive programming learning environment for kids with edutainment and gamification”, En 2016 19th International Conference on Computer and Information Technology (ICCIT), 2016, pp. 218-222.</mixed-citation>
			    <element-citation  publication-type="book">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Sarkar</surname>
                            <given-names>S. P.</given-names>
                        </name>
                        <name>
                            <surname>Sarker</surname>
                            <given-names>B.</given-names>
                        </name>
                        <name>
                            <surname>Hossain</surname>
                            <given-names>S. K. A.</given-names>
                        </name>
				    </person-group>
                    <year>2016</year>
                    <source>“Cross platform interactive programming learning environment for kids with edutainment and gamification”, En 2016 19th International Conference on Computer and Information Technology (ICCIT)</source>
                    <fpage>218</fpage>
                    <lpage>222</lpage>
			    </element-citation>
            </ref>
            <ref id="r9">
				<mixed-citation>C. A. Guerrero Alarcon, L. E. Gutiérrez López y K. D. Cuervo Cely, “Los videojuegos como estrategia para incrementar la motivación y alcance de logros en procesos de aprendizaje,” En Memorias la formación de ingenieros: un compromiso para el desarrollo y la sostenibilidad, 2020.</mixed-citation>
			    <element-citation  publication-type="book">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Guerrero Alarcon</surname>
                            <given-names>C. A.</given-names>
                        </name>
                        <name>
                            <surname>Gutiérrez López</surname>
                            <given-names>L. E.</given-names>
                        </name>
                        <name>
                            <surname>Cuervo Cely</surname>
                            <given-names>K. D.</given-names>
                        </name>
				    </person-group>
                    <year>2020</year>
                    <source>“Los videojuegos como estrategia para incrementar la motivación y alcance de logros en procesos de aprendizaje,” En Memorias la formación de ingenieros: un compromiso para el desarrollo y la sostenibilidad</source>
			    </element-citation>
            </ref>
            <ref id="r10">
				<mixed-citation>H. Zhu y I. Bayley, “If Docker is the answer, what is the question?,” En 2018 IEEE Symposium on Service-Oriented System Engineering (SOSE), 2018, pp. 152-163.</mixed-citation>
			    <element-citation  publication-type="book">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Zhu</surname>
                            <given-names>H.</given-names>
                        </name>
                        <name>
                            <surname>Bayley</surname>
                            <given-names>I.</given-names>
                        </name>
				    </person-group>
                    <year>2018</year>
                    <source>“If Docker is the answer, what is the question?,” En 2018 IEEE Symposium on Service-Oriented System Engineering (SOSE)</source>
                    <fpage>152</fpage>
                    <lpage>163</lpage>
			    </element-citation>
            </ref>
            <ref id="r11">
				<mixed-citation>J. Cito, G. Schermann, J. E. Wittern, P. Leitner, S. Zumberi y H. C. Gall, “An empirical analysis of the Docker container ecosystem on gitHub,” in 2017 IEEE/ACM 14th International Conference on Mining Software Repositories (MSR), 2017, pp. 323-333.</mixed-citation>
			    <element-citation  publication-type="book">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Cito</surname>
                            <given-names>J.</given-names>
                        </name>
                        <name>
                            <surname>Schermann</surname>
                            <given-names>G.</given-names>
                        </name>
                        <name>
                            <surname>Wittern</surname>
                            <given-names>J. E.</given-names>
                        </name>
                        <name>
                            <surname>Leitner</surname>
                            <given-names>P.</given-names>
                        </name>
                        <name>
                            <surname>Zumberi</surname>
                            <given-names>S.</given-names>
                        </name>
                        <name>
                            <surname>Gall</surname>
                            <given-names>H. C.</given-names>
                        </name>
				    </person-group>
                    <year>2017</year>
                    <source>“An empirical analysis of the Docker container ecosystem on gitHub,” in 2017 IEEE/ACM 14th International Conference on Mining Software Repositories (MSR)</source>
                    <fpage>323</fpage>
                    <lpage>333</lpage>
			    </element-citation>
            </ref>
            <ref id="r12">
				<mixed-citation>R. Peinl, F. Holzschuher y F. Pfitzer, “Docker cluster management for the cloud-survey results and own solution”, J. Grid Comput., vol. 14, n. o 2, pp. 265-282, jun. 2016.</mixed-citation>
			    <element-citation  publication-type="journal">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Peinl</surname>
                            <given-names>R.</given-names>
                        </name>
                        <name>
                            <surname>Holzschuher</surname>
                            <given-names>F.</given-names>
                        </name>
                        <name>
                            <surname>Pfitzer</surname>
                            <given-names>F.</given-names>
                        </name>
				    </person-group>
                    <year>2016</year>
                    <article-title>Docker cluster management for the cloud-survey results and own solution</article-title>
                    <source>J. Grid Comput.</source>
                    <volume>14</volume>
                    <issue>2</issue>
                    <fpage>265</fpage>
                    <lpage>282</lpage>
			    </element-citation>
            </ref>
            <ref id="r13">
				<mixed-citation>R. Muddinagiri, S. Ambavane y S. Bayas, “Self-hosted Kubernetes: deploying Docker containers locally with Minikube,” En 2019 International Conference on Innovative Trends and Advances in Engineering and Technology (ICITAET), 2019, pp. 239-243.</mixed-citation>
			    <element-citation  publication-type="book">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Muddinagiri</surname>
                            <given-names>R.</given-names>
                        </name>
                        <name>
                            <surname>Ambavane</surname>
                            <given-names>S.</given-names>
                        </name>
                        <name>
                            <surname>Bayas</surname>
                            <given-names>S.</given-names>
                        </name>
				    </person-group>
                    <year>2019</year>
                    <source>“Self-hosted Kubernetes: deploying Docker containers locally with Minikube,” En 2019 International Conference on Innovative Trends and Advances in Engineering and Technology (ICITAET)</source>
                    <fpage>239</fpage>
                    <lpage>243</lpage>
			    </element-citation>
            </ref>
            <ref id="r14">
				<mixed-citation>R. Fernández, J. Soriano, X. Larrucea, A. L. Martínez y J. M. González-Barahona, “Towards the improvement of the software quality: an Enterprise 2.0 architecture for distributed software developments,” En 2008 First International Conference on Distributed Framework and Applications, 2008, pp. 52-59.</mixed-citation>
			    <element-citation  publication-type="book">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Fernández</surname>
                            <given-names>R.</given-names>
                        </name>
                        <name>
                            <surname>Soriano</surname>
                            <given-names>J.</given-names>
                        </name>
                        <name>
                            <surname>Larrucea</surname>
                            <given-names>X.</given-names>
                        </name>
                        <name>
                            <surname>Martínez</surname>
                            <given-names>A. L.</given-names>
                        </name>
                        <name>
                            <surname>González-Barahona</surname>
                            <given-names>J. M.</given-names>
                        </name>
				    </person-group>
                    <year>2008</year>
                    <source>“Towards the improvement of the software quality: an Enterprise 2.0 architecture for distributed software developments,” En 2008 First International Conference on Distributed Framework and Applications</source>
                    <fpage>52</fpage>
                    <lpage>59</lpage>
			    </element-citation>
            </ref>
            <ref id="r15">
				<mixed-citation>Preeth E N, F. J. P. Mulerickal, B. Paul y Y. Sastri, “Evaluation of Docker containers based on hardware utilization,” En 2015 International Conference on Control Communication &amp; Computing India (ICCC), nov. 2015, pp. 697-700.</mixed-citation>
			    <element-citation  publication-type="book">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Preeth</surname>
                            <given-names>E. N.</given-names>
                        </name>
                        <name>
                            <surname>Mulerickal</surname>
                            <given-names>F. J. P.</given-names>
                        </name>
                        <name>
                            <surname>Paul</surname>
                            <given-names>B.</given-names>
                        </name>
                        <name>
                            <surname>Sastri</surname>
                            <given-names>Y.</given-names>
                        </name>
				    </person-group>
                    <year>2015</year>
                    <month>nov</month>
                    <source>“Evaluation of Docker containers based on hardware utilization,” En 2015 International Conference on Control Communication &amp; Computing India (ICCC)</source>
                    <fpage>697</fpage>
                    <lpage>700</lpage>
			    </element-citation>
            </ref>
            <ref id="r16">
				<mixed-citation>I. Docker, “Overview of Docker editions,” 2019. [En línea]. Disponible en: <ext-link xlink:href="https://docs.docker.com/engine/docker-overview/">https://docs.docker.com/engine/docker-overview/</ext-link></mixed-citation>
			    <element-citation  publication-type="webpage">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Docker</surname>
                            <given-names>I.</given-names>
                        </name>
				    </person-group>
                    <year>2019</year>
                    <source>Overview of Docker editions</source>
                    <ext-link ext-link-type="uri">https://docs.docker.com/engine/docker-overview/</ext-link>
			    </element-citation>
            </ref>
            <ref id="r17">
				<mixed-citation>B. Kavitha y P. Varalakshmi, “Performance analysis of virtual machines and Docker containers,” En Communications in Computer and Information Science, vol. 804, 2018, pp. 99-113.</mixed-citation>
			    <element-citation  publication-type="journal">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Kavitha</surname>
                            <given-names>B.</given-names>
                        </name>
                        <name>
                            <surname>Varalakshmi</surname>
                            <given-names>P.</given-names>
                        </name>
				    </person-group>
                    <year>2018</year>
                    <article-title>Performance analysis of virtual machines and Docker containers</article-title>
                    <source>Communications in Computer and Information Science</source>
                    <volume>804</volume>
                    <fpage>99</fpage>
                    <lpage>113</lpage>
			    </element-citation>
            </ref>
            <ref id="r18">
				<mixed-citation>S. Fu, J. Liu, X. Chu y Y. Hu, “Toward a Standard interface for cloud providers: the container as the narrow waist,” IEEE Internet Comput., vol. 20, n. o 2, pp. 66–71, mar. 2016.</mixed-citation>
			    <element-citation  publication-type="journal">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Fu</surname>
                            <given-names>S.</given-names>
                        </name>
                        <name>
                            <surname>Liu</surname>
                            <given-names>J.</given-names>
                        </name>
                        <name>
                            <surname>Chu</surname>
                            <given-names>X.</given-names>
                        </name>
                        <name>
                            <surname>Hu</surname>
                            <given-names>Y.</given-names>
                        </name>
				    </person-group>
                    <year>2016</year>
                    <month>mar</month>
                    <article-title>Toward a Standard interface for cloud providers: the container as the narrow waist</article-title>
                    <source>IEEE Internet Comput.</source>
                    <volume>20</volume>
                    <issue>2</issue>
                    <fpage>66</fpage>
                    <lpage>71</lpage>
			    </element-citation>
            </ref>
            <ref id="r19">
				<mixed-citation>T. L. F. Projects, “Open container initiative,” 2016. [En línea]. Disponible en: <ext-link xlink:href="https://www.opencontainers.org/">https://www.opencontainers.org/</ext-link></mixed-citation>
			    <element-citation  publication-type="webpage">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Projects</surname>
                            <given-names>T. L. F.</given-names>
                        </name>
				    </person-group>
                    <year>2016</year>
                    <source>Open container initiative</source>
                    <ext-link ext-link-type="uri">https://www.opencontainers.org/</ext-link>
			    </element-citation>
            </ref>
            <ref id="r20">
				<mixed-citation>R. Morabito, J. Kjallman y M. Komu, “Hypervisors vs. Lightweight virtualization: a performance comparison,” En 2015 IEEE International Conference on Cloud Engineering, 2015, pp. 386-393.</mixed-citation>
			    <element-citation  publication-type="book">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Morabito</surname>
                            <given-names>R.</given-names>
                        </name>
                        <name>
                            <surname>Kjallman</surname>
                            <given-names>J.</given-names>
                        </name>
                        <name>
                            <surname>Komu</surname>
                            <given-names>M.</given-names>
                        </name>
				    </person-group>
                    <year>2015</year>
                    <source>“Hypervisors vs. Lightweight virtualization: a performance comparison,” En 2015 IEEE International Conference on Cloud Engineering</source>
                    <fpage>386</fpage>
                    <lpage>393</lpage>
			    </element-citation>
            </ref>
            <ref id="r21">
				<mixed-citation>U. Batra y S. Mukharjee, “Enterprise application integration (middleware): Integrating stovepipe applications of varied enterprises in distributed middleware with service oriented architecture,” En 2011 3rd International Conference on Electronics Computer Technology, 2011, vol. 5, pp. 226-230.</mixed-citation>
			    <element-citation  publication-type="book">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Batra</surname>
                            <given-names>U.</given-names>
                        </name>
                        <name>
                            <surname>Mukharjee</surname>
                            <given-names>S.</given-names>
                        </name>
				    </person-group>
                    <year>2011</year>
                    <source>“Enterprise application integration (middleware): Integrating stovepipe applications of varied enterprises in distributed middleware with service oriented architecture,” En 2011 3rd International Conference on Electronics Computer Technology</source>
                    <volume>5</volume>
                    <fpage>226</fpage>
                    <lpage>230</lpage>
			    </element-citation>
            </ref>
            <ref id="r22">
				<mixed-citation>Osboxes, “Ubuntu server,” 2019. [En línea]. Disponible en: <ext-link xlink:href="https://www.osboxes.org/ubuntu-server/">https://www.osboxes.org/ubuntu-server/</ext-link></mixed-citation>
			    <element-citation  publication-type="webpage">
				    <person-group person-group-type="author">
				    	<collab>Osboxes</collab>
				    </person-group>
                    <year>2019</year>
                    <source>Ubuntu server</source>
                    <ext-link ext-link-type="uri">https://www.osboxes.org/ubuntu-server/</ext-link>
			    </element-citation>
            </ref>
            <ref id="r23">
				<mixed-citation>A. Singh, P. Chawla, K. Singh y A. K. Singh, “Formulating an MVC framework for web development in JAVA,” En 2018 2nd International Conference on Trends in Electronics and Informatics (ICOEI), 2018, Icoei, pp. 926-929.</mixed-citation>
			    <element-citation  publication-type="book">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Singh</surname>
                            <given-names>A.</given-names>
                        </name>
                        <name>
                            <surname>Chawla</surname>
                            <given-names>P.</given-names>
                        </name>
                        <name>
                            <surname>Singh</surname>
                            <given-names>K.</given-names>
                        </name>
                        <name>
                            <surname>Singh</surname>
                            <given-names>A. K.</given-names>
                        </name>
				    </person-group>
                    <year>2018</year>
                    <source>“Formulating an MVC framework for web development in JAVA,” En 2018 2nd International Conference on Trends in Electronics and Informatics (ICOEI)</source>
                    <publisher-name>Icoei</publisher-name>
                    <fpage>926</fpage>
                    <lpage>929</lpage>
			    </element-citation>
            </ref>
            <ref id="r24">
				<mixed-citation>C. A. Guerrero Alarcón, J. M. Suárez Pedrazay L. E. Gutiérrez López, “Patrones de diseño GOF (The Gang of Four) en el contexto de procesos de desarrollo de aplicaciones orientadas a la web”, Inf. tecnológica, vol. 24, n. o 3, pp. 103-114, 2013.</mixed-citation>
			    <element-citation  publication-type="journal">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Guerrero Alarcón</surname>
                            <given-names>C. A.</given-names>
                        </name>
                        <name>
                            <surname>Suárez Pedrazay</surname>
                            <given-names>J. M.</given-names>
                        </name>
                        <name>
                            <surname>Gutiérrez López</surname>
                            <given-names>L. E.</given-names>
                        </name>
				    </person-group>
                    <year>2013</year>
                    <article-title>Patrones de diseño GOF (The Gang of Four) en el contexto de procesos de desarrollo de aplicaciones orientadas a la web</article-title>
                    <source>Inf. tecnológica</source>
                    <volume>24</volume>
                    <issue>3</issue>
                    <fpage>103</fpage>
                    <lpage>114</lpage>
			    </element-citation>
            </ref>
            <ref id="r25">
				<mixed-citation>R. Senington, B. Pataki y X. V. Wang, “Using docker for factory system software management: Experience report”, Procedia CIRP, vol. 72, pp. 659-664, 2018.</mixed-citation>
			    <element-citation  publication-type="journal">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Senington</surname>
                            <given-names>R.</given-names>
                        </name>
                        <name>
                            <surname>Pataki</surname>
                            <given-names>B.</given-names>
                        </name>
                        <name>
                            <surname>Wang</surname>
                            <given-names>X. V.</given-names>
                        </name>
				    </person-group>
                    <year>2018</year>
                    <article-title>Using docker for factory system software management: Experience report</article-title>
                    <source>Procedia CIRP</source>
                    <volume>72</volume>
                    <fpage>659</fpage>
                    <lpage>664</lpage>
			    </element-citation>
            </ref>
            <ref id="r26">
				<mixed-citation>Masgnulinux, “Distribuciones más estables: 5 versiones de GNU/Linux que recomendamos”, 2018. [En línea]. Disponible en: <ext-link xlink:href="https://masgnulinux.es/distribuciones-mas-estables-5-versiones-de-gnu-linux-que-recomendamos/">https://masgnulinux.es/distribuciones-mas-estables-5-versiones-de-gnu-linux-que-recomendamos/</ext-link></mixed-citation>
			    <element-citation  publication-type="webpage">
				    <person-group person-group-type="author">
				    	<collab>Masgnulinux</collab>
				    </person-group>
                    <year>2018</year>
                    <source>Distribuciones más estables: 5 versiones de GNU/Linux que recomendamos</source>
                    <ext-link ext-link-type="uri">https://masgnulinux.es/distribuciones-mas-estables-5-versiones-de-gnu-linux-que-recomendamos/</ext-link>
			    </element-citation>
            </ref>
            <ref id="r27">
				<mixed-citation>J. Cito y H. C. Gall, “Using docker containers to improve reproducibility in software engineering research”, En Proceedings of the 38th International Conference on Software Engineering CompanionICSE ’16, 2016, pp. 906-907.</mixed-citation>
			    <element-citation  publication-type="book">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Cito</surname>
                            <given-names>J.</given-names>
                        </name>
                        <name>
                            <surname>Gall</surname>
                            <given-names>H. C.</given-names>
                        </name>
				    </person-group>
                    <year>2016</year>
                    <source>“Using docker containers to improve reproducibility in software engineering research”, En Proceedings of the 38th International Conference on Software Engineering CompanionICSE ’16</source>
                    <fpage>906</fpage>
                    <lpage>907</lpage>
			    </element-citation>
            </ref>
            <ref id="r28">
				<mixed-citation>R. Avellaneda, S. Cabrera, P. A. Martínez, y C. G. Donoso Albarracín, “Apoyo tecnológico para la fidelización y captación de nuevos clientes por medio de una aplicación móvil”, Inv. Inn. Ing., vol. 5, n.º 1, pp. 92-101, jul. 2017.</mixed-citation>
			    <element-citation  publication-type="journal">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Avellaneda</surname>
                            <given-names>R.</given-names>
                        </name>
                        <name>
                            <surname>Cabrera</surname>
                            <given-names>S.</given-names>
                        </name>
                        <name>
                            <surname>Martínez</surname>
                            <given-names>P. A.</given-names>
                        </name>
                        <name>
                            <surname>Donoso Albarracín</surname>
                            <given-names>C. G.</given-names>
                        </name>
				    </person-group>
                    <year>2017</year>
                    <article-title>Apoyo tecnológico para la fidelización y captación de nuevos clientes por medio de una aplicación móvil</article-title>
                    <source>Inv. Inn. Ing.</source>
                    <volume>5</volume>
                    <issue>1</issue>
                    <fpage>92</fpage>
                    <lpage>101</lpage>
			    </element-citation>
            </ref>
            <ref id="r29">
				<mixed-citation>T. P. Group, “PHP.NET,” 2019. [En línea]. Disponible en: <ext-link xlink:href="https://php.net/manual/es/intro.pdo.php">https://php.net/manual/es/intro.pdo.php</ext-link></mixed-citation>
			    <element-citation  publication-type="webpage">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Group</surname>
                            <given-names>T. P.</given-names>
                        </name>
				    </person-group>
                    <year>2017</year>
                    <source>PHP.NET.</source>
                    <ext-link ext-link-type="uri">https://php.net/manual/es/intro.pdo.php</ext-link>
			    </element-citation>
            </ref>
            <ref id="r30">
				<mixed-citation>J. M. Suárez Pedraza y L. E. Gutiérrez López, “Tipificación de dominios de requerimientos para la aplicación de patrones arquitectónicos,” Inf. Tec., vol. 27, n. o 4, pp. 193-202, 2016.</mixed-citation>
			    <element-citation  publication-type="journal">
				    <person-group person-group-type="author">
				    	<name>
                            <surname>Suárez Pedraza</surname>
                            <given-names>J. M.</given-names>
                        </name>
                        <name>
                            <surname>Gutiérrez López</surname>
                            <given-names>L. E.</given-names>
                        </name>
				    </person-group>
                    <year>2016</year>
                    <article-title>Tipificación de dominios de requerimientos para la aplicación de patrones arquitectónicos</article-title>
                    <source>Inf. Tec.</source>
                    <volume>27</volume>
                    <issue>4</issue>
                    <fpage>193</fpage>
                    <lpage>202</lpage>
			    </element-citation>
            </ref>
       	</ref-list>
	</back>
</article>