Diferencia entre los comandos RUN vs CMD vs ENTRYPOINT Docker

Comandos como CMD , RUN y ENTRYPOINT se usan indistintamente cuando se escribe un dockerfile para crear la imagen de Docker. Sin embargo, si acaba de comenzar a usar Docker o no tiene suficiente experiencia práctica trabajando con estos comandos, estos comandos pueden causarle mucha confusión. En este artículo, vamos a discutir los tres comandos en profundidad con ejemplos prácticos.

Pero antes de sumergirnos en la explicación, primero debemos comprender las diferentes formas de ejecución. Podemos usar dos formas diferentes para ejecutar comandos en Docker .

 Forma de concha:

 El procesamiento de shell normal tiene lugar si optamos por la ejecución de comandos en forma de shell. Detrás de escena, bash llama a /bin/sh -c . La forma general de los comandos de shell es como se muestra a continuación:

<Instruction> <Command>

 Para obtener una imagen más clara, mire los comandos a continuación.

RUN apt-get -y install firefox
CMD echo "GeeksforGeeks"
ENTRYPOINT echo "GeeksforGeeks"

Los dos comandos anteriores generan «GeeksforGeeks». La forma de shell de los comandos de ejecución se usa generalmente para los comandos RUN .

 Formulario ejecutable:

La forma ejecutable de los comandos se usa generalmente para los comandos CMD y ENTRYPOINT . La forma general de los comandos ejecutables es como se muestra a continuación:

<Instruction> ["executable", "parameter no. 1", "parameter no. 2", ...]

El uso de la forma ejecutable de los comandos ejecuta los comandos directamente y no se lleva a cabo el procesamiento de shell. Echa un vistazo a los comandos a continuación.:

ENTRYPOINT ["/bin/echo", "geeksforgeeks"]
CMD ["/bin/echo", "geeksforgeeks"]

Ahora intentemos comprender los comandos RUN , CMD y ENTRYPOINT en profundidad.

1. Comando EJECUTAR :

Cuando usa un comando EJECUTAR en su dockerfile , siempre crea una nueva capa de imagen intermedia encima de las anteriores. Es por eso que siempre se recomienda enstringr todos los comandos RUN juntos.

RUNcommand en forma ejecutable es:

RUN ["apt-get", "install", "firefox"]

El comando EJECUTAR en forma de shell es:

RUN apt-get -y install firefox

2. Comando CMD

Un comando CMD se usa para establecer un comando predeterminado que se ejecuta una vez que ejecuta Docker Container. En caso de que proporcione un comando con el comando de ejecución de Docker, los argumentos de CMD se ignoran desde el archivo docker. En el caso de varios comandos CMD , solo se ejecuta el último.

CMD ["python3", "app.py"]

Si está utilizando un PUNTO DE ENTRADA en su dockerfile , puede agregar algunos parámetros adicionales utilizando el siguiente formulario del comando CMD .

CMD ["parameter 1", "parameter 2"]

Tenga en cuenta que los comandos de CMD se ignoran si proporciona argumentos en su comando de ejecución de Docker.

sudo docker run -it ubuntu bash

Si usa el comando anterior y, al mismo tiempo, ha usado un comando CMD en su dockerfile , se ignora y simplemente abre bash.

Por ejemplo, si el dockerfile contiene:

dockerfile

Fichero de entrada

Si usamos argumentos adicionales junto con el comando de ejecución de docker como «bash», simplemente abrirá el bash y no hará eco de nada.

output

Producción

3. Comando PUNTO DE ENTRADA

Un comando ENTRYPOINT , a diferencia de CMD , no ignora los parámetros adicionales que especifica en su comando de ejecución de Docker.

Considere el siguiente ejemplo:

ENTRYPOINT ["echo", "Geeksforgeeks "]
CMD ["Docker Tutorials"]

Por ejemplo, si el dockerfile es

dockerfile

Aporte 

El resultado de los comandos anteriores al ejecutar Docker Container sin argumentos adicionales sería: 

Geeksforgeeks Docker Tutorials
output

Producción

En caso de que especifique parámetros adicionales, los argumentos de CMD se ignoran.

Para concluir, en este artículo, discutimos el shell y el formulario ejecutable para ejecutar instrucciones de dockerfile . Luego discutimos las diferencias entre los comandos RUN , CMD y ENTRYPOINT , cada uno con un ejemplo.

Publicación traducida automáticamente

Artículo escrito por iamrj846 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *