Obtenga más información sobre la instalación de Docker y cómo empezar en un artículo

Explicación detallada de Docker en un artículo

¿Qué es Docker?

Docker es una plataforma de contenedorización de código abierto diseñada para simplificar el proceso de implementación, ejecución y administración de aplicaciones. Se basa en la tecnología de contenedores, que puede empaquetar aplicaciones y sus dependencias en un contenedor portátil independiente, permitiendo así que las aplicaciones se ejecuten de manera consistente en diferentes entornos.

Un contenedor es una unidad de ejecución liviana y autónoma que contiene una aplicación y todo el software, bibliotecas, variables de entorno y archivos de configuración que necesita para ejecutarse. Al utilizar Docker, puede empaquetar una aplicación y sus dependencias en una imagen de contenedor y luego implementar y ejecutar esta imagen de contenedor en cualquier entorno que admita Docker sin preocuparse por las diferencias en el entorno subyacente.

Docker proporciona un conjunto de herramientas de línea de comandos y API para crear, administrar y ejecutar contenedores. Utiliza tecnologías de virtualización de capa de sistema operativo, como contenedores Linux (LXC) o tecnologías de código abierto más recientes, como motor de contenedor (containerd) y tiempo de ejecución de contenedor (container runtime) para lograr una contenedorización eficiente.

Con Docker, puede implementar y ampliar aplicaciones rápidamente, mejorando la eficiencia del desarrollo, la operación y el mantenimiento. Proporciona aislamiento, portabilidad y reutilización, lo que hace que las aplicaciones sean más fáciles de empaquetar, entregar y administrar. Además, Docker también admite la comunicación de red y el montaje de volúmenes de datos entre contenedores, lo que facilita la interconexión y el intercambio de datos entre contenedores.

En resumen, Docker es una plataforma de contenedores que proporciona herramientas y entornos que simplifican la implementación y administración de aplicaciones, permitiendo que las aplicaciones se ejecuten de manera consistente en diferentes entornos .

¿Cuáles son los escenarios de aplicación de Docker?

Docker tiene una amplia gama de escenarios de aplicaciones, aquí se muestran algunos escenarios de aplicaciones comunes:

  1. Empaquetado y entrega de aplicaciones : Docker puede empaquetar una aplicación y todas sus dependencias en una imagen de contenedor, asegurando que la aplicación se ejecute de manera consistente en diferentes entornos. Esto hace que la implementación y entrega de aplicaciones sea más fácil y confiable.
  2. Implementación y escalado de aplicaciones : con Docker, las aplicaciones se pueden implementar y escalar rápidamente. Al empaquetar su aplicación en una imagen de contenedor, puede implementarla y ejecutarla fácilmente en cualquier entorno habilitado para Docker. Al mismo tiempo, las aplicaciones se pueden escalar horizontalmente rápidamente según sea necesario para satisfacer la creciente demanda.
  3. Arquitectura de microservicios : Docker es excelente para crear y administrar arquitecturas de microservicios. Cada microservicio se puede empaquetar en un contenedor independiente para lograr el desacoplamiento y la implementación independiente entre servicios. Al utilizar Docker, es más fácil administrar y escalar microservicios, así como también comunicarse y colaborar entre microservicios.
  4. Integración continua e implementación continua (CI/CD) : Docker se puede combinar con procesos de integración continua e implementación continua para lograr una construcción, prueba e implementación automatizadas. Al utilizar contenedores Docker, puede crear un entorno de compilación y prueba coherente para garantizar la coherencia de su aplicación en las diferentes etapas.
  5. Aislamiento y coherencia de los entornos de desarrollo : Docker ayuda a los desarrolladores a crear entornos de desarrollo ligeros y aislados a nivel local. Los desarrolladores pueden utilizar contenedores para configurar y administrar el entorno de ejecución de las aplicaciones sin afectar el sistema host. Esto hace que la instalación y configuración de un entorno de desarrollo sea más sencilla y repetible.
  6. Implementación de nube híbrida y multiplataforma : debido a la naturaleza multiplataforma de Docker, las imágenes de contenedores se pueden implementar en diferentes sistemas operativos y plataformas de nube. Esto hace que las aplicaciones sean más flexibles para migrar y escalar en diferentes entornos, al tiempo que facilita la implementación de la nube híbrida y la gestión de plataformas entre nubes.

Además de los escenarios de aplicación anteriores, Docker también se puede utilizar para la creación de entornos de prueba, construcción e intercambio rápido de entornos, aislamiento y seguridad de recursos, etc. Su flexibilidad y portabilidad hacen que Docker se utilice ampliamente en el desarrollo e implementación de aplicaciones modernas.

Conceptos básicos de Docker

Antes de comprender los conceptos básicos de Docker, es necesario comprender varios términos básicos:

  1. Imagen : una imagen de Docker es una plantilla de solo lectura que contiene todos los sistemas de archivos, entornos de software, aplicaciones y dependencias necesarios para ejecutar un contenedor. Las imágenes son la base para la creación de contenedores. Puede obtener imágenes existentes de Docker Hub o repositorios privados, o crear imágenes personalizadas a través de Dockerfiles.
  2. Contenedor : un contenedor Docker es una instancia ejecutable de una imagen y es un entorno de ejecución aislado e independiente. Un contenedor contiene todos los archivos, variables de entorno, bibliotecas y configuración necesarios para ejecutar una aplicación. Puede ejecutar aplicaciones iniciando un contenedor y puede iniciar, detener, pausar, eliminar, etc. operaciones en el contenedor.
    1. La relación entre imagen (Imagen) y contenedor (Contenedor) es como las clases e instancias en la programación orientada a objetos . La imagen es una definición estática y el contenedor es la entidad cuando se ejecuta la imagen.
  3. Almacén (Docker Registry) : Docker Registry proporciona un repositorio centralizado y accesible para almacenar y distribuir imágenes de Docker, lo que permite a los usuarios compartir, descargar y administrar imágenes fácilmente.
    1. 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.
    2. Un Docker Registry puede contener múltiples repositorios (Repositories); cada repositorio puede contener múltiples etiquetas; cada etiqueta corresponde a una imagen.
    3. 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 mediante el formato de <nombre del almacén>:<etiqueta>
    4. Docker proporciona oficialmente un registro público llamado Docker Hub. En Docker Hub, los usuarios pueden encontrar una gran cantidad de imágenes públicas que pueden usarse directamente o como imágenes base para crear sus propias imágenes.
    5. Además de Docker Hub, los usuarios también pueden crear un Docker Registry privado para almacenar y administrar sus propias imágenes para lograr mayor seguridad y controlabilidad.
  4. Dockerfile: un Dockerfile es un archivo de texto que define cómo crear una imagen de Docker. Dockerfile contiene una serie de instrucciones y configuraciones para guiar las operaciones del motor Docker durante el proceso de compilación, como la selección de la imagen base, la instalación del software, la copia de archivos, la configuración de variables de entorno, etc. A través de Dockerfile, se puede realizar el proceso automatizado de creación de imágenes.
  5. Docker Compose: Docker Compose es una herramienta para definir y ejecutar múltiples contenedores Docker. Utiliza un archivo YAML para configurar las relaciones y dependencias entre múltiples contenedores y puede iniciar, detener y administrar toda la aplicación contenedora con un solo comando.

