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:
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.
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
referencias