Descripción-General-Docker.

¡Que es!

Prologo: Docker es una plataforma abierta para desarrollar, enviar y ejecutar aplicaciones. Docker le permite separar sus aplicaciones de su infraestructura para que pueda entregar software rápidamente.

 

Que es Docker

-. Con Docker, puede administrar su infraestructura de la misma manera que administra sus aplicaciones. Al aprovechar las metodologías de Docker para enviar, probar e implementar código rápidamente, puede reducir significativamente la demora entre la escritura del código y su ejecución en producción.

-. Docker es un proyecto de código abierto que automatiza el despliegue de aplicaciones dentro de contenedores de software, proporcionando una capa adicional de abstracción y automatización de virtualización de aplicaciones en múltiples sistemas operativos. Docker utiliza características de aislamiento de recursos del kernel Linux, tales como cgroups y espacios de nombres (namespaces) para permitir que «contenedores» independientes se ejecuten dentro de una sola instancia de Linux, evitando la sobrecarga de iniciar y mantener máquinas virtuales.

 

La plataforma Docker

-. Docker brinda la capacidad de empaquetar y ejecutar una aplicación en un entorno aislado llamado contenedor. El aislamiento y la seguridad le permiten ejecutar muchos contenedores simultáneamente en un host determinado. Los contenedores son livianos y contienen todo lo necesario para ejecutar la aplicación, por lo que no necesita depender de lo que está instalado actualmente en el host. Puede compartir contenedores fácilmente mientras trabaja y asegurarse de que todas las personas con las que comparte obtienen el mismo contenedor que funciona de la misma manera.

-. Docker proporciona herramientas y una plataforma para administrar el ciclo de vida de sus contenedores:

  1. Desarrolle su aplicación y sus componentes de soporte utilizando contenedores.
  2. El contenedor se convierte en la unidad para distribuir y probar su aplicación.
  3. Cuando esté listo, implemente su aplicación en su entorno de producción, como un contenedor o un servicio orquestado. Esto funciona igual si su entorno de producción es un centro de datos local, un proveedor de nube o un híbrido de los dos

¿Para qué puedo usar Docker?

-. Entrega rápida y consistente de sus aplicaciones

Docker agiliza el ciclo de vida del desarrollo al permitir que los desarrolladores trabajen en entornos estandarizados utilizando contenedores locales que brindan sus aplicaciones y servicios. Los contenedores son ideales para flujos de trabajo de integración continua y entrega continua (CI / CD).

 

-. Implementación y escalado receptivos

La plataforma basada en contenedores de Docker permite cargas de trabajo altamente portátiles. Los contenedores Docker pueden ejecutarse en la computadora portátil local de un desarrollador, en máquinas físicas o virtuales en un centro de datos, en proveedores de nube o en una combinación de entornos. La portabilidad y la naturaleza liviana de Docker también facilitan la administración dinámica de cargas de trabajo, ampliando o eliminando aplicaciones y servicios según lo dicten las necesidades comerciales, casi en tiempo real.

 

-. Ejecutar más cargas de trabajo en el mismo hardware

Docker es ligero y rápido. Proporciona una alternativa viable y rentable a las máquinas virtuales basadas en hipervisores, por lo que puede utilizar una mayor parte de su capacidad informática para lograr sus objetivos comerciales. Docker es perfecto para entornos de alta densidad y para implementaciones pequeñas y medianas donde necesita hacer más con menos recursos.

Arquitectura de Docker

-. Docker utiliza una arquitectura cliente-servidor. El cliente de Docker habla con el demonio de Docker , que hace el trabajo pesado de construir, ejecutar y distribuir sus contenedores Docker. El cliente y el demonio de Docker pueden ejecutarse en el mismo sistema, o puede conectar un cliente de Docker a un demonio de Docker remoto. El cliente y el demonio de Docker se comunican mediante una API REST, a través de sockets UNIX o una interfaz de red. Otro cliente de Docker es Docker Compose, que le permite trabajar con aplicaciones que constan de un conjunto de contenedores.

El daemon de Docker

-. El daemon de Docker (dockerd) escucha las solicitudes de la API de Docker y administra objetos de Docker como imágenes, contenedores, redes y volúmenes. Un demonio también puede comunicarse con otros demonios para administrar los servicios de Docker.

 

El cliente de Docker

-. El cliente de Docker ( docker) es la forma principal en que muchos usuarios de Docker interactúan con Docker. Cuando utiliza comandos como docker run, el cliente envía estos comandos a dockerd, que los ejecuta. El docker comando usa la API de Docker. El cliente de Docker puede comunicarse con más de un demonio.

 

Registros de Docker

-. Un registro de Docker almacena imágenes de Docker. Docker Hub es un registro público que cualquiera puede usar y Docker está configurado para buscar imágenes en Docker Hub de forma predeterminada. Incluso puede ejecutar su propio registro privado.

-. Cuando usa los comandos docker pull o docker run, las imágenes requeridas se extraen de su registro configurado. Cuando usa el docker push comando, su imagen se envía a su registro configurado.

 

Objetos Docker

-. Cuando usa Docker, está creando y usando imágenes, contenedores, redes, volúmenes, complementos y otros objetos. Esta sección es una breve descripción de algunos de esos objetos.

 

Imagenes: (Objetos Docker)