Estos conceptos básicos forman el núcleo de Docker y, al comprenderlos, podrá utilizar y gestionar mejor los entornos en contenedores de Docker.

Instalación de ventana acoplable

Aquí citamos información externa relevante para enumerar la instalación de Docker en el entorno CenOS7:

  1. Tutorial de instalación detallado de Vmvare: https://blog.csdn.net/SoulNone/article/details/126681722
  2. Clave de activación de la máquina virtual Vmvare: https://www.bilibili.com/read/cv21151094
  3. Descarga de imagen de CenterOS7: https://blog.csdn.net/a350904150/article/details/129833998
  4. Vmvare安装CenterOS7: https://blog.csdn.net/StupidlyGrass/article/details/128646335
  5. Instale Docker en el entorno CenterOS7: https://blog.csdn.net/Siebert_Angers/article/details/127315542

imagen acoplable

Docker necesita que la imagen correspondiente exista localmente antes de ejecutar el contenedor. Si la imagen no existe localmente, Docker descargará la imagen del almacén de imágenes.

Obtener la imagen

El comando para obtener la imagen del almacén de imágenes de Docker es docker pull. Su formato de comando es:

$ docker pull [选项] [Docker Registry 地址[:端口号]] 仓库名[:标签]
  • Dirección del almacén de imágenes de Docker: el formato de la dirección generalmente es <nombre de dominio/IP>[:número de puerto]. La dirección predeterminada es DockerHub
  • Nombre del almacén: como se mencionó anteriormente, el nombre del almacén aquí es un nombre de dos partes, es decir, <nombre de usuario>/<nombre de software>. Para DockerHub, si no se proporciona el nombre de usuario, el valor predeterminado es biblioteca, que es la imagen oficial.
[root@localhost snow]# docker pull ubuntu:16.04
16.04: Pulling from library/ubuntu
58690f9b18fc: Pull complete 
b51569e7c507: Pull complete 
da8ef40b9eca: Pull complete 
fb15d46c38dc: Pull complete 
Digest: sha256:1f1a2d56de1d604801a9671f301190704c25d604a416f59e03c04f5c6ffee0d6
Status: Downloaded newer image for ubuntu:16.04
docker.io/library/ubuntu:16.04
[root@localhost snow]# 

En el ejemplo anterior, no se proporciona la dirección del almacén de imágenes de Docker, por lo que la imagen se obtendrá de Docker Hub. El nombre de la imagen es ubuntu:16.04, por lo que se obtendrá la imagen etiquetada 16.04 en la biblioteca de imágenes oficial/almacén de ubuntu.

En el proceso de descarga, puede ver el concepto de almacenamiento por niveles que mencionamos anteriormente: la imagen se compone de múltiples capas de almacenamiento. La descarga también se realiza capa por capa, no un solo archivo.

correr

Una vez que tengamos la imagen, podemos iniciar y ejecutar un contenedor basado en esta imagen. Tomando el ubuntu:16.04 anterior como ejemplo, si planeamos iniciar bash dentro y realizar operaciones interactivas:

root@localhost snow]# docker run -it --rm ubuntu:16.04 bash
root@3f44186a6166:/# ls -la
total 4
drwxr-xr-x.   1 root root    6 May 27 18:29 .
drwxr-xr-x.   1 root root    6 May 27 18:29 ..
-rwxr-xr-x.   1 root root    0 May 27 18:29 .dockerenv
drwxr-xr-x.   2 root root 4096 Aug  4  2021 bin
drwxr-xr-x.   2 root root    6 Apr 12  2016 boot

docker run es el comando para ejecutar el contenedor. El formato detallado del comando se explicará en la sección del contenedor.

Listar imágenes

Para enumerar las imágenes descargadas, use el comando docker image ls:

root@3f44186a6166:/# exit
exit
[root@localhost snow]# docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    9c7a54a9a43c   3 weeks ago     13.3kB
ubuntu        16.04     b6f507652425   21 months ago   135MB

Eliminar imagen local

Si desea eliminar la imagen local, puede utilizar el comando docker image rm, cuyo formato es:

$ docker image rm [选项] <镜像1> [<镜像2> ...]

Entre ellos, <imagen> puede ser una ID corta de imagen, una ID larga de imagen, un nombre de imagen o un resumen de imagen.

El ID corto que aparece en docker image ls de forma predeterminada suele ser los primeros 3 caracteres o más, siempre que sea suficiente para distinguirlo de otras imágenes.

[root@localhost snow]# docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
redis         latest    0ec8ab59a35f   4 days ago      117MB
hello-world   latest    9c7a54a9a43c   3 weeks ago     13.3kB
ubuntu        16.04     b6f507652425   21 months ago   135MB
[root@localhost snow]# docker image rm 0ec
Untagged: redis:latest
Untagged: redis@sha256:f9724694a0b97288d2255ff2b69642dfba7f34c8e41aaf0a59d33d10d8a42687
Deleted: sha256:0ec8ab59a35faa3aaee416630128e11949d44ac82d15d43053f8af5d61182a5d
Deleted: sha256:f89720eafb298773509177d4b8b76a32adda4da1015ca28f52daa03fc6090499
Deleted: sha256:c3b5385e13627e14d553f09a098275d1f1ada0b6228cc30c92e095d669df799c
Deleted: sha256:b830b2806be6a052c6d857f927f72ef18a2539e69fdb6d51cf95d76d7e06c8f1
Deleted: sha256:8de1c0863fac10debb4e19de0cc27639ae97c1111eca0920649b21d97bc8dded
Deleted: sha256:80940c1d5550f3f56f5ab008aa79e899e4d3c9b6b41b9f76077f31dcfb2c482c
Deleted: sha256:8cbe4b54fa88d8fc0198ea0cc3a5432aea41573e6a0ee26eca8c79f9fbfa40e3
[root@localhost snow]# 

