Software para implementar aplicaciones en contenedores
Docker es un conjunto de productos de plataforma como servicio (PaaS) que utilizan la virtualización a nivel de SO para entregar software en paquetes llamados contenedores . [5]
El servicio tiene niveles gratuitos y premium. El software que aloja los contenedores se llama Docker Engine . [6] Se lanzó por primera vez en 2013 y está desarrollado por Docker, Inc. [7]
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. [8] Debido a que todos los contenedores comparten los servicios de un único núcleo del sistema operativo , utilizan menos recursos que las máquinas virtuales . [6]
Debido a que los contenedores Docker son livianos , un solo servidor o máquina virtual puede ejecutar varios contenedores simultáneamente. [14] Un análisis de 2018 descubrió 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. [15] También se puede instalar en una computadora de placa única como Raspberry Pi . [16]
El soporte del kernel de Linux para espacios de nombres principalmente [17] aísla la vista de una aplicación del entorno operativo, incluyendo árboles de procesos, red, ID de usuario y sistemas de archivos montados, mientras que los cgroups del kernel proporcionan limitación de recursos para memoria y CPU. [18] Desde la versión 0.9, Docker incluye su propio componente (llamado libcontainer ) para utilizar facilidades de virtualización proporcionadas directamente por el kernel de Linux, además de utilizar interfaces de virtualización abstraídas a través de libvirt , LXC y systemd-nspawn . [19] [9] [10] [20]
Docker implementa una API de alto nivel para proporcionar contenedores livianos que ejecutan procesos de forma aislada. [21]
Modelo de licencia
Docker Engine tiene licencia Apache License 2.0 . Docker Desktop distribuye algunos componentes que tienen licencia GNU General Public License . Docker Desktop no es gratuito para grandes empresas. [22]
Los archivos Dockerfile pueden tener 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 de Docker consta de tres componentes:
Software: El demonio Docker , llamado dockerd, es un proceso persistente que administra los contenedores Docker y maneja los objetos de los contenedores. El demonio escucha las solicitudes enviadas a través de la API de Docker Engine. [23] [24] 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. [23] [25]
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. [23]
Un contenedor Docker es un entorno estandarizado y encapsulado que ejecuta aplicaciones. [26] Un contenedor se administra mediante la API o CLI de Docker . [23] 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. [23] Es una imagen de proceso .
Un servicio Docker permite que los contenedores se escalen entre varios daemons de Docker. El resultado se conoce como enjambre , un conjunto de daemons cooperativos que se comunican a través de la API de Docker. [23]
Registros: Un registro de Docker es un repositorio para imágenes de Docker. Los clientes de Docker se conectan a los registros para descargar ("extraer") imágenes para usarlas o cargar ("enviar") imágenes que hayan creado. Los registros pueden ser públicos o privados. El registro público principal es Docker Hub. Docker Hub es el registro predeterminado donde Docker busca imágenes. [23] [27] Los registros de Docker también permiten la creación de notificaciones basadas en eventos. [28]
Un ejemplo de un Dockerfile: [29]
ARG CODE_VERSION = últimoDESDE ubuntu:${VERSIÓN_CÓDIGO}COPIA ./ejemplo.txt /ejemplo.txtENV MY_ENV_VARIABLE = "valor_de_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 multicontenedor. [30] Utiliza archivos YAML para configurar los servicios de la aplicación y realiza el proceso de creación e inicio 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 se detuvieron y más. [31] Los comandos relacionados con la manipulación de imágenes u opciones interactivas del usuario no son relevantes en Docker Compose porque se dirigen a un contenedor. [32] 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 del Dockerfile, la commandopción permite anular los comandos predeterminados de Docker y más. [33] La primera versión beta pública de Docker Compose (versión 0.0.1) se lanzó el 21 de diciembre de 2013. [34] La primera versión lista para producción (1.0) se puso a disposición el 16 de octubre de 2014. [35]
Docker Swarm proporciona una funcionalidad de agrupamiento nativa para los contenedores Docker, que convierte un grupo de motores Docker en un único motor Docker virtual. [36] En Docker 1.12 y versiones posteriores, el modo Swarm está integrado con Docker Engine. [37] La utilidad docker swarmCLI [38] permite a los usuarios ejecutar contenedores Swarm, crear tokens de descubrimiento, enumerar nodos en el clúster y más. [39] 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. [40] Docker administra enjambres utilizando el algoritmo de consenso Raft . Según Raft, para que se realice una actualización, la mayoría de los nodos Swarm deben estar de acuerdo con la actualización. [41] [42]
Docker Volume facilita la persistencia independiente de los datos, lo que permite que estos permanezcan incluso después de que se elimine o vuelva a crear el contenedor. [43]
Historia
dotCloud Inc. fue fundada por Kamel Founadi, Solomon Hykes y Sebastien Pahl [44] durante el grupo de incubación de startups Y Combinator Summer 2010 y se lanzó en 2011, y cambió su nombre a Docker Inc. en 2013. [45] La startup también fue una de las 12 startups en la primera cohorte de Founder's Den . [46] Hykes comenzó el proyecto Docker en Francia como un proyecto interno dentro de dotCloud , una empresa de plataforma como servicio . [47]
Docker debutó al público en Santa Clara en PyCon en 2013. [48] Fue lanzado como código abierto en marzo de 2013. [21] 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 estaba escrito en el lenguaje de programación Go . [19] [49]
En 2017, Docker creó el proyecto Moby [d] para investigación y desarrollo abiertos. [50]
15 de octubre de 2014: Microsoft anunció la integración del motor Docker en Windows Server , así como soporte nativo para el rol de cliente Docker en Windows. [52] [53]
Noviembre de 2014: se anunciaron los servicios de contenedores Docker para Amazon Elastic Compute Cloud (EC2). [54]
10 de noviembre de 2014: Docker anunció una asociación con Stratoscale . [55]
4 de diciembre de 2014: IBM anunció una asociación estratégica con Docker que permite que Docker se integre más estrechamente con IBM Cloud. [56]
22 de junio de 2015: Docker y otras compañías anunciaron que estaban trabajando en un nuevo estándar independiente del proveedor y del sistema operativo para contenedores de software. [57] [58]
Diciembre de 2015: Oracle Cloud agregó soporte para contenedores Docker después de adquirir StackEngine , una startup de contenedores Docker. [59]
Abril de 2016: Windocks, un proveedor de software independiente , lanzó un puerto 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. [60]
Mayo de 2016: el análisis mostró que las siguientes organizaciones son los principales contribuyentes a Docker: el equipo Docker, Cisco , Google , Huawei , IBM , Microsoft y Red Hat . [61]
8 de junio de 2016: Microsoft anunció que Docker ahora se podría usar de forma nativa en Windows 10. [ 62]
Enero de 2017: Un análisis de las menciones en los perfiles de LinkedIn mostró que la presencia de Docker creció un 160 % en 2016. [63]
6 de mayo de 2019: Microsoft anunció la segunda versión del Subsistema de Windows para Linux (WSL). Docker, Inc. anunció que había comenzado a trabajar en una versión de Docker para Windows que se ejecutaría en WSL 2. [64] En particular, esto significaba que Docker podría ejecutarse en Windows 10 Home (anteriormente estaba limitado a Windows Pro y Enterprise ya que usaba Hyper-V ).
Agosto de 2020: Microsoft anunció una adaptación de WSL2 a las versiones 1903 y 1909 de Windows 10 (anteriormente WSL2 solo estaba disponible en la versión 2004) [65] y los desarrolladores de Docker anunciaron la disponibilidad de Docker para estas plataformas. [66]
Agosto de 2021: Docker Desktop para Windows y MacOS dejó de estar disponible de forma gratuita para los usuarios empresariales. Docker puso fin al uso gratuito de Docker Desktop para los clientes empresariales más grandes y reemplazó su plan gratuito por un plan personal. Docker en las distribuciones de Linux no se vio afectado. [67]
Diciembre de 2023: Docker adquirió AtomicJar para ampliar sus capacidades de prueba. [68]
^ Barbier, Julien (9 de junio de 2014). "It's Here: Docker 1.0". Docker . Docker, Inc . Consultado el 30 de septiembre de 2019 .
^ "v27.3.1". 20 de septiembre de 2024. Consultado el 20 de septiembre de 2024 .
^ "Código fuente de Docker". repositorio docker/distribution . Docker, Inc. 12 de octubre de 2015 . Consultado el 24 de octubre de 2015 – a través de GitHub .
^ "Acuerdo de licencia de Docker Desktop". 11 de septiembre de 2024.
^ O'Gara, Maureen (26 de julio de 2013). "Ben Golub, que vendió Gluster a Red Hat, ahora dirige dotCloud". SYS-CON Media. 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: un favorito en el mundo DevOps". Código abierto para EE. UU . Recuperado el 14 de junio de 2017 .
^ "Preguntas frecuentes sobre Docker". 2 de marzo de 2019.
^ ab "Docker 0.9: Introducción de controladores de ejecución y libcontainer". Blog de Docker . 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 .
^ "Seleccionar un controlador de almacenamiento" Documentación de Docker . Archivado desde el original el 6 de diciembre de 2016 . Consultado el 7 de diciembre de 2016 .
^ "Docker Documentation: Kernel Requirements" (Docker 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 .
^ "Comienza 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". Poweruser . 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". Datadog . 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". projectatomic.io . Consultado el 13 de abril de 2015 .
^ "Limita 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 las capacidades de los contenedores de Linux". ZDNet . Consultado el 30 de julio de 2014 .
^ "libcontainer – implementación de referencia para contenedores". repositorio docker/libcontainer . Docker, Inc . Consultado el 30 de julio de 2014 – a través de GitHub .
^ ab Avram, Abel (27 de marzo de 2013). "Docker: Implementaciones de software automatizadas y consistentes". InfoQ . Consultado el 9 de agosto de 2013 .
^ "Obtener Docker". 11 de septiembre de 2024.
^ abcdefg «Descripción general de Docker». Documentación de Docker . Docker, Inc. Consultado el 26 de febrero de 2018 .
^ "dockerd". Documentación de Docker . Docker, Inc . Consultado el 26 de febrero de 2018 .
^ "Usar la línea de comandos 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 de Dockerfile". 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 .
^ "Referencia de línea de comandos de Compose". Documentación de Docker . Docker, Inc . Consultado el 28 de febrero de 2018 .
^ "Orquestación de 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 Compose". Documentación de Docker . Docker, Inc. Consultado el 28 de febrero de 2018 .
^ Firshman, Ben (21 de diciembre de 2013). "Versión 0.0.1". docker/compose . Docker, Inc. – vía GitHub .
^ Prasad, Aanand (16 de octubre de 2014). "Versión 1.0.0". docker/compose . Docker, Inc. – vía GitHub .
^ "8 herramientas de orquestación de contenedores que debe conocer". Linux.com . 12 de abril de 2017 . Consultado el 6 de julio de 2017 .
^ "Docker Swarm". Documentación de Docker . Docker, Inc. Recuperado el 6 de julio de 2017 .
^ "Enjambre de Dockers". 4 de junio de 2021.
^ "Referencia de línea de comandos de Swarm". Documentación de Docker . Docker, Inc. Recuperado el 28 de febrero de 2018 .
^ "nodo de Docker". Documentación de Docker . Consultado el 28 de febrero de 2018 .
^ "Docker Swarm 101". aquasec.com . Consultado el 28 de febrero de 2018 .
^ "Algoritmo de consenso de Raft". raft.github.io . Consultado el 28 de febrero de 2018 .
^ "Docker Desktop & Docker Guides". 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). "Au Revoir". docker.com . Archivado desde el original el 12 de enero de 2021 . Consultado el 23 de enero de 2021 .
^ "Acerca de la plataforma dotCloud". dotCloud . 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: A Private Clubhouse For Entrepreneurs Opens In San Francisco". TechCrunch . Archivado desde el original el 29 de marzo de 2016. Consultado el 2 de febrero de 2021 .
^ "Un lugar 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 Linux". Canal DotCloud . 21 de marzo de 2013. 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 da un giro 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 Amazon Web Services . 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 alianza estratégica para ofrecer aplicaciones empresariales en la nube y en las instalaciones". IBM . 4 de diciembre de 2014. Archivado desde el original el 10 de enero de 2015 . 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 contenedores común". TechCrunch . Consultado el 8 de agosto de 2015 .
^ Siluk, Shirley (22 de junio de 2015). "Docker y gigantes tecnológicos se unen para un proyecto de contenedores abiertos". 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 la startup de contenedores Docker StackEngine y 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». InfoWorld . Consultado el 27 de octubre de 2018 .
^ "Docker – Estadísticas de proyecto actualizadas". GitHub Gist . Consultado el 22 de agosto de 2016 .
^ Sarkar, Dona (8 de junio de 2016). "Anuncio de la compilación 14361 de Windows 10 Insider Preview". Blogs de Windows . Microsoft . Consultado el 19 de junio de 2016 .
^ Mullany, Michael. "Análisis del dinamismo de Docker en 2016". LinkedIn Pulse . 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 Interactive .
^ "El soporte de 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 & WSL 2 - Actualización de backport". Blog de Docker . 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 los usuarios empresariales". InfoWorld . 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
Sitio web oficial
Terminología de contenedores: terminología práctica