Una de las directivas comunes en un DockerFile es la Directiva de Entrada. Esta directiva especifica el ejecutable que se ejecuta durante la creación de contenedores desde la imagen DockerFile.
Esta guía analiza cómo funciona la Directiva de Entrada en Docker y cómo usarla en Dockerfiles.
Uso básico
La directiva de EntryPoint en un DockerFile toma dos formularios, formulario ejecutivo y forma de concha. Tener una Directiva de Entrada en el DockerFile evita que el contenedor comience y se detenga automáticamente.
La sintaxis general para la directiva de EntryPoint es:
Forma ejecutiva:
EntryPoint [EXEC, Opción1, Opción2 ... opción]
El ejecutivo representa el ejecutable para ejecutar; Las opciones son los parámetros que se ejecutarán al ejecutable.
La otra forma de la Directiva de EnteryPoint es el formulario de shell. El formulario de shell se ejecuta como un subcomando desde /bin /sh -c [comando]. La sintaxis general para este formulario es como:
Opción de comando de EntradaPoint1, opción2 ... opción
Del mismo modo, el comando es un ejecutable de shell, mientras que las opciones representan los parámetros para pasar al comando.
Cómo funciona EntryPoint
En pocas palabras, la directiva de EntryPoint en un DockerFile permite que los contenedores creados desde la imagen ejecutaran un ejecutable después de la creación. Desafortunadamente, las dos formas de la Directiva de EntryPoint tienden a comportarse de manera diferente:
El formulario de shell de la Directiva EntryPoint no admite los argumentos de comando al iniciar el contenedor. Además, a diferencia de la forma ejecutiva que ejecuta el ejecutable en segundo plano, la forma de shell se ejecuta como un sub de /bin /sh -c que inicia el proceso con un valor PID diferente que el proceso de contenedor.
Por otro lado, el formulario ejecutivo admite argumentos durante la creación de contenedores. Esto significa que el comando se ejecuta después del ejecutable que se establece en el punto de entrada. Entonces, por ejemplo, si agrega una opción al comando Docker ejecutivo, se ejecuta en segundo plano después del conjunto ejecutable en el punto de entrada. Además, Docker le permite anular el valor de EntryPoint utilizando la opción -EntryPoint durante la creación de contenedores.
Ejemplo 1: formulario ejecutivo
Ilustramos cómo funciona el formulario ejecutivo. En este ejemplo, usamos una imagen Nginx como caso de prueba.
Una muestra Dockerfile contiene las entradas como:
De Debian: Último
Ejecute Apt-Get Update && \
apt -get install -y nginx
Label mantenedor = "Linuxhint"
Versión de etiqueta = "1.0 "
Descripción de la etiqueta = "Una imagen simple que ejecuta nginx en el Debain 10"
Exponer 80/TCP
EntryPoint ["nginx", "-g", "demonio apagado"; ]
Construyamos la imagen del archivo Docker como:
Docker Build - -Pull - -Rm -f "Dockerfile -T Nginx: Custom"."
Con la imagen, creemos un contenedor y inicie un shell en el contenedor.
Docker Exec -IT F3538752D6C3 Bash
Dentro del shell del contenedor, realicemos comandos básicos e instale algunos paquetes.
root@f3538752d6c3:/# sudo apt-get update && apt-get install htop
Si ejecuta HTOP dentro del contenedor, obtendrá una salida similar a la que se muestra a continuación:
Si ignora todos los procesos de trabajadores Nginx y HTOP, nota que el Daemon Nginx principal se está ejecutando como PID de 1.
Ejemplo 2: forma de shell
Si cambia el DockerFile para ver como se muestra en las entradas a continuación:
De Debian: Último
Ejecute Apt-Get Update && \
apt -get install -y nginx
Label mantenedor = "Linuxhint"
Versión de etiqueta = "1.0 "
Descripción de la etiqueta = "Una imagen simple que ejecuta nginx en el Debain 10"
Exponer 80/TCP
EntryPoint "Nginx" "-G" "Daemon Off;"
Construir la imagen y crear un contenedor.
Docker Build - -Pull - -Rm -f "Dockerfile.dockerfile "-t nginx: personalizado"."
Docker Run -d--Name Nginx-EXEC-Form Nginx: Custom
Dentro del contenedor, si ejecutamos el comando HTOP, vemos que el proceso de trabajador nginx se ejecuta debajo /bin /sh -c como:
También puede obtener una salida similar examinando el contenedor utilizando el comando Docker Inspect como:
Resumen rápido
Es bueno no confundir el Docker Entrypoint y las directivas CMD de Docker. Aunque ambas directivas definen los comandos para las ejecuciones de Docker durante el tiempo de ejecución del contenedor:
Asegúrese de usar la directiva DockerFile EntryPoint al ejecutar el contenedor como ejecutable.
Use CMD para definir argumentos predeterminados para EntryPoint o para ejecutar comandos ad-hoc en el contenedor.
NOTA: Los argumentos de CMD se anularán al ejecutar el contenedor con otros argumentos.
Como se indicó anteriormente, cualquier DockerFile debe incluir CMD o EntryPoint Directive.
En conclusión.
En conclusión, Docker EntryPoint es una opción muy adecuada al definir ejecutable para los contenedores. Para obtener más información, consulte la documentación.