¿Qué es Docker? – Docker es una plataforma de contenedorización que agrupa su aplicación y todas sus dependencias en forma de contenedor acoplable para garantizar que su aplicación funcione a la perfección en cualquier entorno.
¿Qué es el contenedor? – Docker Container es una unidad estandarizada que se puede crear sobre la marcha para implementar una aplicación o entorno en particular. Podría ser un contenedor de Ubuntu, un contenedor de CentOs, etc. para completar el requisito desde un punto de vista del sistema operativo. Además, podría ser un contenedor orientado a la aplicación como el contenedor CakePHP o un contenedor Tomcat-Ubuntu, etc.
Vamos a entenderlo con un ejemplo:
Una empresa necesita desarrollar una aplicación Java. Para hacerlo, el desarrollador configurará un entorno con el servidor tomcat instalado en él. Una vez desarrollada la aplicación, debe ser probada por el probador. Ahora el probador volverá a configurar el entorno tomcat desde cero para probar la aplicación. Una vez que se realiza la prueba de la aplicación, se implementará en el servidor de producción. Una vez más, la producción necesita un entorno con Tomcat instalado, para que pueda alojar la aplicación Java. Si ve la misma configuración de entorno tomcat se realiza tres veces. Hay algunos problemas que he enumerado a continuación con este enfoque:
- Si no tengo experiencia en programación, ¿es recomendable primero aprender C y luego Python o puedo ir directamente a Python? Si puedo, ¿cuáles son algunos buenos recursos?
- ¿Cuáles son algunas de las fuentes que uno podría usar para aprender más sobre las personas Cajun y su cultura?
- ¿Qué recursos y métodos deberían usarse para tener una idea de la “lógica empresarial” y la “estructura de capital” de las universidades estadounidenses?
- ¿Cuáles son los mejores recursos para aprender economía desde cero por mi cuenta?
- Cómo utilizar plenamente los recursos disponibles en la biblioteca de su universidad y en las bibliotecas públicas
1) Hay una pérdida de tiempo y esfuerzo.
2) Podría haber una discrepancia de versión en diferentes configuraciones, es decir, el desarrollador y el probador pueden haber instalado Tomcat 7; sin embargo, el administrador del sistema instaló Tomcat 9 en el servidor de producción.
Ahora, le mostraré cómo se puede usar el contenedor Docker para evitar esta pérdida.
En este caso, el desarrollador creará una imagen docker tomcat (una imagen Docker no es más que un plan para implementar múltiples contenedores de las mismas configuraciones) utilizando una imagen base como Ubuntu, que ya existe en Docker Hub (Docker Hub tiene cierta base Imágenes de docker disponibles de forma gratuita). Ahora esta imagen puede ser utilizada por el desarrollador, el probador y el administrador del sistema para implementar el entorno tomcat. Así es como el contenedor docker resuelve el problema.
Espero que ahora tengas claro qué es Docker & Docker Container. En caso de que tenga más dudas, por favor, deje un comentario, estaré encantado de ayudarle.
Sin embargo, ahora usted pensaría que esto también se puede hacer usando máquinas virtuales. Sin embargo, hay un problema si elige usar una máquina virtual. Veamos una comparación entre una máquina virtual y Docker Container para entender esto mejor.
Déjame llevarte a través del diagrama de arriba. La máquina virtual y el contenedor Docker se comparan en los siguientes tres parámetros:
- Tamaño: este parámetro comparará Virtual Machine & Docker Container en su recurso que utilizan.
- Inicio: este parámetro se comparará en función de su tiempo de arranque.
- Integración: este parámetro comparará su capacidad de integración con otras herramientas con facilidad.
Seguiré el orden anterior en el que se enumeran los parámetros. Así que el primer parámetro sería “Tamaño”.
tamaño
La siguiente imagen explica cómo Virtual Machine y Docker Container utilizan los recursos asignados a ellos.
Considere una situación representada en la imagen de arriba. Tengo un sistema host con 16 Gigabytes de RAM y tengo que ejecutar 3 máquinas virtuales en él. Para ejecutar las máquinas virtuales en paralelo, necesito dividir mi RAM entre las máquinas virtuales. Supongamos que lo asigno de la siguiente manera:
- 6 GB de RAM a mi primera máquina virtual,
- 4 GB de RAM a mi segunda VM, y
- 6 GB a mi tercera máquina virtual.
En este caso, no me quedaré con más RAM aunque el uso sea:
- Mi primera máquina virtual usa solo 4 GB de RAM – asignados 6 GB – 2 GB sin uso y bloqueados
- Mi segunda máquina virtual usa solo 3 GB de RAM – asignada 4 GB – 1 GB sin uso y bloqueada
- Mi tercera máquina virtual usa solo 2 GB de RAM – asignada 6 GB – 4 GB sin usar y bloqueada
Esto se debe a que una vez que una porción de memoria se asigna a una Máquina Virtual, esa memoria se bloquea y no se puede volver a asignar. Estaré desperdiciando 7 GB ( 2 GB + 1 GB + 4 GB ) de RAM en total y, por lo tanto, no puedo configurar una nueva máquina virtual. Este es un problema importante porque la RAM es un hardware costoso.
Entonces, ¿cómo puedo evitar este problema?
Si uso Docker, mi CPU asignará exactamente la cantidad de memoria que requiere Docker Container.
- Mi primer contenedor utilizará solo 4 GB de RAM – asignados 4 GB – 0 GB sin uso y bloqueados
- Mi segundo contenedor utilizará solo 3 GB de RAM – Asignado 3 GB – 0 GB Sin uso y bloqueado
- Mi tercer contenedor utilizará solo 2 GB de RAM – Asignado 2 GB – 0 GB sin uso y bloqueado
Como no hay memoria asignada (RAM) que no esté en uso, guardo 7 GB ( 16 – 4 – 3 – 2 ) de RAM utilizando Docker Container. Incluso puedo crear contenedores adicionales a partir de la memoria RAM sobrante y aumentar mi productividad.
Así que aquí Docker Container claramente gana sobre la máquina virtual ya que puedo usar mis recursos de manera eficiente según mis necesidades.
Puesta en marcha
Cuando se trata de la puesta en marcha, la máquina virtual tarda mucho tiempo en iniciarse porque el sistema operativo invitado debe comenzar desde cero, lo que luego cargará todos los archivos binarios y bibliotecas. Esto requiere mucho tiempo y resultará muy costoso en momentos en que se necesita un inicio rápido de aplicaciones. En el caso de Docker Container, ya que el contenedor se ejecuta en su sistema operativo host, puede ahorrar un tiempo precioso de arranque. Esta es una clara ventaja sobre la máquina virtual.
Considere una situación en la que quiero instalar dos versiones diferentes de Ruby en mi sistema. Si uso la máquina virtual, necesitaré configurar 2 máquinas virtuales diferentes para ejecutar las diferentes versiones. Cada uno de estos tendrá su propio conjunto de binarios y bibliotecas mientras se ejecutan en diferentes sistemas operativos invitados. Mientras que si uso Docker Container, aunque esté creando 2 contenedores diferentes donde cada contenedor tendrá su propio conjunto de binarios y bibliotecas, los estaré ejecutando en mi sistema operativo host. Ejecutarlos directamente en mi sistema operativo Host hace que mis contenedores Docker sean livianos y más rápidos.
Así que Docker Container claramente gana nuevamente desde la Máquina Virtual basada en el parámetro de Inicio.
Ahora, finalmente, consideremos el parámetro final, es decir, la integración.
¿Qué pasa con la integración?
La integración de diferentes herramientas utilizando la Máquina Virtual puede ser posible, pero incluso esa posibilidad conlleva muchas complicaciones.
Solo puedo tener un número limitado de herramientas DevOps que se ejecutan en una máquina virtual. Como puede ver en la imagen anterior, si quiero muchas instancias de Jenkins y Puppet, entonces tendré que encender muchas máquinas virtuales porque cada una puede tener solo una instancia en ejecución de estas herramientas. La configuración de cada VM trae consigo problemas de infraestructura. Tendré el mismo problema si decido configurar varias instancias de Ansible, Nagios, Selenium y Git. También será una tarea frenética configurar estas herramientas en cada máquina virtual.
Aquí es donde Docker viene al rescate. Al usar Docker Container, podemos configurar muchas instancias de Jenkins, Puppet y muchas más, todas ejecutándose en el mismo contenedor o en diferentes contenedores que pueden interactuar entre sí simplemente ejecutando algunos comandos. También puedo escalar fácilmente creando múltiples copias de estos contenedores. Así que configurarlos no será un problema.
Para resumir, no será una subestimación decir que Docker es una opción más sensata en comparación con las máquinas virtuales.
Docker está diseñado para beneficiar tanto a los desarrolladores como a los administradores de sistemas, por lo que forma parte de muchas cadenas de herramientas DevOps. Los desarrolladores pueden escribir su código sin preocuparse por las pruebas o el entorno de producción, y los administradores del sistema no deben preocuparse por la infraestructura, ya que Docker puede ampliar y reducir fácilmente la cantidad de sistemas para implementar en los servidores.
También puede consultar el video a continuación para una mejor comprensión de Docker:
También hay una increíble serie de blogs de Docker que te ayudará a obtener mejores perspectivas.