Si observa la información de salida de los comandos anteriores, notará que el comportamiento de eliminación se divide en dos categorías, una sin etiquetar y la otra eliminada. Como presentamos antes, el identificador único de una imagen es su ID y resumen, y una imagen puede tener varias etiquetas.

Cuando utiliza el comando anterior para eliminar una imagen, en realidad está solicitando eliminar la imagen de una determinada etiqueta. Entonces, lo primero que debemos hacer es cancelar todas las etiquetas de imagen que cumplan con nuestros requisitos, esta es la información sin etiqueta que vemos. Cuando se cancelan todas las etiquetas de la imagen, es probable que la imagen pierda el significado de existencia, por lo que se activará el comportamiento Eliminado.

comprometerse Comprender la composición de la imagen

Nota: Además de aprender, el comando de confirmación de Docker también tiene algunas aplicaciones especiales, como guardar la escena después de ser invadida. Sin embargo, no utilice Docker commit para personalizar la imagen. La personalización de la imagen debe realizarse mediante un Dockerfile . Si desea personalizar la imagen, consulte la siguiente sección.

Ahora tomemos la personalización de un servidor web como ejemplo para explicar cómo se construye la imagen:

[root@localhost snow]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
f03b40093957: Pull complete 
eed12bbd6494: Pull complete 
fa7eb8c8eee8: Pull complete 
7ff3b2b12318: Pull complete 
0f67c7de5f2c: Pull complete 
831f51541d38: Pull complete 
Digest: sha256:af296b188c7b7df99ba960ca614439c99cb7cf252ed7bbc23e90cfda59092305
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@localhost snow]# docker run --name web1.0 -d -p 80:80 nginx
054d1cdcf5cf2de43116697f2a96e0c50a5138cd753580f55f1966364df155f1
[root@localhost snow]# 

Este comando iniciará un contenedor con la imagen nginx, llamado web1.0, y asignará el puerto 80, de modo que podamos usar el navegador para acceder al servidor nginx;

Si está ejecutando Docker en Linux, puede acceder directamente a: http://localhost; si está utilizando Docker instalado en una máquina virtual o un servidor en la nube, debe reemplazar localhost con la dirección de la máquina virtual o la dirección real del servidor en la nube.

[Error en la transferencia de la imagen del enlace externo. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-Licj8a72-1686898089872) (C:\Users\lixuewen\AppData\Roaming\Typora\ imágenes-de-usuario-de-typora\ image-20230527191015639.png)]

Supongamos que no nos gusta esta página de bienvenida y queremos cambiarla por otro texto, podemos usar el comando docker exec para ingresar al contenedor y modificar su contenido.

[root@localhost snow]# docker exec -it web1.0 bash
root@054d1cdcf5cf:/# echo '<h1>Hello,World!</h1>' > /usr/share/nginx/html/index.html
root@054d1cdcf5cf:/# exit
exit
[root@localhost snow]# 

Ingresamos al contenedor del servidor web en modo terminal interactivo y ejecutamos el comando bash, es decir, obtuvimos un Shell operable; luego, usamos

¡Hola Mundo!

Cubre el contenido de /usr/share/nginx/html/index.html;

Actualice el navegador y la página aparecerá de la siguiente manera:

(Error en la transferencia de la imagen del enlace externo. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-N2yya1zd-1686898089873) (C:\Users\lixuewen\AppData\Roaming\Typora\ typora-user-images\ image-20230527193042587.png)]

Modificamos los archivos del contenedor, lo que significa que cambiamos la capa de almacenamiento del contenedor. Podemos ver los cambios específicos a través del comando docker diff.

[root@localhost snow]# docker diff web1.0
C /run
A /run/nginx.pid
C /usr
C /usr/share
C /usr/share/nginx
C /usr/share/nginx/html
C /usr/share/nginx/html/index.html
C /root
A /root/.bash_history
C /etc
C /etc/nginx
C /etc/nginx/conf.d
C /etc/nginx/conf.d/default.conf
C /var
C /var/cache

Docker proporciona un comando de confirmación de Docker que puede guardar la capa de almacenamiento del contenedor en una imagen. En otras palabras, sobre la base de la imagen original, la capa de almacenamiento del contenedor se superpone para formar una nueva imagen . Cuando ejecutemos esta nueva imagen en el futuro, tendremos los últimos cambios de archivo del contenedor original:

El formato de sintaxis de Docker commit es:

$ docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
[root@localhost snow]# docker commit --author "snow" --message "edit index.html" web1.0 nginx:2.0
sha256:c06e3839c9eb09fee7e4409290e2d51ddeb214fe87a73d9806cd9479ddf2c9ca
[root@localhost snow]# docker image ls nginx
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
nginx        2.0       c06e3839c9eb   28 seconds ago   143MB
nginx        latest    f9c14fe76d50   2 days ago       143MB
[root@localhost snow]# 

–autor especifica el autor de la modificación, mientras que --message registra el contenido de esta modificación. Esto es similar al control de versiones de git; podemos ver esta nueva imagen personalizada en la imagen acoplable ls.

Una vez personalizada la nueva imagen, podemos ejecutar la imagen:

Aquí llamamos al nuevo servicio web2.0 y lo asignamos al puerto 81. Accedemos nuevamente directamente a http://ip:81 y vemos el resultado, su contenido debería ser el mismo que el web1.0 modificado anteriormente.

[Error en la transferencia de la imagen del enlace externo. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-UdbJXDID-1686898089874) (C:\Users\lixuewen\AppData\Roaming\Typora\ typora-user-images\ image-20230527194357988.png)]

