English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dockerfile es un archivo de texto utilizado para construir imágenes, que contiene instrucciones y explicaciones necesarias para construir imágenes.
Personalización de imágenes con Dockerfile
1、A continuación, se explicará cómo ejecutar el archivo Dockerfile para personalizar una imagen (las instrucciones detalladas del archivo Dockerfile se presentarán en la sección siguiente, aquí solo necesita saber el flujo de construcción). /usr/share/nginx/html/index.html Archivo)
En un directorio vacío, cree un archivo llamado Dockerfile y agregue el siguiente contenido al archivo:
FROM nginx RUN echo 'Esta es una imagen de nginx construida localmente' > /usr/share/nginx/html/index.html
2El papel de las instrucciones FROM y RUN
FROM:Las imágenes personalizadas están basadas en las imágenes FROM, aquí nginx es la imagen base que necesita para la personalización. Las operaciones posteriores se basan en nginx.
RUN:Se utiliza para ejecutar los comandos de línea de comandos que siguen. Hay dos formatos:
Formato shell:
RUN <comando de línea> # <comando de línea> es equivalente a ejecutar el comando shell en el terminal.
Formato exec:
RUN ["archivo ejecutable", "parámetros1", "parámetros2"] # Por ejemplo: # RUN ["./test.php", "dev", "offline"] equivalente a RUN ./test.php dev offline
Nota:Cada vez que se ejecuta una instrucción en Dockerfile, se crea una nueva capa en docker. Por lo tanto, demasiadas capas sin sentido pueden causar que la imagen se inflate demasiado. Por ejemplo:
FROM centos RUN yum install wget RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" RUN tar -xvf redis.tar.gz La ejecución anterior creará 3 Capa de imagen. Puede simplificarse al siguiente formato: FROM centos RUN yum install wget \ && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \ && tar -xvf redis.tar.gz
Como se muestra anteriormente, las órdenes se conectan con el símbolo &&, de modo que después de su ejecución, solo se creará 1 Capa de imagen.
Ejecute la acción de construcción en el directorio donde se almacena el archivo Dockerfile.
A continuación, un ejemplo de cómo construir un nginx:v3(Nombre del espejo: etiqueta del espejo).
Nota: El último punto . representa la ruta de contexto de esta ejecución, se presentará en la próxima sección.
$ docker build -t nginx:v3 .
Como se muestra anteriormente, indica que la construcción ha sido exitosa.
En la sección anterior, se mencionó que el último punto . de la instrucción es la ruta de contexto, entonces, ¿qué es la ruta de contexto?
$ docker build -t nginx:v3 .
: La ruta de contexto es la ruta que Docker utiliza para construir imágenes, a veces se necesita usar archivos de la máquina local (como copiar), cuando el comando docker build conoce esta ruta, paquetará todo el contenido de la ruta.
Análisis: Debido al modo de ejecución de Docker es C/S. Nuestra máquina es C, el motor Docker es S. El proceso de construcción real se completa en el motor Docker, por lo que en este momento no se pueden usar los archivos de nuestra máquina. Esto requiere que paquetemos los archivos del directorio específico de nuestra máquina y los proporcionemos al motor Docker para su uso.
Si no se especifica el último parámetro, la ruta de contexto predeterminada es la ubicación del Dockerfile.
Nota: No coloque archivos inútiles en la ruta de contexto, ya que se enviarán al motor Docker junto con el paquete, lo que podría ralentizar el proceso, especialmente si hay muchos archivos.
Instrucción de copia, copia archivos o directorios desde el directorio de contexto al directorio especificado dentro del contenedor.
Formato:
COPY [--chown=<user>:<group>] <ruta de origen1>... <ruta de destino> COPY [--chown=<user>:<group>] ["<ruta de origen1>",... "<ruta de destino>"]
[--chown=<user>:<group>]: Parámetro opcional, el usuario puede cambiar el propietario y el grupo del archivo copiado al interior del contenedor.
<ruta de origen>: El archivo de origen o el directorio de origen, aquí puede ser una expresión de comodín, las reglas de comodín deben cumplir con las reglas de Go filepath.Match. Por ejemplo:
COPY hom* /mydir/ COPY hom?.txt /mydir/
<ruta de destino>: La ruta especificada dentro del contenedor, esta ruta no necesita crearse previamente, si la ruta no existe, se creará automáticamente.
El formato de uso de la instrucción ADD es el mismo que el de COPY (oficialmente se recomienda usar COPY bajo las mismas necesidades). Las funciones también son similares, las diferencias son las siguientes:
Las ventajas de ADD: Si <archivo de origen> es un archivo comprimido tar, el formato de compresión es gzip, bzip2 Además de xz, se copiará y descomprimirá automáticamente en <ruta de destino>.
Las desventajas de ADD: Sin descomprimir, no se puede copiar el archivo comprimido tar. Puede hacer que el caché de construcción de imágenes se vuelva ineficaz, lo que podría ralentizar la construcción de imágenes. La decisión de usarlo o no puede basarse en si es necesario descomprimir automáticamente.
Similar a la instrucción RUN, se usa para ejecutar programas, pero su punto de tiempo de ejecución es diferente:
CMD se ejecuta en docker run.
RUN se ejecuta en docker build.
Función:Especifica el programa que se ejecutará por defecto en el contenedor iniciado. Al finalizar el programa, el contenedor también finalizará. El programa especificado por CMD puede ser sobrescrito por el programa especificado en los parámetros de línea de comandos de docker run.
Nota:Si en el Dockerfile hay múltiples instrucciones CMD, solo la última tiene efecto.
Formato:
CMD <comando shell> CMD ["<archivo ejecutable o comando>","<param1>","<param2>",...] CMD ["<param1>","<param2>",...] # Esta forma es para proporcionar parámetros por defecto al programa especificado por la instrucción ENTRYPOINT
Se recomienda usar el segundo formato, que es más claro en el proceso de ejecución. El primer formato se convertirá automáticamente al segundo formato en el proceso de ejecución y el archivo ejecutable por defecto es sh.
Similar a CMD, pero no se sobrescribe por los parámetros de línea de comandos especificados en docker run y estos parámetros de línea de comandos se enviarán como parámetros al programa especificado por la instrucción ENTRYPOINT.
Pero, si se usa docker run y se especifica --La opción entrypoint sobrescribe la instrucción CMD.
Ventajas:Al ejecutar docker run, se pueden especificar los parámetros necesarios para ENTRYPOINT.
Nota:Si en el Dockerfile hay múltiples instrucciones ENTRYPOINT, solo la última tiene efecto.
Formato:
ENTRYPOINT ["<ejecutable>","<param1>","<param2>",...]
Se puede usar junto con el comando CMD: generalmente se usa CMD cuando se necesitan parámetros variables, aquí CMD es equivalente a proporcionar parámetros a ENTRYPOINT, se mencionará a continuación.
Ejemplo:
Supongamos que ya se ha construido la imagen nginx:test a través de Dockerfile:
FROM nginx ENTRYPOINT ["nginx", "-c"] # parámetros definidos CMD ["/etc/nginx/nginx.conf"] # parámetros variables
1、ejecutar sin parámetros
$ docker run nginx:test
Dentro del contenedor se ejecutarán por defecto los siguientes comandos, iniciando el proceso principal.
nginx -c /etc/nginx/nginx.conf
2、ejecutar con parámetros
$ docker run nginx:test -c /etc/nginx/new.conf
Dentro del contenedor se ejecutarán por defecto los siguientes comandos, iniciando el proceso principal (/etc/nginx/new.conf: asume que el archivo ya existe dentro del contenedor)
nginx -c /etc/nginx/new.conf
Configurar las variables de entorno, definir las variables de entorno, luego se puede usar esta variable de entorno en las instrucciones posteriores.
Formato:
ENV <key> <value> ENV <key1>=<value1> <key2>=<value2>...
A continuación se muestra el ejemplo de configuración de NODE_VERSION = 7.2.0 , Se puede referir a $NODE_VERSION en las instrucciones posteriores:
ENV NODE_VERSION 7.2.0 RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \ && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc"
Parámetros de construcción, tienen el mismo efecto que ENV. Sin embargo, el alcance es diferente. Las variables de entorno configuradas por ARG solo son válidas dentro del Dockerfile, es decir, solo son válidas durante el proceso de build de docker, no existen en la imagen construida.
El comando build se puede usar en el comando docker build. --build-Para sobrescribir, use arg <nombre_del_parámetro>=<valor>.
Formato:
ARG <nombre_del_parámetro>[=<valor_por_defecto>]
Definir un volumen de datos anónimo. Si olvida montar el volumen de datos al arrancar el contenedor, se montará automáticamente en el volumen anónimo.
Función:
Evitar que los datos importantes se pierdan debido al reinicio del contenedor, lo que es muy mortal.
Evitar que el contenedor crezca constantemente.
Formato:
VOLUME ["<ruta1>", "<ruta2>"...] VOLUME <ruta>
Al arrancar el contenedor docker run, podemos usar -El parámetro v se utiliza para modificar el punto de montaje.
Sólo declara el puerto.
Función:
Ayudar a los usuarios de la imagen a comprender el puerto de servicio de guardian de esta imagen para facilitar la configuración de mapeo.
Al usar mapeo de puertos aleatorios en tiempo de ejecución, es decir, docker run -Cuando P está activado, se mapeará automáticamente un puerto EXPOSE al azar.
Formato:
EXPOSE <puerto1> [<puerto2>...]
Especificar el directorio de trabajo. El directorio de trabajo especificado con WORKDIR existirá en cada capa de construcción de la imagen. (El directorio de trabajo especificado con WORKDIR debe haberse creado previamente).
En el proceso de construcción de la imagen de docker, cada comando RUN es una nueva capa. Solo los directorios creados mediante WORKDIR existirán permanentemente.
Formato:
WORKDIR <ruta del directorio de trabajo>
Se utiliza para especificar el usuario y el grupo de usuarios que ejecutarán los comandos posteriores, aquí solo se cambia el usuario que ejecutará los comandos posteriores (el usuario y el grupo de usuarios deben existir previamente).
Formato:
USER <用户名>[:<用户组>]
HEALTHCHECK
Formato:
Se utiliza para especificar un programa o instrucción para monitorear el estado de ejecución del servicio de contenedor docker. HEALTHCHECK [opciones] CMD <comando>: Establece el comando para verificar el estado de salud del contenedor HEALTHCHECK NONE: Si la imagen base tiene instrucciones de verificación de salud, se puede usar esta línea para deshabilitar las instrucciones de verificación de salud
ONBUILD-Se utiliza para demorar la ejecución de comandos de construcción. En términos simples, los comandos especificados por ONBUILD en el Dockerfile no se ejecutarán en este proceso de construcción de imagen (asumiendo que la imagen es test-build). Cuando se utiliza un nuevo Dockerfile que utiliza la imagen previamente construida FROM test-Comandos especificados por ONBUILD en el Dockerfile de build. Esto se ejecuta cuando se construye el Dockerfile para la nueva imagen, se ejecuta test
Formato:
ONBUILD <otras instrucciones>