Descripción general de las notas de Docker (1)

I. Descripción general

1. El predecesor de Docker, LXC

LXC es la abreviatura de Linux Container (contenedor de Linux). Se puede proporcionar una virtualización ligera para aislar procesos y recursos sin proporcionar mecanismos de interpretación de instrucciones y otras complejidades de la virtualización completa. Equivalente a NameSpace en C++. Los contenedores dividen eficazmente los recursos administrados por un único sistema operativo en grupos aislados para equilibrar mejor las necesidades conflictivas de uso de recursos entre grupos aislados.

2. La relación entre LXC y Docker

Docker no es un sustituto de LXC. La capa inferior de Docker se implementa utilizando LXC. LXC protege el proceso de Linux, de modo que los procesos estén aislados entre sí y puedan controlar la asignación de recursos de cada proceso. Basado en LXC, Docker proporciona una serie de funciones más potentes.

3. ¿Qué es Docker?

Docker es un motor contenedor de aplicaciones de código abierto, basado en el lenguaje Go y de código abierto conforme al protocolo Apache2.0. Tecnologías como Linuxcgroup basado en kernel, espacio de nombres y Union FS de la clase OverlayFS encapsulan y aíslan procesos, que es una tecnología de virtualización a nivel del sistema operativo. La implementación inicial se basó en LXC, que se eliminó de la versión 0.7 y posteriores LXCy se reemplazó por el libcontainer de desarrollo propio. A partir de la 1.11, evolucionó para usar runC y containerd.

 

runcEs una herramienta de línea de comandos de Linux para crear y ejecutar contenedores de acuerdo con la especificación OCI Container Runtime .

containerdEs un demonio que gestiona el ciclo de vida del contenedor y proporciona un conjunto mínimo de funciones para ejecutar contenedores y gestionar imágenes en un nodo.

Los contenedores utilizan completamente el mecanismo de zona de pruebas y no tienen ninguna interfaz entre sí (aplicaciones similares a las de iPhone), y la sobrecarga del contenedor es extremadamente baja.

4. Escenarios de aplicación de Docker

  • Empaquetado y publicación automatizados de aplicaciones web.

  • Pruebas automatizadas e integración y lanzamiento continuos.

  • Implemente y ajuste bases de datos u otras aplicaciones de back-end en entornos basados ​​en servicios.

  • Cree su propio entorno PaaS compilando desde cero o ampliando una plataforma OpenShift o Cloud Foundry existente.

5. Ventajas de Docker

  • Flexible: incluso las aplicaciones más complejas se pueden contener.

  • Ligero: los contenedores utilizan y comparten el kernel del host.

  • Intercambiable: las actualizaciones y mejoras se pueden implementar al instante.

  • Portátil: puede construirse localmente, implementarse en la nube y ejecutarse en cualquier lugar.

  • Escalable: las réplicas de contenedores se pueden agregar y distribuir automáticamente. Apilable: Puede apilar servicios verticalmente e instantáneamente.

7. ¿Qué ha cambiado Docker?

  • Orientado al producto: entrega del producto

  • Orientado al desarrollo: simplifica la configuración del entorno

  • Orientado a pruebas: pruebas de múltiples versiones

  • Orientado al funcionamiento: coherencia medioambiental

  • Orientado a la arquitectura: expansión automatizada (microservicios)

8. motor acoplable

 

  • El servidor es un proceso residente

  • REST API implementa el protocolo de interacción entre cliente y servidor

  • CLI implementa la gestión de contenedores e imágenes y proporciona a los usuarios una interfaz operativa unificada

9. Arquitectura acoplable

Docker utiliza una arquitectura C/S y el Cliente se comunica con el proceso del Servidor a través de la interfaz para construir, ejecutar y publicar el contenedor. El cliente y el servidor pueden ejecutarse en el mismo clúster o pueden comunicarse de forma remota entre hosts.

 

En pocas palabras, el proceso de ejecutar un programa con Docker consiste en utilizar la API remota para ir al almacén, extraer la imagen localmente y luego ejecutar la imagen en un contenedor.

build: build, que es construir la imagen.

barco: transporte, imagen de transporte, transporte desde almacén y anfitrión.

ejecutar: la imagen en ejecución es un contenedor.

Construir, enviar y ejecutar corresponden a imágenes, almacenes y contenedores uno a uno.

10. Tres conceptos importantes de Docker

Imagen:

El sistema operativo se divide en kernel y espacio de usuario. Para Linux, una vez iniciado el kernel, rootel sistema de archivos se montará para proporcionar soporte de espacio al usuario. La imagen de Docker (Imagen) es equivalente a un rootsistema de archivos. Por ejemplo, la imagen oficial ubuntu:18.04contiene un conjunto completo de rootsistemas de archivos mínimos del sistema Ubuntu 18.04.

La imagen de Docker es un sistema de archivos especial. Además de proporcionar programas, bibliotecas, recursos, configuración y otros archivos necesarios para el tiempo de ejecución del contenedor, también contiene 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 ningún dato dinámico y su contenido no cambiará una vez creada.

Almacenamiento por niveles:

Debido a que la imagen contiene el rootsistema de archivos completo del sistema operativo, su volumen suele ser enorme, por lo que al diseñar Docker, se aprovecha al máximo la tecnología Union FS y se diseña como una arquitectura de almacenamiento jerárquica. En sentido estricto, una imagen no es un archivo empaquetado como un ISO. Una imagen es sólo un concepto virtual. Su manifestación real no se compone de un archivo, sino de un conjunto de sistemas de archivos, o en otras palabras, una combinación de múltiples sistemas de archivos. sistemas de archivos de capas composición.

Cuando se construye la imagen, se construirá capa por capa, siendo la capa anterior la base de la siguiente. Una vez construida cada capa, no volverá a cambiar. Cualquier cambio en la capa siguiente solo se producirá en su propia capa. Por ejemplo, la operación de eliminar un archivo en el nivel anterior en realidad no elimina el archivo en el nivel anterior, sino que solo marca el archivo como eliminado en el nivel actual . Cuando se ejecuta el contenedor final, aunque este archivo no se verá, de hecho, el archivo siempre seguirá a la imagen. Por lo tanto, al crear una imagen, debe tener mucho cuidado. Cada capa solo debe contener lo que se necesita agregar a la capa. Cualquier elemento adicional debe limpiarse antes de completar la construcción de la capa.

Las características del almacenamiento por niveles también facilitan la reutilización y personalización de imágenes. Incluso puede utilizar la imagen creada previamente como capa base y luego agregar nuevas capas para personalizar lo que necesita y crear una nueva imagen.

 

Envase

La relación entre imagen ( Image) y contenedor ( ) es como en Containerla programación orientada a objetos : La imagen es una definición estática y el contenedor es la entidad cuando se ejecuta la imagen. Los contenedores se pueden crear, iniciar, detener, eliminar, pausar, etc.实例

La esencia de un contenedor es un proceso, pero a diferencia de los procesos que se ejecutan directamente en el host, los procesos del contenedor se ejecutan en su propio espacio de nombres independiente. Por lo tanto, un contenedor puede tener su propio rootsistema de archivos, su propia configuración de red, su propio espacio de proceso e incluso su propio espacio de identificación de usuario. Los procesos en el contenedor se ejecutan en un entorno aislado y se utilizan como si estuvieran operando en un sistema independiente del host. Esta característica hace que las aplicaciones empaquetadas en contenedores sean más seguras que las que se ejecutan directamente en el host. Debido a esta característica de aislamiento, muchas personas suelen confundir contenedores y máquinas virtuales cuando aprenden Docker por primera vez.

Como se mencionó anteriormente, las imágenes utilizan almacenamiento por niveles y lo mismo ocurre con los contenedores. Cada tiempo de ejecución de contenedor utiliza la imagen como capa base y crea una capa de almacenamiento para el contenedor actual encima de ella. Podemos llamar a esta capa de almacenamiento preparada para que el tiempo de ejecución del contenedor lea y escriba la capa de almacenamiento del contenedor .

El ciclo de vida de la capa de almacenamiento del contenedor es el mismo que el del contenedor: cuando el contenedor muere, la capa de almacenamiento del contenedor también muere. Por lo tanto, cualquier información guardada en la capa de almacenamiento del contenedor se perderá cuando se elimine el 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 operaciones de escritura de archivos deben utilizar un volumen de datos (Volumen) o vincular un directorio de host . Leer y escribir en estas ubicaciones omitirá la capa de almacenamiento del contenedor y leerá y escribirá directamente en el host (o almacenamiento de red), su rendimiento y mayor estabilidad.

El ciclo de vida del volumen de datos es independiente del contenedor: si el contenedor muere, el volumen de datos no morirá. Por lo tanto, después de utilizar el volumen de datos, los datos no se perderán después de eliminar o volver a ejecutar el contenedor.