Hasta ahora, hemos completado la imagen personalizada por primera vez. Usamos el comando de confirmación de Docker para agregar manualmente una nueva capa a la imagen anterior para formar una nueva imagen.

Utilice el compromiso de Docker con precaución

Aunque el uso del comando docker commit puede ayudar a comprender intuitivamente el concepto de almacenamiento por niveles de imágenes, no se utiliza de esta manera en el entorno real.

Usar Docker commit significa que todas las operaciones en la imagen son operaciones de caja negra. La imagen generada también se llama imagen de caja negra. En otras palabras, excepto la persona que creó la imagen, que sabe qué comandos se ejecutaron y cómo generar la imagen. , otros no tienen forma de saberlo.

Imagen personalizada de Dockerfile

Del estudio de Docker commit, aprendí que la personalización de la imagen es en realidad la personalización de la configuración y los archivos agregados a cada capa. Si podemos escribir los comandos para modificar, instalar, construir y operar cada capa en un script, y usar este script para construir y personalizar la imagen, entonces los problemas mencionados antes no se pueden repetir, la transparencia de la construcción de la imagen y la Volumen de Todos los problemas se resolverán. Este script es el Dockerfile.

Tomando como ejemplo la personalización anterior de la imagen nginx, esta vez usamos Dockerfile para personalizarla.

En un directorio en blanco, cree un archivo de texto y asígnele el nombre Dockerfile:

[root@localhost snow]# mkdir nginxtest
[root@localhost snow]# cd nginxtest
[root@localhost nginxtest]# touch Dockerfile

Agregue su contenido a través del comando Vim:

FROM nginx
RUN echo '<h1>Hello, EveryDay!</h1>' > /usr/share/nginx/html/index.html
  • FROM especifica la imagen base

    La llamada imagen personalizada debe basarse en una imagen y personalizarse encima de ella. Al igual que anteriormente ejecutamos un
    contenedor con una imagen nginx y luego lo modificamos, se debe especificar la imagen base. FROM especifica la imagen base
    , por lo que FROM es una instrucción necesaria en un Dockerfile y debe ser la primera instrucción .

  • ejecutar comando de ejecución

    La instrucción RUN se utiliza para ejecutar comandos de línea de comando.
    Debido a las potentes capacidades de la línea de comandos, el comando EJECUTAR es uno de los comandos más utilizados al personalizar imágenes . Hay dos formatos:

    • formato de shell: EJECUTAR <comando>, como un comando ingresado directamente en la línea de comando
    RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
    
    • formato ejecutivo: RUN ["archivo ejecutable", "parámetro 1", "parámetro 2"], esto se parece más al formato de las llamadas a funciones

Dado que RUN puede ejecutar comandos como un script de Shell, ¿podemos asignar cada
comando a RUN como un script de Shell? Por ejemplo:

FROM debian:jessie
RUN apt-get update
RUN apt-get install -y gcc libc6-dev make
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz"
RUN mkdir -p /usr/src/redis
RUN tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1
RUN make -C /usr/src/redis
RUN make -C /usr/src/redis install

El método de escritura anterior crea una imagen de 7 capas. Esto no tiene ningún sentido; una mejor manera de escribirlo sería la siguiente:

FROM debian:jessie
RUN buildDeps='gcc libc6-dev make' \
&& apt-get update \
&& apt-get install -y $buildDeps \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" \
&& mkdir -p /usr/src/redis \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -rf /var/lib/apt/lists/* \
&& rm redis.tar.gz \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps

En lugar de usar muchos pares RUN para corresponder a diferentes comandos uno por uno, solo se usa una instrucción RUN y && se usa para concatenar los comandos requeridos. Simplificó las 7 capas anteriores en 1 capa. Al escribir un Dockerfile, recuerde siempre que no está escribiendo un script de shell, sino que está definiendo cómo
se debe construir cada capa.

Construir imagen

Ahora que entendemos el contenido de este Dockerfile, construyamos la imagen. Ejecute en el directorio donde se encuentra el archivo Dockerfile :

[root@localhost nginxtest]# docker build -t nginx:3.0 .
[+] Building 0.9s (6/6) FINISHED                                                             
 => [internal] load build definition from Dockerfile                                         
 => => transferring dockerfile: 179B                                                         
 => [internal] load .dockerignore                                                           
 => => transferring context: 2B                                                             
 => [internal] load metadata for docker.io/library/nginx:latest                             
 => [1/2] FROM docker.io/library/nginx                                                       
 => [2/2] RUN echo '<h1>Hello, EveryDay!</h1>' > /usr/share/nginx/html/index.html           
 => exporting to image                                                                       
 => => exporting layers                                                                     
 => => writing image sha256:e899e0dd12df606efc99e3bb62b57d99935db376c9b1760b05ed7352a004c37a 
 => => naming to docker.io/library/nginx:3.0                                                            

(Nota: asegúrese de agregar un espacio y un punto al final del comando de compilación anterior ; de lo contrario, se informará un error)

Contexto de creación de imágenes (Contexto)

Si prestas atención, verás que hay un .al final del comando de compilación de Docker. representa el directorio actual y el Dockerfile está en el directorio actual; el formato del comando anterior en realidad especifica la ruta de contexto. Entonces, ¿qué es el contexto?

Primero, debes comprender cómo funciona Docker Build. Docker se divide en motor Docker (es decir, demonio del lado del servidor) y herramientas del lado del cliente en tiempo de ejecución . El motor Docker proporciona un conjunto de API REST, llamado API DockerRemote, y las herramientas del cliente, como los comandos de Docker, interactúan con el motor Docker a través de este conjunto de API para completar varias funciones. Por lo tanto, aunque en la superficie parece que estamos ejecutando varias funciones de Docker localmente, de hecho, todo se hace en el lado del servidor (motor Docker) mediante llamadas remotas.

Cuando se utiliza el comando Docker Build para crear una imagen, a menudo es necesario copiar algunos archivos locales en la imagen, pero no se crea localmente, sino en el lado del servidor, es decir, en el motor Docker. Entonces, en esta arquitectura cliente/servidor, ¿cómo puede el servidor obtener archivos locales?

