# 2021-01-18 # 「Docker」 - Espejo y almacén

Esta nota organiza e introduce qué es la duplicación, así como la gestión de la duplicación, la creación de duplicación, el almacenamiento, la modificación, el intercambio y otros aspectos.

Imagen

¿Qué es el reflejo?

La imagen se compone de varios sistemas de archivos superpuestos:

 

bootfs, el sistema de archivos de inicio, se encuentra en la parte inferior, como el sistema de archivos de inicio de Linux / Unix. El usuario no interactuará con el sistema de archivos de inicio. Cuando se inicia el contenedor, el contenedor se moverá a la memoria y se descargarán bootfs para liberar la memoria utilizada por la imagen del disco initrd.

 

 

rootfs, el sistema de archivos de segundo nivel, se encuentra por encima de bootfs. rootfs puede ser una variedad de sistemas operativos, como Debain, Ubuntu, etc. rootfs siempre es de solo lectura, lo cual es diferente del proceso de arranque tradicional de Linux (en el proceso de arranque tradicional de Linux, rootfs se carga primero en modo de solo lectura, y después de que se completa el arranque y se completa la verificación de integridad, ingresará al modo de lectura-escritura).

 

 

Sistema de archivos de solo lectura, ubicado encima de rootfs. A través de la tecnología "union mount", monte más sistemas de archivos de solo lectura en rootfs. ¿Qué es el montaje conjunto? El montaje conjunto carga varios sistemas de archivos al mismo tiempo, pero solo aparece un sistema de archivos como un todo. El montaje conjunto superpondrá cada capa del sistema de archivos, de modo que el sistema de archivos final contendrá todos los archivos y directorios del sistema de archivos subyacente.

 

En Docker, estos sistemas de archivos se denominan espejos.

Un espejo se puede colocar encima de otro espejo. El espejo de abajo se convierte en el espejo principal y el espejo de abajo se llama espejo básico. Cuando el contenedor se inicia desde la imagen, Docker cargará un sistema de archivos de lectura y escritura en la parte superior de la imagen, y los programas que ejecutamos se ejecutarán en este sistema de archivos de lectura y escritura.
diagrama.png
En Docker, se utiliza un mecanismo de copia en escritura. En la inicialización, la capa de lectura y escritura está vacía. Cuando se modifica el sistema de archivos, todos los cambios existen en la capa de lectura y escritura. Por ejemplo, si se modifica un archivo, el archivo se copiará de la capa de solo lectura a la capa de lectura y escritura y se modificará en la capa de lectura y escritura. Sin embargo, la versión de solo lectura del archivo todavía existe, pero está oculta por el archivo en la capa de lectura y escritura, precisamente debido al uso de la tecnología de montaje conjunto. Las capas anteriores juntas constituyen una imagen especular.

# 02 Lista de espejos

Utilice el comando docker images para ver la imagen.

Al ejecutar Docker Run , si la imagen no existe, se extraerá automáticamente del almacén. Las imágenes se almacenan en / var / lib / docker /, y cada imagen se almacena en el directorio del controlador de almacenamiento utilizado por Docker, como aufs o devicemapper. Y / var / lib / docker / containers / almacena todos los contenedores.

IMAGEN -> REPOSITORIO -> REGISTRO

REGISTRY, de código abierto, puede ejecutar su propio registro privado, la compañía Docker ofrece una versión comercial de Docker Hub (Docker Trusted Registry), un producto que puede ejecutarse dentro del firewall, anteriormente conocido como Docker Enterprise Hub.

La imagen se almacena en el almacén, que se puede comparar con el almacén de Git, que contiene la imagen, la capa y los metadatos de la imagen.

Use el comando docker pull para extraer la imagen: docker pull ubuntu: 12.04

En la salida de imágenes de la ventana acoplable , la imagen se muestra en unidades de TAG, es decir, "si hay un TAG, hay un registro". Cada TAG marca unas capas de espejos que forman un espejo específico, de modo que un almacén puede contener varios espejos. Utilice la forma de "dos puntos más TAG" para especificar un espejo específico en un almacén.

Un espejo puede crear múltiples ETIQUETAS, y los ID de espejo se utilizan para distinguir entre espejos, lo que significa que "puede haber varios espejos con diferentes ETIQUETAS pero el mismo ID de espejo, pero de hecho todos son el mismo espejo". Usar TAG es un buen hábito.

En Docker Hub, hay dos tipos de almacenes: almacenes de usuarios; almacenes de nivel superior. Almacén de usuarios, creado por los usuarios. El almacén de nivel superior está gestionado por expertos de Docker.

El nombre del almacén de usuarios se divide en dos partes: nombre de usuario y nombre del almacén. Como jamtur01 / puppet . Estos almacenes son creados por los propios usuarios y no son confirmados por Docker, es necesario asumir los riesgos correspondientes al utilizarlos.

El almacén de nivel superior solo tiene la parte del nombre del almacén. Estos espejos son proporcionados por fabricantes de alta calidad, y los usuarios pueden construir sus propios espejos basados ​​en estos espejos.

