{"id":91905,"date":"2020-08-20T07:42:23","date_gmt":"2020-08-20T05:42:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii"},"modified":"2020-08-20T07:42:23","modified_gmt":"2020-08-20T05:42:23","slug":"chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","title":{"rendered":"Qu\u00e9 es Docker: breve excursi\u00f3n a la historia y las principales abstracciones","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>El 10 de agosto comenz\u00f3 en Slerm <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">un curso en video sobre Docker<\/a><\/noindex>, en el cual lo analizamos por completo, desde las abstracciones b\u00e1sicas hasta los par\u00e1metros de la red. <\/p>\n<p><\/p>\n<p>En este art\u00edculo hablaremos sobre la historia de Docker y sus principales abstracciones: Image, CLI, Dockerfile. La conferencia est\u00e1 dirigida a principiantes, por lo que probablemente no interesar\u00e1 a los usuarios experimentados. No habr\u00e1 sangre, apendicitis ni una profunda inmersi\u00f3n. Solo lo m\u00e1s b\u00e1sico.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Qu\u00e9 es Docker: breve excursi\u00f3n a la historia y las principales abstracciones\" src=\"\/wp-content\/uploads\/2020\/08\/f01af417f24c838577b09bdf90f02fb9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"chto-takoe-docker\">\u00bfQu\u00e9 es Docker?<\/h2>\n<p><\/p>\n<p>Veamos la definici\u00f3n de Docker de Wikipedia.<\/p>\n<p><\/p>\n<blockquote><p>Docker es un software para la automatizaci\u00f3n del despliegue y la gesti\u00f3n de aplicaciones en entornos compatibles con la contenerizaci\u00f3n.<\/p><\/blockquote>\n<p>De esta definici\u00f3n no se entiende nada. Especialmente no queda claro qu\u00e9 significa \u00aben entornos compatibles con la contenerizaci\u00f3n\u00bb. Para entenderlo, volvamos al pasado. Comencemos por la \u00e9poca que llamo 'la era monol\u00edtica'.<\/p>\n<p><\/p>\n<h2 id=\"monolitnaya-era\">Era monol\u00edtica<\/h2>\n<p><\/p>\n<p>La era monol\u00edtica es a principios de los 2000, cuando todas las aplicaciones eran monol\u00edticas, con un mont\u00f3n de dependencias. El desarrollo tomaba tiempo. Adem\u00e1s, no hab\u00eda tantos servidores, todos los conoc\u00edamos por nombre y los monitore\u00e1bamos. Hay una comparaci\u00f3n divertida:<\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"Od7e6hqis7A\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/Od7e6hqis7A\/hqdefault.jpg\" alt=\"Reproducir video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p>Las mascotas son animales dom\u00e9sticos. En la era monol\u00edtica, trat\u00e1bamos a nuestros servidores como a mascotas, cuid\u00e1ndolos y mim\u00e1ndolos, soplando el polvo. Para gestionar mejor los recursos, utiliz\u00e1bamos virtualizaci\u00f3n: tom\u00e1bamos un servidor y lo divid\u00edamos en varias m\u00e1quinas virtuales, garantizando as\u00ed el aislamiento del entorno.<\/p>\n<p><\/p>\n<h2 id=\"sistemy-virtualizacii-na-baze-gipervizora\">Sistemas de virtualizaci\u00f3n basados en hipervisores<\/h2>\n<p><\/p>\n<p>Seguro que todos han o\u00eddo hablar de sistemas de virtualizaci\u00f3n: VMware, VirtualBox, Hyper-V, Qemu KVM, etc. Proporcionan aislamiento de aplicaciones y gesti\u00f3n de recursos, pero tambi\u00e9n tienen desventajas. Para implementar la virtualizaci\u00f3n, se necesita un hipervisor. Y el hipervisor implica un sobrecosto de recursos. Adem\u00e1s, la m\u00e1quina virtual suele ser un gran bicho: una imagen pesada, con su sistema operativo, Nginx, Apache, tal vez MySQL. La imagen es grande y es inc\u00f3modo operar con m\u00e1quinas virtuales. Como consecuencia, trabajar con virtualizaciones puede ser lento. Para solucionar este problema, se crearon sistemas de virtualizaci\u00f3n a nivel de n\u00facleo.<\/p>\n<p><\/p>\n<h2 id=\"sistemy-virtualizacii-na-urovne-yadra\">Sistemas de virtualizaci\u00f3n a nivel de n\u00facleo<\/h2>\n<p><\/p>\n<p>La virtualizaci\u00f3n a nivel de n\u00facleo es soportada por sistemas como OpenVZ, Systemd-nspawn, LXC. Un ejemplo destacado de esta virtualizaci\u00f3n es LXC (Linux Containers). <\/p>\n<p><\/p>\n<p>LXC \u2014 un sistema de virtualizaci\u00f3n a nivel de sistema operativo para ejecutar m\u00faltiples instancias aisladas del sistema operativo Linux en un solo nodo. LXC no utiliza m\u00e1quinas virtuales, sino que crea un entorno virtual con su propio espacio de procesos y pila de red.<\/p>\n<p><\/p>\n<p>Esencialmente, LXC crea contenedores. \u00bfCu\u00e1l es la diferencia entre m\u00e1quinas virtuales y contenedores?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Qu\u00e9 es Docker: breve excursi\u00f3n a la historia y las principales abstracciones\" src=\"\/wp-content\/uploads\/2020\/08\/55afdcfd700d4869c9de488033a8e314.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un contenedor no es adecuado para aislar procesos: en los sistemas de virtualizaci\u00f3n a nivel de n\u00facleo se encuentran vulnerabilidades que permiten salir del contenedor al host. Por lo tanto, si necesitas aislar algo, es mejor usar una m\u00e1quina virtual.<\/p>\n<p><\/p>\n<p>Las diferencias entre virtualizaci\u00f3n y contenedorizaci\u00f3n se pueden ver en el esquema.<br \/>\nExisten hipervisores de hardware, hipervisores sobre sistemas operativos y contenedores. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Qu\u00e9 es Docker: breve excursi\u00f3n a la historia y las principales abstracciones\" src=\"\/wp-content\/uploads\/2020\/08\/a0c06e9adc1fab3b4b5e9e1b05b51d66.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Los hipervisores 'de hierro' son una gran herramienta si realmente quieres aislar algo. Porque hay posibilidad de aislamiento a nivel de p\u00e1ginas de memoria y procesadores.<\/p>\n<p><\/p>\n<p>Existen hipervisores como programas, y hay contenedores, de los cuales vamos a hablar a continuaci\u00f3n. En los sistemas de contenedorizaci\u00f3n no hay hipervisor, sino un Motor de Contenedores que crea y gestiona los contenedores. Esta es una tecnolog\u00eda m\u00e1s ligera, por lo que, gracias a su trabajo con el n\u00facleo, la sobrecarga es menor o no existe en absoluto.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"chto-ispolzuetsya-dlya-konteynerizacii-na-urovne-yadra\">Lo que se utiliza para la contenedorizaci\u00f3n a nivel de n\u00facleo<\/h2>\n<p>Las principales tecnolog\u00edas que permiten crear un contenedor aislado de otros procesos son Namespaces y Control Groups.<\/p>\n<p>Namespaces: PID, Networking, Mount y User. Hay m\u00e1s, pero para simplicidad nos detendremos en estos.<\/p>\n<p>El Namespace PID limita los procesos. Cuando, por ejemplo, creamos un Namespace PID y colocamos un proceso all\u00ed, se convierte en PID 1. Normalmente, en los sistemas PID 1 es systemd o init. Por lo tanto, cuando colocamos un proceso en un nuevo namespace, tambi\u00e9n recibe PID 1.<\/p>\n<p>El Networking Namespace permite restringir\/aislar la red y colocar sus interfaces dentro de \u00e9l. Mount es la restricci\u00f3n del sistema de archivos. User es la restricci\u00f3n de usuarios.<\/p>\n<p>Control Groups: Memoria, CPU, IOPS, Red \u2014 en total hay alrededor de 12 configuraciones. Tambi\u00e9n se les llama Cgroups (\"C grupos\").<\/p>\n<p>Los Control Groups gestionan los recursos para el contenedor. A trav\u00e9s de los Control Groups podemos decir que el contenedor no debe consumir m\u00e1s de cierta cantidad de recursos.<\/p>\n<p>Para que la contenedorizaci\u00f3n funcione plenamente, se utilizan tecnolog\u00edas adicionales: Capabilities, Copy-on-write y otras.<\/p>\n<p>Capabilities significa que le decimos al proceso lo que puede hacer y lo que no. A nivel del n\u00facleo, son simplemente mapas de bits con numerosos par\u00e1metros. Por ejemplo, el usuario root tiene privilegios completos y puede hacer todo. El servidor de tiempo puede cambiar la hora del sistema: tiene capacidades en Time Capsule, y eso es todo. A trav\u00e9s de los privilegios, se pueden configurar restricciones flexibles para los procesos, asegurando as\u00ed una mayor seguridad.<\/p>\n<p>El sistema Copy-on-write nos permite trabajar con im\u00e1genes de Docker de manera m\u00e1s eficiente.<\/p>\n<p><em>Actualmente, Docker tiene problemas con la compatibilidad de Cgroups v2, por lo que este art\u00edculo se centra en Cgroups v1.<\/em><\/p><\/blockquote>\n<p>Pero volvamos a la historia. <\/p>\n<p><\/p>\n<p>Cuando surgieron los sistemas de virtualizaci\u00f3n a nivel de n\u00facleo, comenzaron a utilizarse activamente. Se elimin\u00f3 la sobrecarga en el hipervisor, pero algunos problemas persistieron:<\/p>\n<p><\/p>\n<ul>\n<li>im\u00e1genes grandes: en OpenVZ se empujan sistemas operativos, bibliotecas y un mont\u00f3n de software diverso, y al final la imagen sigue siendo considerablemente grande;<\/li>\n<li>no hay un est\u00e1ndar adecuado para empaquetar y entregar, por lo que permanece el problema de las dependencias. Hay situaciones en las que dos trozos de c\u00f3digo utilizan una biblioteca, pero con versiones diferentes. Puede haber un conflicto entre ellas.<\/li>\n<\/ul>\n<p><\/p>\n<p>Para resolver todos estos problemas, lleg\u00f3 la siguiente era.<\/p>\n<p><\/p>\n<h2 id=\"era-konteynerov\">La era de los contenedores<\/h2>\n<p><\/p>\n<p>Cuando lleg\u00f3 la Era de los contenedores, cambi\u00f3 la filosof\u00eda de trabajo con ellos:<\/p>\n<p><\/p>\n<ul>\n<li>Un proceso \u2014 un contenedor.<\/li>\n<li>Todas las dependencias necesarias para el proceso se entregan en su contenedor. Esto requiere descomponer monolitos en microservicios.<\/li>\n<li>Cuanto m\u00e1s peque\u00f1a sea la imagen, mejor; menos vulnerabilidades posibles, m\u00e1s r\u00e1pido se despliega, y as\u00ed sucesivamente.<\/li>\n<li>Las instancias se vuelven ef\u00edmeras. <\/li>\n<\/ul>\n<p><\/p>\n<p>Recuerden, dije algo sobre mascotas vs ganado? Antes, las instancias eran similares a mascotas, pero ahora son como ganado. Antes hab\u00eda un monolito \u2014 una aplicaci\u00f3n. Ahora son 100 microservicios, 100 contenedores. Algunos contenedores pueden tener 2-3 r\u00e9plicas. Ya no es tan importante controlar cada contenedor. Lo que realmente importa es la disponibilidad del servicio en s\u00ed: lo que hace este conjunto de contenedores. Esto cambia los enfoques en el monitoreo.<\/p>\n<p><\/p>\n<p>En 2014-2015, se produjo el auge de Docker \u2014 la tecnolog\u00eda de la que hablaremos ahora.<\/p>\n<p><\/p>\n<p>Docker ha cambiado la filosof\u00eda y estandarizado el empaquetado de aplicaciones. Con Docker, podemos empaquetar una aplicaci\u00f3n, enviarla a un repositorio, descargarla de all\u00ed y desplegarla. <\/p>\n<p><\/p>\n<p>En un contenedor de Docker incluimos todo lo necesario, por lo que se resuelve el problema de las dependencias. Docker garantiza la reproducibilidad. Creo que muchos se han encontrado con la falta de reproducibilidad: todo funciona bien en tu m\u00e1quina, lo subes a producci\u00f3n y deja de funcionar. Con Docker, este problema se elimina. Si tu contenedor Docker se inicia y hace lo que debe hacer, hay una alta probabilidad de que funcione en producci\u00f3n y haga lo mismo all\u00ed.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"otstuplenie-pro-overhed\">Una digresi\u00f3n sobre el overhead<\/h2>\n<p>Sobre el overhead hay debates constantes. Algunos consideran que Docker no implica una carga adicional, ya que utiliza el n\u00facleo de Linux y todos sus procesos necesarios para la contenedorizaci\u00f3n. Dicen que 'si afirmas que Docker es overhead, entonces el n\u00facleo de Linux tambi\u00e9n lo es'.<\/p>\n<p>Por otro lado, si profundizamos, en Docker hay algunas cosas que, con cierta reticencia, se pueden considerar como overhead.<\/p>\n<p>La primera es el namespace PID. Cuando colocamos un proceso en un namespace, se le asigna el PID 1. Al mismo tiempo, este proceso tiene otro PID que se encuentra en el namespace del host, fuera del contenedor. Por ejemplo, si hemos lanzado Nginx en el contenedor, se convierte en el PID 1 (proceso maestro). Y en el host, su PID es 12623. Es dif\u00edcil decir cu\u00e1n significativo es esto como overhead.<\/p>\n<p>La segunda cuesti\u00f3n son los Cgroups. Tomemos los Cgroups de memoria, es decir, la posibilidad de limitar la memoria de un contenedor. Al activarlo, se activan contadores, contabilidad de memoria: el n\u00facleo necesita entender cu\u00e1ntas p\u00e1ginas han sido asignadas y cu\u00e1ntas quedan libres para ese contenedor. Esto podr\u00eda ser overhead, pero no he encontrado investigaciones precisas sobre c\u00f3mo afecta al rendimiento, y yo mismo no he notado que una aplicaci\u00f3n ejecut\u00e1ndose en Docker de repente pierda rendimiento. <\/p>\n<p>Y un \u00faltimo comentario sobre el rendimiento. Algunos par\u00e1metros del n\u00facleo se transfieren del host al contenedor. En particular, algunos par\u00e1metros de red. Por lo tanto, si deseas ejecutar algo de alto rendimiento en Docker, por ejemplo, algo que use intensivamente la red, al menos deber\u00edas ajustar esos par\u00e1metros. Por ejemplo, nf_conntrack. <\/p><\/blockquote>\n<p><\/p>\n<h2 id=\"o-koncepcii-docker\">Sobre el concepto de Docker<\/h2>\n<p><\/p>\n<p>Docker consta de varios componentes: <\/p>\n<p><\/p>\n<ol>\n<li>Docker Daemon \u2014 el motor de contenedores; ejecuta contenedores. <\/li>\n<li>Docker CII \u2014 la utilidad para gestionar Docker.<\/li>\n<li>Dockerfile \u2014 instrucciones sobre c\u00f3mo construir una imagen.<\/li>\n<li>Imagen \u2014 la imagen que se despliega en el contenedor.<\/li>\n<li>Contenedor.<\/li>\n<li>Docker registry \u2014 almacenamiento de im\u00e1genes.<\/li>\n<\/ol>\n<p><\/p>\n<p>Esquem\u00e1ticamente, se ve aproximadamente as\u00ed:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Qu\u00e9 es Docker: breve excursi\u00f3n a la historia y las principales abstracciones\" src=\"\/wp-content\/uploads\/2020\/08\/73ccc02c14485f72cfd7c64e3074f3b9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>En Docker_host, funciona el daemon de Docker, que lanza contenedores. Hay un cliente que env\u00eda comandos: construir imagen, descargar imagen, ejecutar contenedor. El daemon de Docker accede al registry y ejecuta esos comandos. El cliente de Docker puede comunicarse localmente (a trav\u00e9s de un socket Unix) y por TCP desde un host remoto.<\/p>\n<p><\/p>\n<p>Vamos a revisar cada componente.<\/p>\n<p><\/p>\n<p><u>Docker daemon (daemon)<\/u> \u2014 es la parte del servidor, funciona en la m\u00e1quina host: descarga im\u00e1genes y lanza contenedores a partir de ellas, crea redes entre contenedores, recopila registros. Cuando decimos 'crea una imagen', el daemon tambi\u00e9n se encarga de esto.<\/p>\n<p><\/p>\n<p><u>Docker CLI<\/u> \u2014 la parte cliente de Docker, una herramienta de l\u00ednea de comandos para trabajar con el daemon. Repito, puede funcionar no solo localmente, sino tambi\u00e9n a trav\u00e9s de la red. <\/p>\n<p><\/p>\n<p><strong>Comandos b\u00e1sicos:<\/strong><\/p>\n<p><\/p>\n<p>docker ps \u2014 muestra los contenedores que est\u00e1n actualmente en ejecuci\u00f3n en el host de Docker.<br \/>\ndocker images \u2014 muestra las im\u00e1genes descargadas localmente.<br \/>\ndocker search  \u2014 busca una imagen en el registry.<br \/>\ndocker pull  \u2014 descarga una imagen del registry a la m\u00e1quina.<br \/>\ndocker build &lt;&gt; \u2014 construye una imagen.<br \/>\ndocker run  \u2014 ejecuta el contenedor.<br \/>\ndocker rm  \u2014 elimina el contenedor.<br \/>\ndocker logs  \u2014 registros del contenedor.<br \/>\ndocker start\/stop\/restart  \u2014 gestionar el contenedor.\n<\/p>\n<p>Si dominas estos comandos y los usas con confianza, considera que has dominado Docker al 70% a nivel de usuario.<\/p>\n<p><\/p>\n<p><u>Dockerfile<\/u> \u2014 instrucciones para crear una imagen. Casi cada comando de las instrucciones es una nueva capa. Veamos un ejemplo.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Qu\u00e9 es Docker: breve excursi\u00f3n a la historia y las principales abstracciones\" src=\"\/wp-content\/uploads\/2020\/08\/4d61b58d0d0d8b2e4ddbbfe573f34f7e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>As\u00ed es como se ve un Dockerfile: a la izquierda est\u00e1n los comandos, a la derecha \u2014 los argumentos. Cada comando que hay (y que se escribe en el Dockerfile) crea una nueva capa en la imagen. <\/p>\n<p><\/p>\n<p>Incluso al observar la parte izquierda, se puede intuir lo que est\u00e1 sucediendo. Decimos: \"crea una carpeta para nosotros\" \u2014 eso es una capa. \"Haz que la carpeta sea operativa\" \u2014 eso es otra capa, y as\u00ed sucesivamente. La torta en capas facilita la vida. Si creo otro Dockerfile y en la \u00faltima l\u00ednea cambio algo \u2014 no ejecutar\u00e9 \"python\" \"main.py\", sino algo diferente, o instalar\u00e9 dependencias de otro archivo \u2014 entonces las capas anteriores se reutilizar\u00e1n como cach\u00e9.<\/p>\n<p><\/p>\n<p><u>Imagen<\/u> \u2014 es un paquete de contenedor, desde el cual se inician los contenedores. Si vemos Docker desde la perspectiva de un gestor de paquetes (como si estuvi\u00e9ramos trabajando con paquetes deb o rpm), entonces la imagen es esencialmente un paquete rpm. A trav\u00e9s de yum install podemos instalar una aplicaci\u00f3n, eliminarla, encontrarla en el repositorio, descargarla. Aqu\u00ed es algo similar: los contenedores se inician desde la imagen, se almacenan en el Docker registry (analog\u00eda con yum, en el repositorio), y cada imagen tiene un hash SHA-256, un nombre y una etiqueta.<\/p>\n<p><\/p>\n<p>La imagen se crea seg\u00fan las instrucciones del Dockerfile. Cada instrucci\u00f3n del Dockerfile crea una nueva capa. Las capas pueden ser reutilizadas.<\/p>\n<p><\/p>\n<p><u>Docker registry<\/u> \u2014 es un repositorio de im\u00e1genes Docker. Analog\u00eda con los sistemas operativos, Docker tiene un registro est\u00e1ndar p\u00fablico \u2014 dockerhub. Pero tambi\u00e9n se puede construir su propio repositorio, su propio Docker registry. <\/p>\n<p><\/p>\n<p><u>Contenedor<\/u> \u2014 es lo que se inicia desde la imagen. Se cre\u00f3 la imagen seg\u00fan las instrucciones del Dockerfile, luego la iniciamos desde esta imagen. Este contenedor est\u00e1 aislado de otros contenedores y debe contener todo lo necesario para el funcionamiento de la aplicaci\u00f3n. A su vez, un contenedor \u2014 un proceso. A veces es necesario crear dos procesos, pero eso contraviene un poco la ideolog\u00eda de Docker.<\/p>\n<p><\/p>\n<p>El requisito \"un contenedor \u2014 un proceso\" est\u00e1 relacionado con el PID Namespace. Cuando un proceso con PID 1 se inicia en un Namespace, si de repente muere, todo el contenedor tambi\u00e9n muere. Sin embargo, si hay dos procesos en marcha: uno vive y el otro muere, el contenedor seguir\u00e1 estando vivo. Pero eso se refiere a las Mejoras Pr\u00e1cticas, hablaremos de ellas en otros materiales.<\/p>\n<p><\/p>\n<p>Puedes estudiar en detalle las caracter\u00edsticas y el programa completo del curso en el siguiente enlace: \u00ab<noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">Curso de video sobre Docker<\/a><\/noindex>\u00bb. <\/p>\n<p><\/p>\n<p><em>Autor: Marsel Ibraev, administrador de Kubernetes certificado, ingeniero en pr\u00e1ctica en la empresa Southbridge, conferencista y desarrollador de cursos Slyrm.<\/em><\/p>\n<p>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/515508\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0431 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f Docker \u0438 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f\u0445: Image, Cli, Dockerfile. \u041b\u0435\u043a\u0446\u0438\u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0440\u044f\u0434 \u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u043e\u043f\u044b\u0442\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c. \u0417\u0434\u0435\u0441\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u0440\u043e\u0432\u0438, \u0430\u043f\u043f\u0435\u043d\u0434\u0438\u043a\u0441\u0430 \u0438 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91906,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91905","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Docker: \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-20T05:42:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-20T05:42:23+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47\u00bfQu\u00e9 es Docker: un breve recorrido por la historia y las principales abstracciones | ProHoster","description":"El 10 de agosto comenz\u00f3 en Slyrm un videocurso sobre Docker, en el que lo analizamos completamente \u2014 desde las abstracciones b\u00e1sicas hasta los par\u00e1metros de la red.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Docker: \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 | ProHoster","og:description":"10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-20T05:42:23+00:00","article:modified_time":"2020-08-20T05:42:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91905","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:18:28","updated":"2022-10-01 05:09:53","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/91905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=91905"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/91905\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/91906"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=91905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=91905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=91905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}