Esto introduce el concepto de contexto. Al compilar, el usuario especificará la ruta para construir el contexto de la imagen. Una vez que el comando dockerbuild aprenda esta ruta, empaquetará todo el contenido en la ruta y luego lo cargará en el motor Docker. De esta manera, después de que el motor Docker reciba el paquete contextual, se expandirá y obtendrá todos los archivos necesarios para construir la imagen.

Comprender el contexto de construcción es muy importante para que la creación de imágenes evite cometer errores innecesarios. Por ejemplo, algunos principiantes descubrieron que COPY /opt/xxxx /app no ​​funcionaba, por lo que simplemente colocaron el Dockerfile en el directorio raíz del disco duro para compilar y descubrieron que después de ejecutar la compilación de Docker, se enviaban decenas de GB de todo fue extremadamente lento y fácil. La compilación falló. Esto se debe a que este enfoque le pide a Docker Build que empaquete todo el disco duro, lo que obviamente es un error de uso.

En términos generales, el Dockerfile debe colocarse en un directorio vacío o en el directorio raíz del proyecto. Si los archivos requeridos no se encuentran en este directorio, debe copiar los archivos requeridos. Si hay elementos en el directorio que realmente no desea pasar al motor Docker durante la compilación, puede escribir un .dockerignore con la misma sintaxis que .gitignore . Este archivo se utiliza para eliminar elementos que no necesitan ser pasado al motor Docker como contexto.

Explicación detallada de las instrucciones de Dockerfile

  1. COPY Copiar archivos: COPY <ruta de origen>… <ruta de destino>


    1. La instrucción COPY copiará los archivos/directorios en <ruta de origen> en el directorio de contexto de compilación a la ubicación <ruta de destino> dentro de la imagen de la nueva capa . Por ejemplo:

      COPY package.json /usr/src/app/
      
    2. <ruta de origen> puede ser múltiple o incluso un comodín

    3. <Ruta de destino> puede ser una ruta absoluta dentro del contenedor o una ruta relativa al directorio de trabajo (el directorio de trabajo se puede
      especificar usando la directiva WORKDIR)

    4. Con la instrucción COPY, se conservarán varios metadatos del archivo fuente. Como lectura, escritura, permisos de ejecución, hora de cambio de archivos, etc. Esta característica es útil para la personalización de imágenes. Especialmente cuando los archivos relacionados con la compilación se administran mediante Git.

  2. ADD es un archivo de copia más avanzado: el formato y las propiedades del comando y COPY son básicamente los mismos. Pero se agregan algunas funciones basadas en COPY

    1. Por ejemplo, <ruta de origen> puede ser una URL. En este caso, el motor Docker intentará descargar el archivo vinculado y colocarlo en la <ruta de destino>.

    2. Si <ruta de origen> es un archivo comprimido tar y el formato de compresión es gzip, bzip2 y xz, el comando ADD descomprimirá automáticamente el archivo comprimido a <ruta de destino> .

    3. Por lo tanto, al elegir entre las instrucciones COPY y ADD, puede seguir este principio: use la instrucción COPY para todas las copias de archivos y use ADD solo cuando se requiera descompresión automática.

  3. Comando de inicio del contenedor CMD :

    formato de shell: CMD <comando>;

    formato ejecutivo: CMD ["archivo ejecutable", "parámetro 1", "parámetro 2"...]

    Cuando presenté los contenedores, una vez dije que Docker no es una máquina virtual, pero los contenedores son procesos. Dado que es un proceso, al iniciar el contenedor, debe especificar el programa y los parámetros que se ejecutarán. La instrucción CMD se utiliza para especificar el comando de inicio predeterminado del proceso principal del contenedor.

    Al ejecutar, puede especificar un nuevo comando para reemplazar el comando predeterminado en la configuración de la imagen . Por ejemplo, el CMD predeterminado de la imagen de Ubuntu es /bin/bash. Si ejecutamos Docker directamente -it ubuntu, ingresaremos directamente a bash. También podemos especificar otros comandos para ejecutar en tiempo de ejecución, como docker run -it ubuntu cat /etc/os-release. Esto significa reemplazar el comando /bin/bash predeterminado con el comando cat /etc/os-release y generar la información de la versión del sistema.

  4. PUNTO DE ENTRADAPunto de entrada

    El propósito de ENTRYPOINT es el mismo que el de CMD, que es especificar el programa y los parámetros de inicio del contenedor. ENTRYPOINT también se puede reemplazar en tiempo de ejecución, pero es un poco más engorroso que CMD y debe especificarse mediante el parámetro --entrypoint de docker run.

    Cuando se especifica ENTRYPOINT, el significado de CMD cambia. En lugar de ejecutar su comando directamente, el contenido de CMD se pasa a la instrucción ENTRYPOINT como parámetro. En otras palabras, cuando realmente se ejecuta, se convertirá en: ""

    Después de tener CMD, ¿por qué necesitamos ENTRYPOINT?

    1. Deja que la imagen se use como un comando.

    2. Preparativos antes de ejecutar la aplicación.

  5. ENV establece variables de entorno: los dos formatos son los siguientes:

    ENV
    ENV = =…

    Este comando es solo para establecer variables de entorno. Ya sean otras instrucciones posteriores, como RUN o aplicaciones en tiempo de ejecución, puede usar directamente las variables de entorno definidas aquí.

    Una vez definida la variable de entorno, esta variable de entorno se puede utilizar en instrucciones posteriores.

  6. Parámetros de compilación de ARG : Formato: ARG <nombre del parámetro>[=<valor predeterminado>]

    Los parámetros de compilación tienen el mismo efecto que ENV, configurando variables de entorno. La diferencia es que las variables de entorno del entorno de compilación establecidas por ARG no existirán cuando el contenedor se ejecute en el futuro.

    La directiva ARG en Dockerfile define los nombres de los parámetros y define sus valores predeterminados. Este valor predeterminado se puede anular con --build-arg <nombre del argumento>=<valor> en el comando de compilación docker build.

  7. VOLUMEN define un volumen anónimo

    El formato es:
    VOLUMEN [“<ruta1>”, “<ruta2>”…]
    VOLUMEN <ruta>

    Hemos dicho antes que cuando el contenedor se está ejecutando, debemos intentar evitar que la capa de almacenamiento del contenedor escriba operaciones . Para las aplicaciones de bases de datos que necesitan guardar datos dinámicos, sus archivos de bases de datos deben almacenarse en volúmenes . Introduciremos más a fondo los volúmenes de Docker en los siguientes capítulos el concepto de.

    Para evitar que los usuarios olviden montar el directorio donde se guardan los archivos dinámicos como volúmenes durante el tiempo de ejecución, en el Dockerfile, podemos especificar ciertos directorios para que se monten como volúmenes anónimos de antemano, de modo que si el usuario no especifica el montaje en tiempo de ejecución , la aplicación puede funcionar normalmente y ejecutarse sin escribir grandes cantidades de datos en la capa de almacenamiento del contenedor.

    VOLUME /data
    

    El directorio /data aquí se montará automáticamente como un volumen anónimo en tiempo de ejecución, y cualquier información escrita en /data no se registrará en la capa de almacenamiento del contenedor, lo que garantiza la falta de estado de la capa de almacenamiento del contenedor.

  8. EXPOSE declarar puerto

    El formato es: EXPOSE <puerto1> [<puerto2>…]

    La directiva EXPOSE declara que el contenedor de tiempo de ejecución proporciona un puerto de servicio. Esto es solo una declaración. La aplicación no abrirá el servicio de este puerto en tiempo de ejecución debido a esta declaración.

    Escribir dicha declaración en Dockerfile tiene dos beneficios:

    1. Uno es ayudar a los usuarios de imágenes a comprender el puerto de guardia de este servicio de imágenes para facilitar el mapeo de configuración;

    2. Otro uso es cuando se utiliza el mapeo de puertos aleatorio en tiempo de ejecución, es decir, cuando Docker ejecuta -P, el puerto EXPOSE se mapeará automática y aleatoriamente.

  9. WORKDIR especifica el directorio de trabajo

    El formato es: WORKDIR <ruta del directorio de trabajo>

    Puede utilizar el comando WORKDIR para especificar el directorio de trabajo (o el directorio actual). En el futuro, el directorio actual de cada capa se cambiará al directorio especificado. Si el directorio no existe, WORKDIR le ayudará a crear el directorio.

    Como se mencionó anteriormente, un error común que cometen algunos principiantes es escribir Dockerfile como un script de Shell. Esta comprensión incorrecta
    también puede provocar los siguientes errores:

    RUN cd /app
    RUN echo "hello" > world.txt
    

    Si ejecuta este Dockerfile para crear la imagen, encontrará que no se puede encontrar el archivo /app/world.txt o que su contenido no es hola. La razón es realmente muy simple: en Shell, dos líneas consecutivas representan el mismo entorno de ejecución del proceso, por lo que el estado de la memoria modificado por el comando anterior afectará directamente al comando posterior; en Dockerfile, los entornos de ejecución de las dos líneas de RUN Los comandos son fundamentalmente diferentes. Son dos contenedores completamente diferentes . Este es un error causado por no comprender el concepto de crear almacenamiento jerárquico utilizando Dockerfile.

    Como se mencionó anteriormente, cada RUN inicia un contenedor, ejecuta el comando y luego confirma los cambios del archivo de la capa de almacenamiento.

