Docker es la plataforma de creación de contenedores que se utiliza para empaquetar su aplicación y todas sus dependencias juntas en forma de contenedores para asegurarse de que su aplicación funcione sin problemas en cualquier entorno que pueda desarrollarse, probarse o estar en producción. Docker es una herramienta diseñada para facilitar la creación, implementación y ejecución de aplicaciones mediante el uso de contenedores.
Docker es la plataforma de contenedores de software líder en el mundo. Fue lanzado en 2013 por una empresa llamada Dotcloud, Inc, que luego pasó a llamarse Docker, Inc. Está escrito en el lenguaje Go. Han pasado solo seis años desde que se lanzó Docker, pero las comunidades ya lo han cambiado desde las máquinas virtuales. Docker está diseñado para beneficiar tanto a los desarrolladores como a los administradores de sistemas, lo que lo convierte en parte de muchas strings de herramientas de DevOps. Los desarrolladores pueden escribir código sin preocuparse por el entorno de prueba y producción. Los administradores de sistemas no necesitan preocuparse por la infraestructura, ya que Docker puede escalar y reducir fácilmente la cantidad de sistemas. Docker entra en juego en la etapa de implementación del ciclo de desarrollo de software.
Contenedorización
La contenedorización es una virtualización basada en el sistema operativo que crea varias unidades virtuales en el espacio del usuario, conocidas como contenedores. Los contenedores comparten el mismo kernel de host, pero están aislados entre sí a través de espacios de nombres privados y mecanismos de control de recursos a nivel del sistema operativo. La virtualización basada en contenedores proporciona un nivel diferente de abstracción en términos de virtualización y aislamiento en comparación con los hipervisores. Los hipervisores usan mucho hardware, lo que genera una sobrecarga en términos de virtualización de hardware y controladores de dispositivos virtuales. Un sistema operativo completo (p. ej., Linux, Windows) se ejecuta sobre este hardware virtualizado en cada instancia de máquina virtual.
Pero, por el contrario, los contenedores implementan el aislamiento de los procesos a nivel del sistema operativo, evitando así esa sobrecarga. Estos contenedores se ejecutan sobre el mismo núcleo del sistema operativo compartido de la máquina host subyacente y se pueden ejecutar uno o más procesos dentro de cada contenedor. En los contenedores, no tiene que preasignar RAM, se asigna dinámicamente durante la creación de contenedores, mientras que en las máquinas virtuales, primero debe preasignar la memoria y luego crear la máquina virtual. La contenedorización tiene una mejor utilización de los recursos en comparación con las máquinas virtuales y un proceso de arranque breve. Es la siguiente evolución en virtualización.
Los contenedores pueden ejecutarse prácticamente en cualquier lugar, desarrollo e implementación muy fáciles: en sistemas operativos Linux, Windows y Mac; en máquinas virtuales o bare metal, en la máquina de un desarrollador o en centros de datos locales; y por supuesto, en la nube pública. Los contenedores virtualizan los recursos de la CPU, la memoria, el almacenamiento y la red a nivel del sistema operativo, lo que brinda a los desarrolladores una vista de espacio aislado del sistema operativo aislada lógicamente de otras aplicaciones. Docker es el formato de contenedor de código abierto más popular disponible y es compatible con Google Cloud Platform y Google Kubernetes Engine.
Arquitectura acoplable
La arquitectura Docker consiste en el cliente Docker, Docker Daemon ejecutándose en Docker Host y el repositorio Docker Hub. Docker tiene una arquitectura cliente-servidor en la que el cliente se comunica con Docker Daemon que se ejecuta en Docker Host mediante una combinación de REST API, Socket IO y TCP. Si tenemos que construir la imagen de Docker, entonces usamos el cliente para ejecutar el comando de construcción en Docker Daemon, luego Docker Daemon construye una imagen basada en entradas dadas y la guarda en el registro de Docker. Si no desea crear una imagen, simplemente ejecute el comando de extracción desde el cliente y luego Docker Daemon extraerá la imagen de Docker Hub. Finalmente, si desea ejecutar la imagen, ejecute el comando de ejecución desde el cliente que creará El contenedor.
Componentes de Docker
Los componentes principales de Docker incluyen: clientes y servidores de Docker, imágenes de Docker, archivos de Docker, registros de Docker y contenedores de Docker. Estos componentes se explican en detalle en la siguiente sección:
- Clientes y servidores Docker: Docker tiene una arquitectura cliente-servidor. El Docker Daemon/Server consta de todos los contenedores. Docker Daemon/Server recibe la solicitud del cliente Docker a través de la CLI o las API REST y, por lo tanto, procesa la solicitud en consecuencia. El cliente Docker y Daemon pueden estar presentes en el mismo host o en un host diferente.
- Imágenes de Docker: las imágenes de Docker se utilizan para crear contenedores de Docker mediante una plantilla de solo lectura. La base de cada imagen es una imagen base, por ejemplo. imágenes base como: ubuntu14.04 LTS y Fedora 20. Las imágenes base también se pueden crear desde cero y luego las aplicaciones requeridas se pueden agregar a la imagen base modificándola, por lo que este proceso de creación de una nueva imagen se denomina «confirmar el cambio». ”.
- Archivo Docker : Dockerfile es un archivo de texto que contiene una serie de instrucciones sobre cómo crear su imagen Docker. Esta imagen contiene todo el código del proyecto y sus dependencias. La misma imagen de Docker se puede usar para girar ‘n’ número de contenedores, cada uno con la modificación de la imagen subyacente. La imagen final puede cargarse en Docker Hub y compartirse entre varios colaboradores para realizar pruebas e implementación. El conjunto de comandos que necesita usar en su Docker File es FROM, CMD, ENTRYPOINT, VOLUME, ENV y muchos más.
- Registros de Docker : Docker Registry es un componente de almacenamiento para imágenes de Docker. Podemos almacenar las imágenes en repositorios públicos o privados para que varios usuarios puedan colaborar en la creación de la aplicación. Docker Hub es el repositorio en la nube de Docker. Docker Hub se llama un registro público donde todos pueden extraer imágenes disponibles y enviar sus imágenes sin crear una imagen desde cero.
- Contenedores de Docker: los contenedores de Docker son instancias de tiempo de ejecución de las imágenes de Docker. Los contenedores contienen todo el kit necesario para una aplicación, por lo que la aplicación se puede ejecutar de forma aislada. Por ejemplo, supongamos que hay una imagen del sistema operativo Ubuntu con el SERVIDOR NGINX cuando esta imagen se ejecuta con el comando de ejecución de la ventana acoplable, luego se creará un contenedor y el SERVIDOR NGINX se ejecutará en el sistema operativo Ubuntu.
Componer ventana acoplable
Docker Compose es una herramienta con la que podemos crear una aplicación multicontenedor. Facilita la configuración y
ejecución de aplicaciones formadas por varios contenedores. Por ejemplo, suponga que tiene una aplicación que requiere WordPress y MySQL, podría crear un archivo que iniciaría ambos contenedores como un servicio sin necesidad de iniciar cada uno por separado. Definimos una aplicación multicontenedor en un archivo YAML. Con el comando docker-compose-up, podemos iniciar la aplicación en primer plano. Docker-compose buscará el docker-compose. Archivo YAML en la carpeta actual para iniciar la aplicación. Al agregar la opción -d al comando docker-compose-up, podemos iniciar la aplicación en segundo plano. Creando un docker-compose. Archivo YAML para la aplicación de WordPress:
#cat docker-compose.yaml version: ’2’ services: db: image: mysql:5.7 volumes:db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: WordPress MYSQL_DATABASE: WordPress MYSQL_USER: WordPress MYSQL_PASSWORD: WordPress WordPress: depends_on: - DB image: WordPress:latest ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_PASSWORD: wordpress volumes: db_data:
En este docker-compose. YAML, tenemos la siguiente sección de puertos para el contenedor de WordPress, lo que significa que vamos a asignar el puerto 8000 del host con el puerto 80 del contenedor. Para que el host pueda acceder a la aplicación con su IP y número de puerto.
Redes acoplables
Cuando creamos y ejecutamos un contenedor, Docker por sí mismo le asigna una dirección IP, por defecto. La mayoría de las veces, se requiere crear e implementar redes Docker según nuestras necesidades. Entonces, Docker nos permitió diseñar la red según nuestros requisitos. Hay tres tipos de redes Docker: redes predeterminadas, redes definidas por el usuario y redes superpuestas.
Para obtener una lista de todas las redes predeterminadas que crea Docker, ejecutamos el comando que se muestra a continuación:
Hay tres tipos de redes en Docker:
- Red puenteada : cuando se crea un nuevo contenedor Docker sin el argumento –network, Docker conecta de forma predeterminada el contenedor con la red puente. En las redes puenteadas, todos los contenedores en un solo host pueden conectarse a través de sus direcciones IP. Una red Bridge se crea cuando la extensión de los hosts de Docker es uno, es decir, cuando todos los contenedores se ejecutan en un único host. Necesitamos una red superpuesta para crear una red que tenga un alcance de más de un host Docker.
- Red de host : cuando se crea un nuevo contenedor de Docker con el argumento –network=host, empuja el contenedor a la pila de la red de host donde se ejecuta el demonio de Docker. Se puede acceder a todas las interfaces del host desde el contenedor que está asignado a la red del host.
- Ninguna red : cuando se crea un nuevo contenedor Docker con el argumento –network=none, coloca el contenedor Docker en su pila de red. Entonces, en esta red no, no se asignan direcciones IP al contenedor, por lo que no pueden comunicarse entre sí.
Podemos asignar cualquiera de las redes a los contenedores Docker. La opción –network del comando ‘docker run’ se usa para asignar una red específica al contenedor.
$docker run --network ="network name"
Para obtener información detallada sobre una red en particular, usamos el comando-
$docker network inspect "network name"
Ventajas de Docker –
Docker se ha vuelto popular hoy en día debido a los beneficios que brindan los contenedores Docker. Las principales ventajas de Docker son:
- Velocidad : la velocidad de los contenedores Docker en comparación con una máquina virtual es muy rápida. El tiempo requerido para construir un contenedor es muy rápido porque son pequeños y livianos. El desarrollo, las pruebas y la implementación se pueden hacer más rápido ya que los contenedores son pequeños. Los contenedores se pueden empujar para la prueba una vez que se han construido y luego desde allí al entorno de producción.
- Portabilidad : las aplicaciones que se crean dentro de los contenedores docker son extremadamente portátiles. Estas aplicaciones portátiles se pueden mover fácilmente a cualquier lugar como un solo elemento y su rendimiento sigue siendo el mismo.
- Escalabilidad : Docker tiene la capacidad de implementarse en varios servidores físicos, servidores de datos y plataformas en la nube. También se puede ejecutar en todas las máquinas Linux. Los contenedores se pueden mover fácilmente desde un entorno de nube a un host local y desde allí volver a la nube a un ritmo rápido.
- Densidad : Docker usa los recursos que están disponibles de manera más eficiente porque no usa un hipervisor. Esta es la razón por la que se pueden ejecutar más contenedores en un solo host en comparación con las máquinas virtuales. Los Docker Containers tienen un mayor rendimiento debido a su alta densidad y sin desperdicio de recursos.