Almacén (Registro)

Una vez creada la imagen, se puede ejecutar fácilmente en el host actual. Sin embargo, si necesitamos usar esta imagen en otros servidores, necesitamos un servicio centralizado para almacenar y distribuir imágenes. Docker Registry es uno de esos servicios.

Un Docker Registry puede contener múltiples almacenes ( Repository); cada almacén puede contener múltiples etiquetas ( Tag); cada etiqueta corresponde a una imagen.

Por lo general, un almacén contendrá imágenes de diferentes versiones del mismo software y, a menudo, se utilizan etiquetas para corresponder a cada versión del software. Podemos <仓库名>:<标签>especificar qué versión de este software es la imagen a través del formato. Si no se proporciona ninguna etiqueta, se utilizará latestcomo etiqueta predeterminada.

Tomando la imagen de Ubuntu como ejemplo, ubuntues el nombre del almacén, que contiene diferentes etiquetas de versión, como, 16.04, 18.04. Podemos usar ubuntu:16.04o ubuntu:18.04para especificar qué versión de la imagen se requiere. Si se omite una etiqueta, por ejemplo ubuntu, se tratará como ubuntu:latest.

El nombre del almacén a menudo aparece en forma de ruta de dos partesjwilder/nginx-proxy . Por ejemplo , el primero a menudo significa el nombre de usuario en el entorno multiusuario de Docker Registry y el segundo a menudo significa el nombre del software correspondiente. Pero esto no es absoluto y depende del software o servicio Docker Registry específico utilizado.

Servicios públicos de Docker Registry:

El servicio público Docker Registry es un servicio de Registro que está abierto a los usuarios y les permite administrar imágenes. Generalmente, dichos servicios públicos permiten a los usuarios cargar y descargar imágenes públicas de forma gratuita y pueden proporcionar servicios pagos para que los usuarios administren imágenes privadas.

El servicio público de Registro más utilizado es el Docker Hub oficial , que también es el Registro predeterminado y tiene una gran cantidad de imágenes oficiales de alta calidad. Además, están Quay.io de Red Hat y Google Container Registry de Google . Las imágenes de Kubernetes utilizan este servicio.

Por algunas razones, el acceso a estos servicios puede ser más lento dentro del país. Algunos proveedores nacionales de servicios en la nube proporcionan servicios de imágenes para Docker Hub ( Registry Mirror), estos servicios de imágenes se denominan aceleradores . Los más comunes incluyen el acelerador Alibaba Cloud , el acelerador DaoCloud , etc. El uso del acelerador descargará la imagen de Docker Hub directamente desde una dirección nacional, lo cual es mucho más rápido que descargar directamente desde Docker Hub.

También hay algunos proveedores nacionales de servicios en la nube que brindan servicios públicos similares a Docker Hub. Por ejemplo, NetEase Cloud Image Service , DaoCloud Image Market , Alibaba Cloud Image Library , etc.

Registro privado de Docker:

Además de utilizar servicios públicos, los usuarios también pueden crear un Docker Registry privado localmente. Docker proporciona oficialmente imágenes de Docker Registry , que se pueden utilizar directamente como servicios de Registro privados.

La imagen de Docker Registry de código abierto solo proporciona la implementación del servidor de Docker Registry APIdocker , que es suficiente para admitir comandos y no afecta el uso. Sin embargo, no incluye interfaz gráfica, así como funciones avanzadas como mantenimiento de imágenes, gestión de usuarios y control de acceso. Estas funciones avanzadas se proporcionan en la versión comercial oficial Docker Trusted Registry .

Además del Docker Registry oficial, existe software de terceros que implementa la API de Docker Registry e incluso proporciona una interfaz de usuario y algunas funciones avanzadas. Por ejemplo, Harbour y Sonatype Nexus .

Enlaces de referencia:

Mirror · Docker: desde el principio hasta la práctica · Mira la nube

Tutorial de Docker | Tutorial para principiantes

Explicación detallada de Docker-Yuyou Xiaosheng-Blog Garden

Principios de la arquitectura Docker1 y uso sencillo - Música - Blog Park

Introducción a Docker (uso de Docker para implementar aplicaciones web)_Mirando la implementación de Starry Sky-CSDN Blog_docker

Supongo que te gusta

Origin blog.csdn.net/WHQ556677/article/details/122273359
Recomendado
Clasificación