{"id":24841,"date":"2022-06-03T12:43:39","date_gmt":"2022-06-03T10:43:39","guid":{"rendered":"https:\/\/www.makingscience.com\/?p=24841"},"modified":"2022-06-03T12:43:39","modified_gmt":"2022-06-03T10:43:39","slug":"que-es-docker-y-por-que-implementarlo-en-tus-proyectos","status":"publish","type":"post","link":"https:\/\/www.makingscience.com\/es\/blog\/que-es-docker-y-por-que-implementarlo-en-tus-proyectos\/","title":{"rendered":"Qu\u00e9 es Docker y por qu\u00e9 implementarlo en tus proyectos"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">Los or\u00edgenes de Docker residen en la empresa antes llamada dotCloud Inc, esta misma debe tanto su \u00e9xito actual a la tecnolog\u00eda Docker que el nombre en este momento de la compa\u00f1\u00eda es Docker Inc.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">El software de Docker nace como un proyecto interno en dotCloud que se dedicaba principalmente a ofrecer un servicio PaaS (Platform-as-a-Service). <\/span><span style=\"font-weight: 400;\">Con la intenci\u00f3n de mejorar sus servicios los ingenieros de la compa\u00f1\u00eda trabajaban en el lanzamiento de tareas desplegadas sobre el kernel de Linux que incluyesen funcionalidades de LXC (LinuX Containers) y cgroups.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Para poder entender esto puede surgir la siguiente pregunta, <strong>\u00bfqu\u00e9 son los cgroups y LXC? <\/strong><\/span><span style=\"font-weight: 400;\">Primero vamos con la parte de los cgroups y despu\u00e9s una introducci\u00f3n de LXC con similitudes o diferencias con la tecnolog\u00eda Docker.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><strong>Los cgroups de GNU\/Linux o grupos de control, son una caracter\u00edstica del kernel Linux que permite que los procesos se organicen en grupos jer\u00e1rquicos.<\/strong> El objetivo de agrupar los procesos de esta manera es limitar y monitorizar el uso que hacen estos procesos de los recursos. Con la ayuda de los cgroups, cada proceso corre en su propio espacio del kernel y de la memoria pudiendo as\u00ed limitar los recursos de los que dispone.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><strong>LXC, el antecesor de Docker<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">LXC es previo a Docker pero comparten varias similitudes. LXC es una plataforma de contenedores open source que proporciona un conjunto de herramientas, plantillas, bibliotecas y enlaces entre lenguajes. Ofrece un entorno de virtualizaci\u00f3n que puede instalarse en varios sistemas basados en Linux.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Como se comentaba LXC es el antecesor de Docker, pero estos ahora encuentran diferencias entre s\u00ed como las siguientes:\u00a0<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>La herramienta Docker no limita su instalaci\u00f3n \u00fanicamente a los sistemas operativos basados en Linux,<\/strong> ya que puede ser instalado en otros sistemas operativos como Windows o Mac OS.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>LXC es un contenedor de sistema operativo, mientras que Docker es un contenedor de aplicaciones;<\/strong> esto se refleja en que cada contenedor LXC suele tener varios servicios ejecut\u00e1ndose y en cada contenedor de Docker se suele aislar una \u00fanica aplicaci\u00f3n. De este modo, un contenedor LXC se comporta como un sistema operativo funcional, por ello todos los contenedores incluyen como m\u00ednimo todas las funcionalidades b\u00e1sicas de un sistema operativo. Por el contrario, Docker solo virtualiza lo necesario haciendo que este sea extremadamente ligero. Debido a sus caracter\u00edsticas es m\u00e1s ligero la ejecuci\u00f3n de un contenedor Docker que un contenedor\u00a0 LXC.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>Una ventaja de Docker es que,<\/strong> debido a una gran comunidad a la que se le permite alojar sus im\u00e1genes de Docker en un repositorio de manera gratuita y a las grandes distribuidoras que publican im\u00e1genes oficiales, <strong>es muy sencillo obtener im\u00e1genes pre-configuradas para distintas aplicaciones o uso.<\/strong> Las im\u00e1genes LXC tambi\u00e9n pueden compartirse de igual manera en un repositorio pero su uso no es tan extendido como el de DockerHub, el cu\u00e1l es gratuito y de uso muy sencillo para almacenar, compartir u obtener im\u00e1genes.\u00a0<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\"><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone wp-image-24853 aligncenter\" src=\"https:\/\/www.makingscience.com\/wp-content\/uploads\/1\/2022\/06\/Captura-de-pantalla-2022-06-03-a-las-12.25.30-1024x419.png\" alt=\"\" width=\"594\" height=\"243\" \/>\u00a0<\/span><\/p>\n<p style=\"text-align: center;\"><span style=\"font-weight: 400;\">\u00a0<\/span><span style=\"font-weight: 400;\">Imagen : Diferencias entre Docker y LXC\u00a0<\/span><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Continuando con la historia de los or\u00edgenes de Docker, fue en 2013 cuando la empresa dotCloud present\u00f3 de manera p\u00fablica la herramienta Docker y, ante la buena acogida de la comunidad tecnol\u00f3gica, se defini\u00f3 como un proyecto open source. Esto significa que cualquiera podr\u00eda, de manera gratuita, descargar, ejecutar y modificar el c\u00f3digo de Docker. Al igual que en otros proyectos open source, que se expusiese el c\u00f3digo y se ofreciera la posibilidad de mejorarlo hizo que Docker obtuviera una gran fama y ventajas.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">En cuanto al uso de Docker la empresa Apium Hub nos ofrece los siguientes datos:\u00a0<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>2\/3 de las empresas que prueban Docker, lo adoptan.<\/strong> La mayor\u00eda de las compa\u00f1\u00edas que adoptaron Docker ya lo hicieron dentro de los 30 d\u00edas posteriores al uso inicial de la producci\u00f3n, y casi todos los restantes se convierten dentro de los 60 d\u00edas.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><strong>La adopci\u00f3n de Docker real aument\u00f3 un 30% en un a\u00f1o.\u00a0<\/strong><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><strong>PHP, Ruby, Java y Node son los principales frameworks de programaci\u00f3n utilizados en contenedores.<\/strong><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">\u00a0<\/span><\/li>\n<\/ul>\n<h2><strong>\u00bfQu\u00e9 es Docker?\u00a0<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">La tecnolog\u00eda Docker usa el kernel de Linux y las funciones que este ofrece, como pueden ser los cgroups y namespaces, para segregar los procesos.\u00a0\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Los namespaces de GNU\/Linux permiten encapsular recursos globales del sistema de forma aislada, evitando que puedan interferir con procesos que est\u00e9n fuera del namespace. Los cambios en el recurso global son visibles para otros procesos que son miembros del namespace, pero son invisibles para otros procesos fuera del mismo namespace. Ejemplo de uso de los namespace es la configuraci\u00f3n de los network namespace que nos permiten aislar la configuraci\u00f3n de red, IP, firewall o m\u00e1s elementos similares entre distintos namespaces.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Es la combinaci\u00f3n del uso de cgropus y namespaces lo que enmarca la definici\u00f3n de un contenedor en concreto, produciendo que cada uno de los contenedores se puedan ejecutar de manera independiente. Uno de los prop\u00f3sitos de los contenedores Docker es lograr esta independencia. Esto aporta la capacidad de ejecutar varios procesos y aplicaciones por separado mejorando el uso de su infraestructura y, al mismo tiempo, conservando la seguridad, como si se tratase de sistemas aislados, como se observa en la siguiente imagen: Estructura simb\u00f3lica de la herramienta Docker.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><img decoding=\"async\" class=\"alignnone wp-image-24858 aligncenter\" src=\"https:\/\/www.makingscience.com\/wp-content\/uploads\/1\/2022\/06\/Captura-de-pantalla-2022-06-03-a-las-12.25.53.png\" alt=\"\" width=\"604\" height=\"387\" \/>\u00a0<\/span><\/p>\n<p style=\"text-align: center;\"><span style=\"font-weight: 400;\">Imagen : Estructura simb\u00f3lica de la herramienta\u00a0 Docker\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><strong>Docker vs m\u00e1quinas virtuales\u00a0<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Las herramientas del contenedor basado en kernel Linux, como Docker, ofrecen un <strong>modelo de implementaci\u00f3n basado en im\u00e1genes.<\/strong> Esto permite compartir una aplicaci\u00f3n, o un conjunto de servicios, con todas sus dependencias en varios entornos. <strong>Docker tambi\u00e9n automatiza la implementaci\u00f3n de la aplicaci\u00f3n<\/strong> (o conjuntos combinados de procesos que constituyen una aplicaci\u00f3n)<strong> en este entorno de contenedores.<\/strong> Es decir, otra de las ventajas que se suma a la independencia y aislamiento es la gran portabilidad de su uso mediante la posibilidad de compartir im\u00e1genes con control de versiones. La distribuci\u00f3n de las im\u00e1genes de estos contenedores es similar a la de las im\u00e1genes de las VMs (Virtual Machine);\u00a0 la diferencia fundamental es que no hay que virtualizar todo el sistema operativo si no solo lo necesario para ejecutar la aplicaci\u00f3n, esta caracter\u00edstica lo hace extremadamente m\u00e1s ligero.\u00a0<\/span><\/p>\n<p><img decoding=\"async\" class=\"wp-image-24863 aligncenter\" src=\"https:\/\/www.makingscience.com\/wp-content\/uploads\/1\/2022\/06\/Captura-de-pantalla-2022-06-03-a-las-12.26.01-1024x540.png\" alt=\"\" width=\"616\" height=\"325\" \/><\/p>\n<p style=\"text-align: center;\"><span style=\"font-weight: 400;\">\u00a0<\/span><span style=\"font-weight: 400;\">Imagen : Estructura de una m\u00e1quina virtual frente a un contenedor Docker\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">La ejecuci\u00f3n de un contenedor Docker est\u00e1 asociado a una m\u00e1quina, ya sea virtual o f\u00edsica. Esta m\u00e1quina puede ser que sea accedida por distintos usuarios, por ello se debe limitar los permisos de la ejecuci\u00f3n de Docker a \u00fanicamente los usuarios necesarios para evitar creaciones o destrucciones de los contenedores, vol\u00famenes o m\u00e1s elementos de Docker que no sean correctas.<\/span><\/p>\n<h2><\/h2>\n<h2><strong>Conclusi\u00f3n<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">\u00bfDeber\u00edas plantearte implementar Docker en tus proyectos? Creemos que es una muy buena elecci\u00f3n.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Sin analizar en profundidad, Docker nos ofrece varias ventajas sobre c\u00f3mo definir la infraestructura como c\u00f3digo, lo que nos proporciona portabilidad a cualquier entorno e hist\u00f3rico de cambios.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Al definir ese c\u00f3digo en un repositorio permite observar su evoluci\u00f3n y cambios. Esto facilita el trabajo de \u00abvuelta atr\u00e1s\u00bb en caso de que se produzcan errores en las nuevas definiciones del c\u00f3digo que controlan la infraestructura. Todo esto acelera y agiliza los cambios de infraestructura para que los posibles errores tengan la m\u00ednima repercusi\u00f3n en un posible entorno de producci\u00f3n.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Por otro lado, la gran portabilidad de la im\u00e1genes y c\u00f3digo permiten exportar y compartir entre los desarrolladores un mismo entorno de trabajo, combinado con el aislamiento que ofrecen los contenedores docker para que no interfiera quien o donde se est\u00e9 ejecutando.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Adem\u00e1s de todo ello, existe una gran comunidad abierta e im\u00e1genes de Docker oficiales de las aplicaciones m\u00e1s utilizadas, que permiten tenerlas desplegadas en minutos, as\u00ed como im\u00e1genes de la comunidad para todo tipo de aplicaciones y usos.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Los or\u00edgenes de Docker residen en la empresa antes llamada dotCloud Inc, esta misma debe tanto su \u00e9xito actual a la tecnolog\u00eda Docker que el nombre en este momento de la compa\u00f1\u00eda es Docker Inc.\u00a0 El software de Docker nace como un proyecto interno en dotCloud que se dedicaba principalmente a ofrecer un servicio PaaS [&hellip;]<\/p>\n","protected":false},"author":40,"featured_media":25259,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[910],"tags":[302,307],"class_list":["post-24841","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology-ai-es","tag-cloud-es","tag-docker"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/posts\/24841","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/users\/40"}],"replies":[{"embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/comments?post=24841"}],"version-history":[{"count":0,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/posts\/24841\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/media\/25259"}],"wp:attachment":[{"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/media?parent=24841"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/categories?post=24841"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/tags?post=24841"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}