Software para implementar aplicaciones en contenedores
Docker es un conjunto de productos de plataforma como servicio (PaaS) que utilizan virtualización a nivel de sistema operativo para entregar software en paquetes llamados contenedores . [4]
El servicio tiene niveles gratuitos y premium. El software que aloja los contenedores se llama Docker Engine . [5] Se lanzó por primera vez en 2013 y está desarrollado por Docker, Inc. [6]
Docker es una herramienta que se utiliza para automatizar la implementación de aplicaciones en contenedores livianos para que las aplicaciones puedan funcionar de manera eficiente en diferentes entornos de forma aislada.
Fondo
Los contenedores están aislados unos de otros y agrupan su propio software, bibliotecas y archivos de configuración; pueden comunicarse entre sí a través de canales bien definidos. [7] Debido a que todos los contenedores comparten los servicios de un único kernel del sistema operativo , utilizan menos recursos que las máquinas virtuales . [5]
Debido a que los contenedores Docker son livianos , un único servidor o máquina virtual puede ejecutar varios contenedores simultáneamente. [13] Un análisis de 2018 encontró que un caso de uso típico de Docker implica ejecutar ocho contenedores por host, y que una cuarta parte de las organizaciones analizadas ejecutan 18 o más por host. [14] También se puede instalar en una computadora de placa única como la Raspberry Pi . [15]
El soporte del kernel de Linux para espacios de nombres en su mayoría [16] aísla la vista de una aplicación del entorno operativo, incluidos árboles de procesos, redes, ID de usuario y sistemas de archivos montados, mientras que los cgroups del kernel proporcionan limitación de recursos para la memoria y la CPU. [17] Desde la versión 0.9, Docker incluye su propio componente (llamado libcontainer ) para usar las funciones de virtualización proporcionadas directamente por el kernel de Linux, además de usar interfaces de virtualización abstractas a través de libvirt , LXC y systemd-nspawn . [18] [8] [9] [19]
Docker implementa una API de alto nivel para proporcionar contenedores livianos que ejecutan procesos de forma aislada. [20]
Los archivos Dockerfile se pueden licenciar bajo una licencia de código abierto. El alcance de dicha declaración de licencia es solo el Dockerfile y no la imagen del contenedor.
Componentes
La oferta de software como servicio Docker consta de tres componentes:
Software: el demonio Docker , llamado dockerd, es un proceso persistente que administra contenedores Docker y maneja objetos contenedores. El demonio escucha las solicitudes enviadas a través de la API de Docker Engine. [21] [22] El programa cliente Docker, llamado docker, proporciona una interfaz de línea de comandos (CLI) que permite a los usuarios interactuar con los demonios Docker. [21] [23]
Objetos: los objetos Docker son diversas entidades que se utilizan para ensamblar una aplicación en Docker. Las principales clases de objetos Docker son imágenes, contenedores y servicios. [21]
Un contenedor Docker es un entorno encapsulado y estandarizado que ejecuta aplicaciones. [24] Un contenedor se gestiona mediante la API o CLI de Docker . [21] Es un proceso creado a partir de una imagen.
Una imagen de Docker es una plantilla de solo lectura que se utiliza para crear contenedores. Las imágenes se utilizan para almacenar y enviar aplicaciones. [21] Es una imagen de proceso .
Un servicio Docker permite escalar contenedores en múltiples demonios Docker. El resultado se conoce como enjambre , un conjunto de demonios cooperativos que se comunican a través de la API de Docker. [21]
Registros: un registro de Docker es un repositorio de imágenes de Docker. Los clientes de Docker se conectan a registros para descargar ("extraer") imágenes para su uso o cargar ("empujar") imágenes que han creado. Los registros pueden ser públicos o privados. El principal registro público es Docker Hub. Docker Hub es el registro predeterminado donde Docker busca imágenes. [21] [25] Los registros Docker también permiten la creación de notificaciones basadas en eventos. [26]
Un ejemplo ilustrativo de un Dockerfile: [27]
ARG CODE_VERSION = últimoDESDE ubuntu:${CODE_VERSION}COPIAR ./archivoejemplo.txt /archivoejemplo.txtENV MY_ENV_VARIABLE = "valor_ejemplo"EJECUTAR apt-get update# Montar un directorio desde el volumen Docker# Nota: Esto generalmente se especifica en el comando 'docker run'.VOLUMEN [ "/mivolumen" ]# Exponer un puerto (22 para SSH)EXPONER 22
Herramientas
Docker Compose es una herramienta para definir y ejecutar aplicaciones Docker de múltiples contenedores. [28] Utiliza archivos YAML para configurar los servicios de la aplicación y realiza el proceso de creación y puesta en marcha de todos los contenedores con un solo comando. La docker-composeutilidad CLI permite a los usuarios ejecutar comandos en varios contenedores a la vez; por ejemplo, crear imágenes, escalar contenedores, ejecutar contenedores que estaban detenidos y más. [29] Los comandos relacionados con la manipulación de imágenes u opciones interactivas para el usuario no son relevantes en Docker Compose porque se dirigen a un contenedor. [30] El archivo docker-compose.yml se utiliza para definir los servicios de una aplicación e incluye varias opciones de configuración. Por ejemplo, la buildopción define opciones de configuración como la ruta de Dockerfile, la commandopción permite anular los comandos predeterminados de Docker y más. [31] La primera versión beta pública de Docker Compose (versión 0.0.1) se lanzó el 21 de diciembre de 2013. [32] La primera versión lista para producción (1.0) estuvo disponible el 16 de octubre de 2014. [33]
Docker Swarm proporciona funcionalidad de agrupación en clústeres nativa para contenedores Docker, que convierte un grupo de motores Docker en un único motor Docker virtual. [34] En Docker 1.12 y superiores, el modo Swarm está integrado con Docker Engine. [35] La utilidad docker swarmCLI [36] permite a los usuarios ejecutar contenedores Swarm, crear tokens de descubrimiento, enumerar nodos en el clúster y más. [37] La docker nodeutilidad CLI permite a los usuarios ejecutar varios comandos para administrar nodos en un enjambre, por ejemplo, enumerar los nodos en un enjambre, actualizar nodos y eliminar nodos del enjambre. [38] Docker gestiona enjambres utilizando el algoritmo de consenso Raft . Según Raft, para que se realice una actualización, la mayoría de los nodos de Swarm deben estar de acuerdo con la actualización. [39] [40]
Docker Volume facilita la persistencia independiente de los datos, permitiendo que los datos permanezcan incluso después de que se elimine o vuelva a crear el contenedor. [41]
Historia
Docker Inc. fue fundada por Kamel Founadi, Solomon Hykes y Sebastien Pahl [42] durante el grupo incubadora de startups Y Combinator Summer 2010 y se lanzó en 2011. [43] La startup también fue una de las 12 startups en la primera cohorte de Founder's Den . [44] Hykes inició el proyecto Docker en Francia como un proyecto interno dentro de dotCloud , una empresa de plataforma como servicio . [45]
Docker debutó al público en Santa Clara en PyCon en 2013. [46] Fue lanzado como código abierto en marzo de 2013. [20] En ese momento, usaba LXC como su entorno de ejecución predeterminado. Un año después, con el lanzamiento de la versión 0.9, Docker reemplazó LXC con su propio componente, libcontainer , que fue escrito en el lenguaje de programación Go . [18] [47]
En 2017, Docker creó el proyecto Moby para la investigación y el desarrollo abiertos. [48]
15 de octubre de 2014: Microsoft anunció la integración del motor Docker en Windows Server , así como soporte nativo para la función de cliente Docker en Windows. [50] [51]
Noviembre de 2014: se anunciaron los servicios de contenedores Docker para Amazon Elastic Compute Cloud (EC2). [52]
10 de noviembre de 2014: Docker anunció una asociación con Stratoscale . [53]
4 de diciembre de 2014: IBM anunció una asociación estratégica con Docker que permite a Docker integrarse más estrechamente con IBM Cloud. [54]
22 de junio de 2015: Docker y varias otras empresas anunciaron que están trabajando en un nuevo estándar independiente del proveedor y del sistema operativo para contenedores de software. [55] [56]
Diciembre de 2015: Oracle Cloud agregó soporte para contenedores Docker después de adquirir StackEngine , una startup de contenedores Docker. [57]
Abril de 2016: Windocks, un proveedor de software independiente, lanzó una adaptación del proyecto de código abierto de Docker para Windows, compatible con Windows Server 2012 R2 y Server 2016, con todas las ediciones de SQL Server 2008 en adelante. [58]
Mayo de 2016: el análisis mostró que las siguientes organizaciones son los principales contribuyentes a Docker: el equipo de Docker, Cisco , Google , Huawei , IBM , Microsoft y Red Hat . [59]
8 de junio de 2016: Microsoft anunció que Docker ahora se puede usar de forma nativa en Windows 10 . [60]
Enero de 2017: un análisis de las menciones del perfil de LinkedIn mostró que la presencia de Docker creció un 160 % en 2016. [61]
6 de mayo de 2019: Microsoft anunció la segunda versión del subsistema de Windows para Linux (WSL). Docker, Inc. anunció que ha comenzado a trabajar en una versión de Docker para Windows que se ejecuta en WSL 2. [62] En particular, esto significa que Docker puede ejecutarse en Windows 10 Home (anteriormente estaba limitado a Windows Pro y Enterprise ya que usado Hyper-V).
Agosto de 2020: Microsoft anunció un backport de WSL2 para las versiones 1903 y 1909 de Windows 10 (anteriormente, WSL2 solo estaba disponible en la versión 2004) [63] y los desarrolladores de Docker anunciaron la disponibilidad de Docker para estas plataformas. [64]
Agosto de 2021: Docker Desktop para Windows y MacOS ya no es gratuito para usuarios empresariales. Docker puso fin al uso gratuito de Docker Desktop para clientes empresariales más grandes y reemplazó su plan gratuito por un plan personal. Docker en distribuciones de Linux no se ve afectado. [sesenta y cinco]
Diciembre de 2023: Docker adquirió AtomicJar para ampliar sus capacidades de prueba. [66]
^ Barbier, Julien (9 de junio de 2014). "Ya está aquí: Docker 1.0". Docker . Docker, Inc. Consultado el 30 de septiembre de 2019 .
^ "Versión 25.0.3". 7 de febrero de 2024 . Consultado el 19 de febrero de 2024 .
^ "Código fuente de Docker". repositorio acoplable/distribución . Docker, Inc. 12 de octubre de 2015 . Consultado el 24 de octubre de 2015 – vía GitHub .
^ O'Gara, Maureen (26 de julio de 2013). "Ben Golub, que vendió Gluster a Red Hat, ahora ejecuta dotCloud". Medios SYS-CON. Archivado desde el original el 13 de septiembre de 2019.
^ ab "¿Qué es un contenedor?". docker.com . Docker, Inc. Consultado el 13 de mayo de 2019 .
^ Ratan, Vivek (8 de febrero de 2017). "Docker: uno de los favoritos en el mundo DevOps". Código abierto para U. Consultado el 14 de junio de 2017 .
^ "Preguntas frecuentes (FAQ) de Docker". 2 de marzo de 2019.
^ ab "Docker 0.9: Presentación de controladores de ejecución y libcontainer". Blog acoplable . Docker, Inc. 10 de marzo de 2014 . Consultado el 20 de enero de 2015 .
^ ab Noyes, Katherine (1 de agosto de 2013). "Docker: un 'contenedor de envío' para código Linux". Linux.com . Archivado desde el original el 8 de agosto de 2013 . Consultado el 9 de agosto de 2013 .
^ "Seleccione la documentación del controlador de almacenamiento". Documentación acoplable . Archivado desde el original el 6 de diciembre de 2016 . Consultado el 7 de diciembre de 2016 .
^ "Documentación de Docker: requisitos del kernel". docker.readthedocs.org . 4 de enero de 2014. Archivado desde el original el 21 de agosto de 2014 . Consultado el 20 de agosto de 2014 .
^ "Comience a usar Docker para Mac". docker.com . Docker, Inc. Consultado el 27 de septiembre de 2018 .
^ K., Chris (14 de enero de 2019). "Contenedores ligeros de Windows: uso del aislamiento de procesos de Docker en Windows 10". Usuario de poder . Consultado el 2 de agosto de 2019 . contenedores reales más "ligeros" (a través del llamado aislamiento de procesos), donde los procesos en contenedores se ejecutan directamente en el sistema host; todos los procesos en el host y en los contenedores comparten el mismo kernel de Windows. Esto es similar a cómo funcionan los contenedores en Linux.
^ "8 datos sorprendentes sobre la adopción real de Docker". Perro de datos . Junio de 2018 . Consultado el 4 de septiembre de 2019 .
^ Gupta, Devender (13 de octubre de 2022). "Cómo instalar Docker en Raspberry Pi". Gizmoxo . Consultado el 15 de octubre de 2022 .
^ Walsh, Dan (15 de septiembre de 2014). "Otra razón más por la que los contenedores no contienen: llaveros de kernel". proyectoatomic.io . Consultado el 13 de abril de 2015 .
^ "Limitar los recursos de un contenedor". Documentación de Docker . Consultado el 7 de marzo de 2018 .
^ ab Vaughan-Nichols, Steven J. (11 de junio de 2014). "Docker libcontainer unifica los poderes de los contenedores de Linux". ZDNet . Consultado el 30 de julio de 2014 .
^ "libcontainer: implementación de referencia para contenedores". repositorio acoplable/libcontainer . Docker, Inc. Consultado el 30 de julio de 2014 – vía GitHub .
^ ab Avram, Abel (27 de marzo de 2013). "Docker: implementaciones de software automatizadas y consistentes". InfoQ . Consultado el 9 de agosto de 2013 .
^ abcdefg "Descripción general de Docker". Documentación de Docker . Docker, Inc. Consultado el 26 de febrero de 2018 .
^ "acoplado". Documentación de Docker . Docker, Inc. Consultado el 26 de febrero de 2018 .
^ "Utilice la línea de comando de Docker". Documentación de Docker . Docker, Inc. Consultado el 26 de febrero de 2018 .
^ "El ecosistema Docker: una introducción a los componentes comunes". www.digitalocean.com . Consultado el 26 de febrero de 2018 .
^ "Acerca del registro". Documentación de Docker . Docker, Inc. Consultado el 26 de febrero de 2018 .
^ "Trabajar con notificaciones". 2 de marzo de 2019.
^ "Referencia del archivo Docker". Documentación de Docker . 14 de noviembre de 2023 . Consultado el 30 de noviembre de 2023 .
^ "Descripción general de Docker Compose". Documentación de Docker . Docker, Inc. Consultado el 6 de julio de 2017 .
^ "Redactar referencia de línea de comandos". Documentación de Docker . Docker, Inc. Consultado el 28 de febrero de 2018 .
^ "Orquestar contenedores para el desarrollo con Docker Compose". vía @codeship . 27 de mayo de 2015 . Consultado el 28 de febrero de 2018 .
^ "Referencia de la versión 3 del archivo de redacción". Documentación de Docker . Docker, Inc. Consultado el 28 de febrero de 2018 .
^ Primer hombre, Ben (21 de diciembre de 2013). "Versión 0.0.1". ventana acoplable/componer . Docker, Inc. – vía GitHub .
^ Prasad, Aanand (16 de octubre de 2014). "Versión 1.0.0". ventana acoplable/componer . Docker, Inc. – vía GitHub .
^ "Ocho herramientas de orquestación de contenedores que debe conocer". Linux.com . 12 de abril de 2017 . Consultado el 6 de julio de 2017 .
^ "Enjambre Docker". Documentación de Docker . Docker, Inc. Consultado el 6 de julio de 2017 .
^ "Enjambre de Docker". 4 de junio de 2021.
^ "Referencia de línea de comandos de Swarm". Documentación de Docker . Docker, Inc. Consultado el 28 de febrero de 2018 .
^ "nodo acoplable". Documentación de Docker . Consultado el 28 de febrero de 2018 .
^ "Enjambre Docker 101". aquasec.com . Consultado el 28 de febrero de 2018 .
^ "Algoritmo de consenso de balsa". balsa.github.io . Consultado el 28 de febrero de 2018 .
^ "Guías de Docker Desktop y Docker". Guía de Docker . 25 de abril de 2021. Archivado desde el original el 25 de abril de 2021 . Consultado el 25 de abril de 2021 .
^ Hykes, Solomon (28 de marzo de 2018). "Hasta la vista". docker.com . Archivado desde el original el 12 de enero de 2021 . Consultado el 23 de enero de 2021 .
^ "Acerca de la plataforma dotCloud". nube de puntos . Archivado desde el original el 2 de julio de 2014 . Consultado el 23 de junio de 2019 .
^ Seigler, MG (10 de enero de 2011). "Founders Den: se abre una casa club privada para emprendedores en San Francisco". TechCrunch . Archivado desde el original el 29 de marzo de 2016 . Consultado el 2 de febrero de 2021 .
^ "Un hogar para todas tus aplicaciones". dotcloud.com . Archivado desde el original el 17 de mayo de 2014 . Consultado el 8 de mayo de 2014 .
^ "El futuro de los contenedores de Linux". Canal DotCloud . Consultado el 13 de julio de 2018 – vía YouTube .
^ Swan, Chris (13 de marzo de 2014). "Docker elimina LXC como entorno de ejecución predeterminado". InfoQ . Consultado el 20 de enero de 2015 .
^ "Desmitificando la relación entre Moby y Docker: bienvenido a Collabnix". 6 de mayo de 2017.
^ "DotCloud gira y gana a lo grande con Docker, el servicio en la nube que ahora forma parte de Red Hat OpenShift". TechCrunch . 19 de septiembre de 2013 . Consultado el 20 de enero de 2014 .
^ Foley, Mary Jo (15 de octubre de 2014). "La compatibilidad con contenedores Docker llegará a la próxima versión de Windows Server de Microsoft". ZDNet . Consultado el 16 de octubre de 2014 .
^ Guthrie, Scott (15 de octubre de 2014). "Docker y Microsoft: integración de Docker con Windows Server y Microsoft Azure". Blog de ScottGu . Microsoft . Consultado el 12 de enero de 2015 .
^ Barr, Jeff (13 de noviembre de 2014). "Amazon EC2 Container Service (ECS): gestión de contenedores para la nube de AWS". Blog de servicios web de Amazon . Consultado el 29 de abril de 2017 .
^ Rath, John (10 de noviembre de 2014). "Stratoscale recauda 32 millones de dólares para construir nubes OpenStack compatibles con Docker en servidores básicos" . Consultado el 3 de enero de 2016 .
^ "IBM y Docker anuncian una asociación estratégica para ofrecer aplicaciones empresariales en la nube y en las instalaciones". IBM . 4 de diciembre de 2014 . Consultado el 20 de abril de 2015 .
^ Lardinois, Frederic (22 de junio de 2015). "Docker, CoreOS, Google, Microsoft, Amazon y otros se unen para desarrollar un estándar de contenedor común". TechCrunch . Consultado el 8 de agosto de 2015 .
^ Siluk, Shirley (22 de junio de 2015). "Docker, equipo de gigantes tecnológicos en proyecto de contenedor abierto". cio-today.com . Archivado desde el original el 23 de septiembre de 2015 . Consultado el 8 de agosto de 2015 .
^ McLaughlin, Kevin (22 de diciembre de 2015). "Oracle adquiere StackEngine, la startup de contenedores Docker, planea un centro de computación en la nube con sede en Austin". CRN . Consultado el 13 de enero de 2022 .
^ Yegulalp, Serdar (4 de abril de 2016). "Windocks hace lo que Docker y Microsoft no pueden hacer". InfoMundo . Consultado el 27 de octubre de 2018 .
^ "Docker: estadísticas actualizadas del proyecto". Esencia de GitHub . Consultado el 22 de agosto de 2016 .
^ Sarkar, Doña (8 de junio de 2016). "Anuncio de Windows 10 Insider Preview Build 14361". Blogs de Windows . Microsoft . Consultado el 19 de junio de 2016 .
^ Mullany, Michael. "Análisis del impulso de Docker 2016". Pulso de LinkedIn . Consultado el 5 de enero de 2017 .
^ Vaughan-Nichols, Steven (18 de junio de 2019). "Docker adopta el subsistema de Windows para Linux 2". ZDNet . CBS interactivo .
^ "La compatibilidad con WSL 2 llegará a las versiones 1903 y 1909 de Windows 10". Línea de comandos de Windows . 20 de agosto de 2020 . Consultado el 21 de agosto de 2020 .
^ "Docker Desktop y WSL 2: actualización del backport". Blog acoplable . 20 de agosto de 2020 . Consultado el 21 de agosto de 2020 .
^ Carey, Scott (31 de agosto de 2021). "Docker Desktop ya no es gratuito para usuarios empresariales". InfoMundo . Consultado el 18 de octubre de 2021 .
^ Miller, Ron (11 de diciembre de 2023). "Docker adquiere AtomicJar, una startup de pruebas que recaudó 25 millones de dólares en enero". TechCrunch . Consultado el 13 de diciembre de 2023 .
enlaces externos
Página web oficial
Terminología de contenedores: terminología práctica