Fijar y modificar comandos
En esta sección se ve cómo
se pueden cambiar los comandos elegidos
para las imágenes
desde el archivo compose.yml
y también como los comandos
pueden ser fijados
desde el Dockerfile.
Elegir comandos
El parámetro command
del archivo compose.yml
sirve para sobreescribir el comando definido
con la cláusula CMD
del Dockerfile.
En el ejemplo del primer despliegue el demo se ejecuta desde la sell Bash con la sentencia:
El comando fue adaptado al Dockerfile
con la cláusula CMD
.
# comando, opciones y argumentos (sobreescribibles)
CMD ["python", "contar.py", "4"]
Este comando puede ser ignorado
definiendo el campo command
.
Por ejemplo, para cambiar la cuenta final
de 4 a 10:
services:
demo-contador:
build: .
command: "python contar.py 10" # cuenta máxima alterada
También se puede ignorar la rutina interna de la imagen, por ejemplo para consultar la versión del intérprete Python instalada:
services:
demo-contador:
build: .
command: "python --version" # versión de Python
También se pueden ejecutar otros programas incluidos en la imagen por ejemplo para conocer qué versión del kernel Linux se incluyó internamente:
services:
demo-contador:
build: .
command: "uname -a" # info sobre el kernel usado
Fijar comandos
El archivo Dockefile tiene una cláusula específica
para fijar comandos, argumentos y opciones
a ser ejecutados por el contenedor llamada ENTRYPOINT
.
Con esta cláusula se define
la parte obligatoria del comando
en tanto que la parte opcional
se delega en la cláusula CMD
.
Por ejemplo, si el comando original es:
# comando, opciones y argumentos (sobreescribibles)
CMD ["python", "contar.py", "4"]
entonces para forzar la ejecución de la rutina contar.py
se hace:
# comando, opciones y argumentos fijos
ENTRYPOINT ["python", "contar.py"]
# opciones y argumentos opcionales/sobreescribibles
CMD ["4"]
y en el archivo Compose sólo se podrán asignar los argumentos de la rutina:
services:
demo-contador:
build: .
command: "7" # valor opcional: cuenta máxima
En este caso
todo lo que se ingrese con la cláusula command
será pasado como argumento a la rutina de Python.