Operar contenedores Docker

En pocas palabras, un contenedor es una aplicación o un grupo de aplicaciones que se ejecutan de forma independiente, así como su entorno de ejecución. En consecuencia, una máquina virtual puede entenderse como un conjunto completo de sistemas operativos que simulan la ejecución (proporcionando un entorno de ejecución y otros entornos del sistema) y aplicaciones que se ejecutan en él.

Contenedor de inicio

Hay dos formas de iniciar un contenedor: una es crear un nuevo contenedor basado en la imagen e iniciarlo y la otra es reiniciar el contenedor en el estado terminado (detenido).

Crear nuevo y comenzar

El comando requerido es principalmente docker run .

Por ejemplo, el siguiente comando genera un "Hola Docker" y luego finaliza el contenedor:

[root@localhost snow]# docker run ubuntu:16.04 /bin/echo 'Hello Docker'
Hello Docker

El siguiente comando inicia una terminal bash, permitiendo la interacción del usuario:

[root@localhost snow]# docker run -t -i ubuntu:16.04 /bin/bash
root@d80afe7ea29f:/# ps
   PID TTY          TIME CMD
     1 pts/0    00:00:00 bash
    10 pts/0    00:00:00 ps
root@d80afe7ea29f:/# exit
exit

Entre ellos, la opción -t permite a Docker asignar un pseudo-tty (pseudo-tty) y vincularlo a la entrada estándar del contenedor, y -i mantiene abierta la entrada estándar del contenedor.

Cuando se utiliza Docker Run para crear un contenedor, las operaciones estándar que Docker ejecuta en segundo plano incluyen:

  1. Compruebe si la imagen especificada existe localmente. Si no existe, descárguela del almacén público.
  2. Crear e iniciar un contenedor usando una imagen.
  3. Asigne un sistema de archivos y monte una capa de lectura y escritura fuera de la capa de imagen de solo lectura
  4. Puentear una interfaz virtual desde la interfaz puente configurada en el host al contenedor
  5. Configure una dirección IP desde el grupo de direcciones al contenedor
  6. Ejecutar la aplicación especificada por el usuario
  7. Después de la ejecución, el contenedor finaliza.
Iniciar un contenedor terminado

Puede utilizar el comando de inicio del contenedor Docker para iniciar directamente un contenedor terminado.

El núcleo del contenedor es la aplicación que se ejecuta y todos los recursos necesarios son necesarios para que la aplicación se ejecute. Aparte de esto, no hay otros recursos. Puede usar ps o top en una pseudo terminal para ver la información del proceso.

Proceso en segundo plano

La mayoría de las veces, es necesario dejar que Docker se ejecute en segundo plano en lugar de enviar directamente los resultados de la ejecución del comando al host actual.
En este punto, esto se puede lograr agregando el parámetro -d.

Después de comenzar con el parámetro -d, se devolverá una ID única. También puede ver la información del contenedor a través del comando docker container ls.

