Docker
Es un contenedor liviano, portátil y aislado y un motor que puede construir, transportar y ejecutar aplicaciones fácilmente en contenedores. A diferencia de la tecnología de virtualización tradicional, el motor de Docker no virtualiza las máquinas virtuales. En cambio, utiliza directamente el kernel y el hardware del host para ejecutar aplicaciones en contenedores directamente en el host. Por eso, la brecha de rendimiento entre las aplicaciones Docker que se ejecutan en contenedores y las aplicaciones que se ejecutan en el host es casi insignificante.
Pero Docker en sí no es un sistema de contenedores, sino una herramienta para crear entornos virtuales basada en la herramienta de contenedorización original LXC. Herramientas como LXC se han utilizado en entornos de producción durante muchos años, y Docker se basa en esto para proporcionar herramientas de implementación y administración de imágenes más amigables.
Docker no es un motor de virtualización.
Cuando se lanzó Docker por primera vez, mucha gente usaba Docker y las máquinas virtuales VMware, KVM y VirtualBox.
Comparar. Aunque funcionalmente Docker y las tecnologías de virtualización apuntan a resolver problemas similares, Docker lo hace de maneras completamente diferentes. Una máquina virtual es un conjunto de hardware virtual. Las operaciones de disco realizadas por el sistema de la máquina virtual en realidad se realizan en el disco virtual. Cuando se ejecutan tareas que requieren un uso intensivo de la CPU, la máquina virtual coloca la CPU en el sistema virtual.
Las instrucciones "traducen" las instrucciones de la CPU del host y las ejecutan. La memoria consumida por dos niveles de disco, dos programadores de procesador y dos sistemas operativos genera considerables penalizaciones en el rendimiento. Los recursos de hardware consumidos por una máquina virtual son equivalentes al hardware correspondiente. Si un host ejecuta demasiadas máquinas virtuales, se sobrecargará. Pero
Docker no tiene esta preocupación. Docker ejecuta aplicaciones en soluciones de "contenedores": utilizando espacios de nombres y grupos CG.
Restringir recursos, compartir el kernel con el host y no utilizar discos virtuales. Todas las operaciones del disco contenedor son en realidad operaciones en /var/lib/docker/
. En resumen, Docker en realidad solo ejecuta una aplicación restringida en la máquina host.
No es difícil ver de lo anterior que los conceptos de contenedores y máquinas virtuales son diferentes, y los contenedores no pueden reemplazar a las máquinas virtuales. Donde los contenedores no pueden llegar, las máquinas virtuales pueden brillar. Por ejemplo, si el host es Linux solo puede ejecutar Windows a través de una máquina virtual, pero Docker no. Para otro ejemplo, el host es Windows y Windows no puede ejecutarse directamente.
Docker, Docker en Windows en realidad se ejecuta en una máquina virtual VirtualBox.
Docker utiliza un sistema de archivos en capas
Como se mencionó anteriormente, una de las ventajas de Docker en comparación con la tecnología de contenedores existente LXC es que Docker proporciona administración de imágenes. Docker
En general, una imagen es una instantánea estática de solo lectura del sistema de archivos de un contenedor. Pero no solo eso, todas las operaciones de disco en Docker se realizan en un sistema de archivos de copia en escritura específico. Ilustramos este problema mediante un ejemplo.
Por ejemplo, si queremos construir un contenedor para ejecutar una aplicación web JAVA, entonces deberíamos usar una imagen con JAVA instalado. Existe
En el Dockerfile (el archivo de instrucciones para generar la imagen), debe especificar "imagen basada en JAVA" para que Docker vaya a Docker Hub.
Descargue la imagen JAVA prediseñada del registro. Luego especifique en el Dockerfile descargar y extraer el software Apache Tomcat en /opt/tomcat.
En la carpeta. Este comando no tiene ningún impacto en la imagen JAVA original, solo agrega una capa de cambios a la imagen original. Cuando se inicia un contenedor, se iniciarán todas las capas de cambio en el contenedor y el contenedor ejecutará /usr/bin/java comenzando desde la primera capa.
Comando y llama a /opt/tomcat/bin en otra capa.
Orden. De hecho, cada instrucción en Dockerfile generará una nueva capa de cambios, incluso si solo se cambia un archivo. Si has usado Git,
podrás entender esto más claramente. Cada comando es como un registro de cada vez que lo ejecutas. Pero para Docker,
En términos generales, este sistema de archivos proporciona mayor flexibilidad y facilita la gestión de aplicaciones.
Nuestro equipo de Spanning Tree tiene una imagen automantenida que incluye Tomcat. Publicar nuevas versiones también es sencillo: utilice un Dockerfile.
Cree una nueva imagen copiando la nueva versión en la imagen y luego etiquete la nueva imagen con la versión. La diferencia entre las distintas versiones de la imagen es de sólo 90 MB de guerra.
Archivos, que se basan en la misma imagen maestra. Si usa máquinas virtuales para mantener estas versiones diferentes, consumirá muchos discos diferentes para almacenar el mismo sistema y usará Docker en su lugar.
Requiere sólo una pequeña cantidad de espacio en disco. Incluso si ejecutamos muchas instancias de esta imagen simultáneamente, solo necesitamos una imagen base JAVA/TOMCAT.
Docker ahorra tiempo.
Hace muchos años, cuando estaba desarrollando software para una cadena de restaurantes, tuve que escribir un documento de Word de 12 páginas que describiera cómo construir un entorno. Por ejemplo, base de datos local de Oracle
, versión específica
JAVA y otras herramientas del sistema 7788 y * * bibliotecas y paquetes de software. Todo el proceso de construcción fue una pérdida de casi un día para todos los miembros de nuestro equipo. Si se mide en términos de dinero, nos costó decenas de miles de dólares en tiempo. Aunque los clientes están acostumbrados a este tipo de cosas e incluso piensan que introducir nuevos miembros, adaptarlos al entorno y adaptar a los empleados a nuestro software son costos necesarios, en comparación, preferiríamos dedicar más tiempo a crear productos para clientes que puedan mejorar nuestra Funciones empresariales.
Si Docker existiera, el entorno de compilación sería como usar las herramientas de compilación automatizadas Puppet/Chef/Salt/Ansible.
Es así de simple y podemos acortar todo el período de construcción de un día a solo unos minutos. Pero a diferencia de estas herramientas, Docker.
No solo puede crear el entorno completo, sino que también puede guardarlo como un archivo de disco y copiarlo en otro lugar. ¿Necesita compilar Node.js desde el código fuente? Docker
Puedo hacerlo. Docker no solo puede crear un entorno Node.js, sino también reflejar todo el entorno y guardarlo en cualquier lugar. Por supuesto, debido a que Docker
es un contenedor, no tiene que preocuparse por el impacto que tendrán en el host las cosas ejecutadas en el contenedor.
Ahora los nuevos miembros de nuestro equipo solo necesitan ejecutar docker-compose up.
Comandante, puede tomar una taza de café y ponerse a trabajar.
Docker ahorra dinero.
Por supuesto, el tiempo es oro. Además de tiempo, Docker ahorra dinero en hardware de infraestructura. La investigación de Gartner y McKinsey muestra que la utilización del centro de datos está entre el 6% y el 12%. No solo eso, si usa máquinas virtuales, también necesita monitorear y configurar pasivamente el disco duro de la CPU y el uso de memoria de cada máquina virtual porque se usa partición estática.
Partición) por lo que los recursos no se utilizan por completo. . Los contenedores pueden resolver este problema: los contenedores pueden compartir memoria y disco entre instancias. Se pueden ejecutar varios servicios en el mismo host. No es necesario limitar los recursos consumidos por el contenedor. Los recursos se pueden detener cuando no son necesarios. No hay necesidad de preocuparse por el consumo excesivo de recursos al iniciar y detener. programas. Solo unas pocas personas visitarán su sitio web a las tres de la mañana y necesita más recursos para realizar tareas por lotes por la noche, por lo que puede intercambiar recursos fácilmente.
La memoria, el disco duro y la CPU consumidos por la máquina virtual son todos fijos. Generalmente, el ajuste dinámico requiere reiniciar la máquina virtual. Con Docker, puedes limitar los recursos y, gracias a
CGroup, es muy conveniente ajustar dinámicamente los límites de recursos para que no tengas que limitarlos.
Docker
Las aplicaciones en el contenedor son solo dos aplicaciones aisladas para el host, no dos máquinas virtuales, por lo que el host también puede asignar recursos por sí mismo.
Docker cuenta con un potente sistema de alojamiento de imágenes.
Como mencionamos anteriormente, este sistema de hosting se llama Docker Hub Registry. Al 29 de abril de 2015, había aproximadamente 14.000 en línea.
Un Docker público y la mayoría está alojado en Docker Hub. Como Github y Docker, que en gran medida se han convertido en representantes de proyectos de código abierto.
El Docker Hub oficial se ha convertido en el representante de la imagen pública de Docker. Estas imágenes se pueden utilizar como base para sus aplicaciones y servicios de datos.
Gracias a esto, puedes sentirte libre de probar la última tecnología: tal vez alguien empaquete una instancia de la base de datos de gráficos en una imagen de Docker y la aloje. Otro ejemplo.
Gitlab, es muy difícil construir Gitlab manualmente. No se recomienda que los usuarios comunes creen el traductor manualmente, pero si usa Docker,
Gitlab, la imagen se creará en cinco segundos. Otro ejemplo sería una versión específica de Ruby para una aplicación Rails. NET en Linux.
Las aplicaciones se pueden crear con un simple comando de Docker.
Las imágenes oficiales de Docker tienen etiquetas oficiales y se puede garantizar la seguridad. Sin embargo, no se puede garantizar la seguridad de las imágenes de terceros, así que descargue imágenes de terceros con precaución. En un entorno de producción, solo puede crear imágenes utilizando Dockerfiles proporcionados por terceros.
Introducción a Docker Github: Crea un Gitlab en 5 segundos.
. NET y Rails en Linux se tratarán en detalle en futuros artículos.
Docker puede evitar errores.
El árbol de expansión siempre ha sido "infraestructura inmutable".
Entusiasta de las infraestructuras. En otras palabras, a menos que exista una vulnerabilidad como Heartbleed, intentamos no actualizar el sistema y no cambiar la configuración del sistema. Al agregar un nuevo servidor, también construiremos el sistema del servidor desde cero, luego importaremos directamente la imagen, colocaremos el servidor en un clúster con equilibrio de carga y luego realizaremos una verificación de estado en el servidor que se va a retirar y luego eliminaremos el clúster. después de completar la verificación. Gracias a
Las imágenes de Docker se pueden importar y exportar fácilmente. Podemos minimizar las incompatibilidades causadas por problemas de entorno y versión, e incluso si existen incompatibilidades, podemos revertirlas fácilmente. Por supuesto que sí.
Con Docker, nuestro entorno operativo para producción, pruebas y desarrollo está unificado. En el pasado, durante el desarrollo colaborativo, el problema de "funciona en mi computadora pero no en la tuya" ocurría porque las computadoras desarrolladas por todos tenían configuraciones diferentes. Ahora,
Docker nos ha ayudado a resolver este problema.
Actualmente Docker solo se ejecuta en Linux
Como se mencionó anteriormente, la tecnología utilizada por Docker ha sido probada en entornos de producción durante mucho tiempo. Aunque estas tecnologías existen desde hace mucho tiempo, la mayoría de ellas siguen siendo Linux.
Únicos, como LXC y Cgroup. Dicho esto, hasta ahora los contenedores Docker sólo pueden ejecutarse en Linux.
Servicios y aplicaciones en. Microsoft está trabajando estrechamente con Docker y anunció que la próxima versión de Windows Server lo admitirá.
El contenedor Docker se llama Windows Docker. Se estima que la tecnología utilizada debería ser Hyper-V.
Contenedores, esperamos ver esta versión en los próximos años.