-. Una imagen es una plantilla de solo lectura con instrucciones para crear un contenedor Docker. A menudo, una imagen se basa en otra imagen, con alguna personalización adicional. Por ejemplo, puede crear una imagen basada en la ubuntu imagen, pero instala el servidor web Apache y su aplicación, así como los detalles de configuración necesarios para ejecutar su aplicación.

-. Puede crear sus propias imágenes o puede usar solo las creadas por otros y publicadas en un registro. Para construir su propia imagen, cree un Dockerfile con una sintaxis simple para definir los pasos necesarios paracrear la imagen y ejecutarla. Cada instrucción en un Dockerfile crea una capa en la imagen. Cuando cambia el Dockerfile y reconstruye la imagen, solo se reconstruyen las capas que han cambiado. Esto es parte de lo que hace que las imágenes sean tan ligeras, pequeñas y rápidas en comparación con otras tecnologías de virtualización.

 

Contenedores: (Objetos Docker)

-. Un contenedor es una instancia ejecutable de una imagen. Puede crear, iniciar, detener, mover o eliminar un contenedor mediante la API o la CLI de Docker. Puede conectar un contenedor a una o más redes, adjuntarle almacenamiento o incluso crear una nueva imagen basada en su estado actual.

. De forma predeterminada, un contenedor está relativamente bien aislado de otros contenedores y de su máquina host. Puede controlar qué tan aislados están la red, el almacenamiento u otros subsistemas subyacentes de un contenedor de otros contenedores o de la máquina host.

-. Un contenedor se define por su imagen, así como por las opciones de configuración que le proporcione al crearlo o iniciarlo. Cuando se quita un contenedor, cualquier cambio en su estado que no esté almacenado en el almacenamiento persistente desaparece.

 

docker run (Comando de ejemplo)

-. El siguiente comando ejecuta un ubuntu contenedor, se adjunta de forma interactiva a su sesión de línea de comandos local y se ejecuta /bin/bash.

$ docker run -i -t ubuntu /bin/bash

Cuando ejecuta este comando, sucede lo siguiente (suponiendo que esté utilizando la configuración de registro predeterminada):

-. Si no tiene la ubuntu imagen localmente, Docker la extrae de su registro configurado, como si la hubiera ejecutado docker pull ubuntu manualmente.

-. Docker crea un nuevo contenedor, como si hubiera ejecutado un docker container create comando manualmente.

-. Docker asigna un sistema de archivos de lectura y escritura al contenedor, como su capa final. Esto permite que un contenedor en ejecución cree o modifique archivos y directorios en su sistema de archivos local.

-. Docker crea una interfaz de red para conectar el contenedor a la red predeterminada, ya que no especificó ninguna opción de red. Esto incluye la asignación de una dirección IP al contenedor. De forma predeterminada, los contenedores pueden conectarse a redes externas mediante la conexión de red de la máquina host.

-. Docker inicia el contenedor y lo ejecuta /bin/bash. Debido a que el contenedor se ejecuta de forma interactiva y está adjunto a su terminal (debido a las banderas -i y -t), puede proporcionar entrada usando su teclado mientras la salida se registra en su terminal.

-. Cuando escribe exit para terminar el /bin/bash comando, el contenedor se detiene pero no se elimina. Puede iniciarlo de nuevo o eliminarlo.

 

La tecnología subyacente

-. Docker está escrito en el lenguaje de programación Go y aprovecha varias características del kernel de Linux para ofrecer su funcionalidad. Docker utiliza una tecnología llamada namespaces para proporcionar el espacio de trabajo aislado llamado contenedor . Cuando ejecuta un contenedor, Docker crea un conjunto de espacios de nombres para ese contenedo

-. Estos espacios de nombres proporcionan una capa de aislamiento. Cada aspecto de un contenedor se ejecuta en un espacio de nombres separado y su acceso está limitado a ese espacio de nombres.

 

Descripción general de Docker Engine

-. Docker Engine es una tecnología de contenedorización de código abierto para crear y contener sus aplicaciones. Docker Engine actúa como una aplicación cliente-servidor con:

  • Un servidor con un proceso de demonio de larga ejecución dockerd.(daemon de Docker)
  • API que especifican interfaces que los programas pueden usar para comunicarse e instruir al demonio de Docker
  • Un cliente de interfaz de línea de comandos (CLI) docker.

-. La CLI usa las API de Docker para controlar o interactuar con el demonio de Docker mediante secuencias de comandos o comandos directos de la CLI. Muchas otras aplicaciones de Docker utilizan la API y la CLI subyacentes. El demonio crea y administra objetos de Docker, como imágenes, contenedores, redes y volúmenes.

 

Desarrollar con la API de Docker Engine

-. Docker proporciona una API para interactuar con el demonio de Docker (denominado API de Docker Engine), así como SDK para Go y Python. Los SDK le permiten crear y escalar aplicaciones y soluciones de Docker de forma rápida y sencilla. Si Go o Python no funcionan para usted, puede usar la API de Docker Engine directamente.

-. Para obtener información sobre los SDK de Docker Engine, consulte Desarrollar con los SDK de Docker Engine

-. La API de Docker Engine es una API RESTful a la que accede un cliente HTTP como wget o curl, o la biblioteca HTTP que forma parte de la mayoría de los lenguajes de programación modernos.

 

Recopilando:

Descripción del entorno Doker sus componentes mas importantes, mis fuentes para estos apuntes