[root@localhost snow]# docker container ls
CONTAINER ID   IMAGE       COMMAND                  CREATED      STATUS      PORTS                               NAMES
e015f7987776   nginx:2.0   "/docker-entrypoint.…"   6 days ago   Up 6 days   0.0.0.0:81->80/tcp, :::81->80/tcp   web2.0
054d1cdcf5cf   nginx       "/docker-entrypoint.…"   6 days ago   Up 6 days   0.0.0.0:80->80/tcp, :::80->80/tcp   web1.0

Para obtener la información de salida del contenedor, puede utilizar el comando Docker Container Logs .

Terminar contenedor

Puede utilizar la parada del contenedor Docker para finalizar un contenedor en ejecución.

Además, cuando finaliza la aplicación especificada en el contenedor Docker, el contenedor finaliza automáticamente . Por ejemplo, para el contenedor que solo inició una terminal en el capítulo anterior, cuando el usuario sale de la terminal mediante el comando de salida o Ctrl+d, el contenedor creado finalizará inmediatamente.

El contenedor terminado se puede ver usando el comando docker container ls -a. Por ejemplo

[root@localhost snow]# docker container ls -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                        PORTS                               NAMES
d80afe7ea29f   ubuntu:16.04   "/bin/bash"              9 minutes ago    Exited (0) 9 minutes ago                                          bold_saha
626c2066188c   ubuntu:16.04   "/bin/bash"              10 minutes ago   Exited (127) 10 minutes ago                                       jolly_shockley
791d1f4d5eca   ubuntu:16.04   "/bin/bash"              10 minutes ago   Exited (127) 10 minutes ago                                       boring_margulis
1280e87e1cae   ubuntu:16.04   "/bin/echo 'Hello Do…"   11 minutes ago   Exited (0) 11 minutes ago                                         wonderful_saha

Un contenedor en un estado terminado se puede reiniciar mediante el comando de inicio del contenedor de la ventana acoplable.
Además, el comando de reinicio del contenedor Docker finalizará un contenedor en ejecución y luego lo reiniciará.

Introduzca el contenedor

Cuando se utiliza el parámetro -d, el contenedor pasará a segundo plano después de iniciarse.

A veces es necesario ingresar al contenedor para realizar operaciones, incluido el uso del comando docker adjunto o el comando docker exec. Se recomienda que utilice el comando docker exec por los motivos que se explican a continuación.

  1. adjuntar comando

    docker adjunto es un comando que viene con Docker. A continuación se muestra un ejemplo de cómo utilizar este comando:

    [root@localhost snow]# docker container ls
    CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                               NAMES
    5f6884f826e4   ubuntu      "/bin/bash"              23 seconds ago   Up 22 seconds                                       practical_payne
    e015f7987776   nginx:2.0   "/docker-entrypoint.…"   6 days ago       Up 6 days       0.0.0.0:81->80/tcp, :::81->80/tcp   web2.0
    054d1cdcf5cf   nginx       "/docker-entrypoint.…"   6 days ago       Up 6 days       0.0.0.0:80->80/tcp, :::80->80/tcp   web1.0
    [root@localhost snow]# docker attach 5f6
    root@5f6884f826e4:/# exit
    exit
    [root@localhost snow]# docker container ls
    CONTAINER ID   IMAGE       COMMAND                  CREATED      STATUS      PORTS                               NAMES
    e015f7987776   nginx:2.0   "/docker-entrypoint.…"   6 days ago   Up 6 days   0.0.0.0:81->80/tcp, :::81->80/tcp   web2.0
    054d1cdcf5cf   nginx       "/docker-entrypoint.…"   6 days ago   Up 6 days   0.0.0.0:80->80/tcp, :::80->80/tcp   web1.0
    

    Nota: Salir de esta entrada estándar hará que el contenedor se detenga.

  2. comando ejecutivo

    Docker exec puede ser seguido por múltiples parámetros, aquí explicamos principalmente los parámetros -i -t.

    Cuando solo se usa el parámetro -i, dado que no se asigna ningún pseudo terminal, la interfaz no tiene el símbolo del sistema familiar de Linux, pero
    aún se pueden devolver los resultados de la ejecución del comando.

    Cuando los parámetros -i -t se usan juntos, puede ver el símbolo del sistema familiar de Linux.

    [root@localhost snow]# docker run -dit ubuntu
    3a7731e1a8a290b59263e9c73695f0a52e57e009505b4652be57c3fbe88a147e
    [root@localhost snow]# docker container ls
    CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                               NAMES
    3a7731e1a8a2   ubuntu      "/bin/bash"              3 seconds ago   Up 2 seconds                                       hardcore_ptolemy
    e015f7987776   nginx:2.0   "/docker-entrypoint.…"   6 days ago      Up 6 days      0.0.0.0:81->80/tcp, :::81->80/tcp   web2.0
    054d1cdcf5cf   nginx       "/docker-entrypoint.…"   6 days ago      Up 6 days      0.0.0.0:80->80/tcp, :::80->80/tcp   web1.0
    [root@localhost snow]# docker exec -it 3a77 bash
    root@3a7731e1a8a2:/# exit
    exit
    [root@localhost snow]# docker container ls
    CONTAINER ID   IMAGE       COMMAND                  CREATED              STATUS              PORTS                               NAMES
    3a7731e1a8a2   ubuntu      "/bin/bash"              About a minute ago   Up About a minute                                       hardcore_ptolemy
    e015f7987776   nginx:2.0   "/docker-entrypoint.…"   6 days ago           Up 6 days           0.0.0.0:81->80/tcp, :::81->80/tcp   web2.0
    054d1cdcf5cf   nginx       "/docker-entrypoint.…"   6 days ago           Up 6 days           0.0.0.0:80->80/tcp, :::80->80/tcp   web1.0
    

    Salir de esta entrada estándar no hará que el contenedor se detenga. Es por eso que se recomienda que todos usen Docker Exec.

    Para obtener más descripciones de parámetros, utilice docker exec --help para ver

Exportación e importación de contenedores.

Contenedor de exportación:

Si desea exportar un contenedor local, puede utilizar el comando de exportación de Docker. (Esto exportará la instantánea del contenedor a un archivo local)

[root@localhost snow]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                        PORTS                               NAMES
3a7731e1a8a2   ubuntu         "/bin/bash"              4 minutes ago    Up 4 minutes                                                      hardcore_ptolemy
[root@localhost snow]# docker export 3a77 > ubuntuBash.tar

Contenedor de importación:

Puede utilizar Docker Import para importar desde el archivo de instantánea del contenedor a una imagen:

[root@localhost snow]# cat ubuntuBash.tar | docker import - test/ubuntu:test2.0
sha256:1f2b949f67cade289f240a22612630363380d95b43d63bc60e032bbff69bc373
[root@localhost snow]# docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
test/ubuntu   test2.0   1f2b949f67ca   12 seconds ago   77.8MB
nginx         3.0       e899e0dd12df   3 hours ago      143MB

Además, también puedes importar especificando una URL o un directorio.

Nota: Los usuarios pueden usar Docker Load para importar archivos de almacenamiento de imágenes a la biblioteca de imágenes local o usar DockerImport para importar una instantánea del contenedor a la biblioteca de imágenes local. La diferencia entre los dos es que el archivo de instantánea del contenedor descarta todos los registros históricos y la información de metadatos (es decir, solo guarda el estado de la instantánea del contenedor en ese momento), mientras que el archivo de almacenamiento de imágenes guarda registros completos y es de mayor tamaño.

Además, la información de metadatos, como las etiquetas, se puede volver a especificar al importar desde un archivo de instantánea de contenedor.

Eliminar contenedor

Puede utilizar Docker Container RM para eliminar un contenedor que se encuentra en un estado terminado. Por ejemplo

[root@localhost snow]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED             STATUS                           PORTS                               NAMES
3a7731e1a8a2   ubuntu         "/bin/bash"              15 minutes ago      Up 15 minutes                                                        hardcore_ptolemy
5f6884f826e4   ubuntu         "/bin/bash"              19 minutes ago      Exited (0) 18 minutes ago                                            practical_payne
d80afe7ea29f   ubuntu:16.04   "/bin/bash"              About an hour ago   Exited (0) About an hour ago                                         bold_saha
[root@localhost snow]# docker container rm 5f68
5f68

Si desea eliminar un contenedor en ejecución, puede agregar el parámetro -f. Docker enviará la señal SIGKILL al contenedor.

Limpiar todos los contenedores terminados.

Utilice el comando docker container ls -a para ver todos los contenedores creados, incluido el estado terminado. Si hay demasiados, puede resultar problemático eliminarlos uno por uno. Utilice el siguiente comando para limpiar todos los contenedores en el estado terminado.

$ docker container prune

Visita el almacén

El repositorio es un lugar donde las imágenes se almacenan de forma centralizada.

Un concepto que fácilmente se confunde es el de servidor de registro (Registro). De hecho, el servidor de registro es un servidor específico que administra el almacén. Cada servidor puede tener múltiples almacenes y cada almacén tiene múltiples espejos. En este sentido, un repositorio puede considerarse como un proyecto o directorio específico. Por ejemplo, para la dirección del almacén dl.dockerpool.com/ubuntu, dl.dockerpool.com es la dirección del servidor de registro y ubuntu es el nombre del almacén.

Centro acoplable

Docker mantiene oficialmente un repositorio público, Docker Hub, que ya contiene más de 15.000 imágenes. La mayoría de los requisitos se pueden cumplir descargando la imagen directamente desde Docker Hub.

  1. Registro: registre una cuenta Docker gratuita en https://cloud.docker.com

  2. Iniciar sesión: ejecute el inicio de sesión de Docker para iniciar sesión, ejecute el cierre de sesión de Docker para cerrar sesión.

  3. Extraiga la imagen: utilice el comando de búsqueda de Docker para encontrar la imagen en el almacén oficial y utilice el comando de extracción de Docker para
    descargarla localmente;

    Los recursos espejo se pueden dividir en dos categorías según se proporcionen oficialmente.

    1. Una es una imagen como centos, llamada imagen base o imagen raíz, que se proporciona oficialmente
    2. Otro tipo, como la imagen tianon/centos, es creada y mantenida por los usuarios de Docker y, a menudo, tiene el
      prefijo del nombre de usuario.
  4. Enviar la imagen: use el comando docker push para enviar su propia imagen a Docker Hub

  5. Creación automática: muy conveniente para quienes necesitan actualizar frecuentemente los programas en la imagen

    Permite a los usuarios especificar proyectos de seguimiento en un sitio web de destino (que actualmente admite GitHub o BitBucket) a través de Docker Hub. Una vez que se produce un nuevo envío en el proyecto o se crea una nueva etiqueta, Docker Hub creará automáticamente la imagen y la enviará a Docker Hub.

Almacén privado

Para la dirección dl.dockerpool.com/ubuntu, dl.dockerpool.com es la dirección del servidor de registro y ubuntu es el nombre del almacén.

Centro acoplable

Docker mantiene oficialmente un repositorio público, Docker Hub, que ya contiene más de 15.000 imágenes. La mayoría de los requisitos se pueden cumplir descargando la imagen directamente desde Docker Hub.

  1. Registro: registre una cuenta Docker gratuita en https://cloud.docker.com

  2. Iniciar sesión: ejecute el inicio de sesión de Docker para iniciar sesión, ejecute el cierre de sesión de Docker para cerrar sesión.

  3. Extraiga la imagen: utilice el comando de búsqueda de Docker para encontrar la imagen en el almacén oficial y utilice el comando de extracción de Docker para
    descargarla localmente;

    Los recursos espejo se pueden dividir en dos categorías según se proporcionen oficialmente.

    1. Una es una imagen como centos, llamada imagen base o imagen raíz, que se proporciona oficialmente
    2. Otro tipo, como la imagen tianon/centos, es creada y mantenida por los usuarios de Docker y, a menudo, tiene el
      prefijo del nombre de usuario.
  4. Enviar la imagen: use el comando docker push para enviar su propia imagen a Docker Hub

  5. Creación automática: muy conveniente para quienes necesitan actualizar frecuentemente los programas en la imagen

    Permite a los usuarios especificar proyectos de seguimiento en un sitio web de destino (que actualmente admite GitHub o BitBucket) a través de Docker Hub. Una vez que se produce un nuevo envío en el proyecto o se crea una nueva etiqueta, Docker Hub creará automáticamente la imagen y la enviará a Docker Hub.

Almacén privado

Supongo que te gusta

Origin blog.csdn.net/weixin_40709965/article/details/131246908
Recomendado
Clasificación