Después de Docker 1.8, se agregó la función de firmar imágenes. Se utiliza para la gestión de seguridad del contenido de la imagen.

# 03 Espejo

Utilice el comando docker pull para extraer la imagen.

Cuando se ejecuta el comando docker run , si la imagen no existe, el TAG se extraerá primero como la última imagen. Puede usar el comando docker pull para extraer la imagen primero y reducir el tiempo que lleva iniciar la imagen.

# 04 Espejo-Encontrar

Utilice la búsqueda ventana acoplable comando para buscar imágenes en acoplable concentradores.

#! / bin / sh 

marioneta de búsqueda de ventana acoplable

La información devuelta incluye: nombre del almacén, descripción de la imagen, evaluación del usuario, si es oficial, si se compila automáticamente (si se creó mediante el proceso de compilación automática de Docker Hub).

Luego, puede usar el comando docker pull para extraer la imagen: docker pull puppet / puppetserver

Finalmente, puede ejecutar el contenedor: docker run -i -t puppet / puppetserver / bin / bash

# 05 Espejo

# 01 Crear cuenta de Docker Hub

Vaya a Docker Hub para registrar una cuenta, use el comando de inicio de sesión de Docker para iniciar sesión y use Docker Logout para cerrar sesión.

La información de autenticación personal se almacena en $ HOME / .dockercfg . A partir de Docker 1.7.0, se almacena en $ HOME / .docker / config.json .

# 06 Mirror-Push to Docker Hub

Use el comando docker push para enviar la imagen al Docker Hub remoto para que otros la usen. También puede crear una imagen privada, pero esta es una función de pago.

Al enviar a un almacén remoto, debe especificar un nombre de usuario: docker push your_user / your_image

Visite Inicio rápido de Docker Hub | Documentación de Docker para ver la documentación.

! ! ! Docker Hub admite compilaciones automáticas, que deben asociarse con los almacenes de GitHub o BitBuket. Leerá automáticamente el archivo Dockerfile, luego compilará y verá el registro y la salida de compilación. No me expandiré aquí, pero no sé si el Docker Registry de código abierto también admite esta función. :-)

Varios relacionados

# Acerca de la imagen principal y la capa de imagen principal
¿Docker inspect -f '{ {.Parent}}' es una forma segura de obtener el ID de la imagen base?
Command docker image inspect b7b28af77ffe --format '{ {.Parent}} ' La salida es de hecho La imagen principal, pero esta "imagen principal" es la "capa de imagen principal", no la capa de imagen a la que hace referencia FROM en el Dockerfile (a menos que solo haya una instrucción FROM en su Dockerfile ).

Construir contexto

¿Cuál es el contexto de construcción?

Docker es una arquitectura Cliente / Servidor, y el comando de compilación docker build es ejecutado realmente por Docker Server, mientras que Docker Clinet solo es responsable de enviar solicitudes.

Por lo tanto, los archivos involucrados en la construcción deben enviarse a Docker Server para que Docker Server pueda compilar Estos archivos son el contexto de compilación.

Debe especificar la información del contexto de compilación en la línea de comando, es decir, el archivo para participar en la compilación. Luego, Docker Client empaquetará estos archivos y los enviará a Docker Server para su construcción. Puede especificar directamente directorios, archivos de almacenamiento y almacenes de Git. Si usa un repositorio de Git, Docker Client primero extraerá el código, luego lo empaquetará y lo cargará.

problemas potenciales

# 1 El tiempo de compilación es demasiado largo y la memoria y los recursos de red ocupan demasiado.
Si el contenido en el contexto de compilación ocupa mucho espacio, como muchos archivos temporales generados por la compilación, cargar todo en Docker Server aumentará el tiempo de transmisión de la red y consumirá memoria de ancho de banda Recursos

# 2 El tamaño de la imagen aumenta, lo que afecta la velocidad de inicio. Cuando
se están construyendo algunas imágenes, estas copian directamente el contenido del Contexto de Construcción (aunque debe ser atendido por el Dockerfile, pero se puede evitar a través de .dockerignore), esto aumentará el tamaño de la imagen y ocupará más espacio en disco. Y también afectará la velocidad de inicio.

# 3 Exposición de información confidencial
Parte del contenido es información confidencial, como información de texto sin formato antes de ser compilado o cifrado, y no se debe copiar directamente a la imagen. Estos directorios siempre deben excluirse.

# 4 Invalidación de la caché de compilación (problema potencial)
Si algunos archivos no esenciales se cambian con frecuencia, como la salida de compilación temporal, cuando se copian en Docker Server, la última caché de compilación no se puede usar durante la compilación.

Solución

Estos problemas se pueden resolver controlando el contenido enviado al servidor Docker. Esto se puede resolver con el archivo .dockerignore .

Enlaces relacionados

Referencia de Dockerfile

referencias

 

 

Supongo que te gusta

Origin blog.csdn.net/u013670453/article/details/112785602
Recomendado
Clasificación