Docker para servicios de infraestructura de microservicios
Qué es Docker
Docker fue originalmente un proyecto interno iniciado por el fundador de dotCloud, Solomon Hykes, cuando estaba en Francia. Se basa en los años de experiencia de dotCloud en innovación de servicios en la nube. aspectos. Se basa en los años de innovación tecnológica de servicios en la nube de dotCloud. Fue de código abierto bajo la licencia Apache 2.0 en marzo de 2013. El código principal del proyecto se mantiene en GitHub. Posteriormente, el proyecto Docker se unió a la Fundación Linux y estableció la Iniciativa de Contenedor Abierto (OCI). ).
Docker se desarrolla e implementa utilizando el lenguaje Go de Google y se basa en los grupos c, espacios de nombres y tecnologías Union FS similares al kernel de Linux para encapsular y aislar procesos. Esta es una tecnología de virtualización a nivel de sistema operativo. Debido a que el proceso de aislamiento es independiente del host y de otros procesos de aislamiento, también se le llama contenedor. La implementación inicial se basó en LXC. Después de la versión 0.7, LXC se eliminó en favor del libcontainer de desarrollo propio y se desarrolló aún más para usar runC y contenedores a partir de la versión 1.11.
Docker encapsula aún más contenedores, desde sistemas de archivos, interconexión de redes hasta aislamiento de procesos, simplificando enormemente la creación de contenedores. Esto hace que la tecnología Docker sea más ligera y rápida que la tecnología de máquinas virtuales.
El siguiente diagrama compara Docker con los métodos de virtualización tradicionales. La tecnología de máquina virtual tradicional virtualiza un conjunto de hardware, ejecuta un sistema operativo completo en él y luego ejecuta los procesos de aplicación necesarios en ese sistema. Los contenedores, por otro lado, ejecutan procesos de aplicaciones directamente en el kernel del host, por lo que los contenedores no tienen su propio kernel y no virtualizan el hardware. Como resultado, los contenedores son mucho más livianos que las máquinas virtuales tradicionales.
Virtualización tradicional
Docker
¿Por qué utilizar Docker
Para el personal de desarrollo y operaciones (DevOps), lo que más desean es crear o configurar solo una vez y ejecutarlo en cualquier lugar.
Docker permite la integración continua, la entrega continua y la implementación a través de imágenes de aplicaciones personalizadas. Los desarrolladores pueden usar Dockerfiles para crear imágenes y probarlas con integración continua, mientras que las operaciones pueden implementar rápidamente imágenes directamente en producción o incluso automatizar implementaciones con entrega/implementación continua.
Esta es la primera vez que utilizamos un sistema de entrega continua.
Utilice Dockerfile para hacer que la creación de imágenes sea transparente, de modo que no solo el equipo de desarrollo pueda comprender el entorno de ejecución de la aplicación, sino que el equipo de operaciones también pueda comprender las condiciones requeridas para que se ejecute la aplicación, ayudando así a Implemente mejor la aplicación en el entorno de producción. Ejecute la imagen.
Características Contenedor Inicio de la máquina virtual Segundos y minutos El uso del disco duro suele ser MB Generalmente GB El rendimiento es cercano al del sistema nativo El soporte es débil Generalmente hay miles de contenedores en una sola máquina, generalmente docenas
Conceptos básicos
Como todos sabemos, el sistema operativo se divide en kernel y espacio de usuario. Para Linux, el kernel inicia y monta el sistema de archivos raíz para proporcionar soporte de espacio al usuario. La imagen de Docker es equivalente a un sistema de archivos raíz. Por ejemplo, la imagen oficial de ubuntu:18.04 contiene el sistema de archivos raíz de un sistema mínimo completo de Ubuntu 18.04.
Una imagen de Docker es un sistema de archivos especial que proporciona los programas, bibliotecas, recursos y archivos de configuración necesarios para ejecutar el contenedor. Además, también proporciona algunos parámetros de configuración preparados para el tiempo de ejecución (como volúmenes anónimos, variables de entorno, usuarios, etc.).
La imagen no contiene datos dinámicos y su contenido no cambia una vez creada.
La relación entre imágenes y contenedores es como la relación entre clases e instancias en la programación orientada a objetos: las imágenes son definiciones estáticas y los contenedores son entidades de tiempo de ejecución de imágenes. Los contenedores se pueden crear, iniciar, detener, eliminar, pausar, etc.
Como se mencionó anteriormente, las imágenes utilizan almacenamiento por niveles, al igual que los contenedores. Cada contenedor utiliza la imagen como capa base cuando se ejecuta y crea una capa de almacenamiento para el contenedor actual sobre esta base. Podemos llamar a esta capa de almacenamiento que está lista para leer y escribir el contenedor en tiempo de ejecución llamada capa de almacenamiento de contenedor.
Según las mejores prácticas de Docker, los contenedores no deben escribir ningún dato en su capa de almacenamiento y la capa de almacenamiento del contenedor debe permanecer sin estado. Todas las escrituras de archivos deben escribirse en volúmenes o directorios de host vinculados, donde las lecturas y escrituras omiten la capa de almacenamiento del contenedor y escriben directamente en el host (o almacenamiento de red) para un mejor rendimiento y estabilidad.
El volumen de datos existe independientemente del contenedor. Cuando el contenedor muere, el volumen de datos no muere. Por lo tanto, cuando se utilizan volúmenes de datos, los datos no se pierden si el contenedor se elimina o se vuelve a ejecutar.
Una vez creada la imagen, puede ejecutarla fácilmente en el host actual, pero si necesita usar la imagen en otros servidores, necesitará un servicio centralizado para almacenar y distribuir la imagen, y El registro de Docker es uno de esos servicios.
Un registro Docker puede contener múltiples repositorios, y cada repositorio puede contener múltiples etiquetas, una para cada imagen.
Por lo general, un repositorio contendrá imágenes de diferentes versiones del mismo software y, a menudo, se utilizan etiquetas para corresponder a las versiones de ese software. Podemos especificar la versión del software que se refleja utilizando el formato
Instalación de docker18 en Centos
Comandos de Docker de uso común
Imágenes de Docker de uso común
redis
mysql