ENTRYPOINT vs CMD

Tableau de correspondance ENTRYPOINT vs. CMD: Voir la documentation Docker


Exercice: définir ENTRYPOINT et CMD

Définir ENTRYPOINT et CMD afin d'avoir une commande lancée par Docker dans le container répondant à divers contraintes.

Exemple

# Le container sera lancé avec la commande
#   gunicorn app:app -b 0.0.0.0:80
CMD [ "gunicorn", "app:app", "-b", "0.0.0.0:80" ]

Pour tester:

# Update vote Dockerfile and build
docker compose build vote

# Run vote container
# COMMAND and ARG will override default COMMAND (CMD)
docker run -d --name test_entrypoint --rm vote:local [COMMAND] [ARG...]
# or
docker compose run vote [COMMAND] [ARG...]


# Check running processus
docker top test_entrypoint -o pid,command
# or
docker compose top vote -o pid,command
# Output like
#   PID   COMMAND
#   7767  /usr/local/bin/python /usr/local/bin/gunicorn app:app -b 0.0.0.0:80

# stop and remove container
docker stop test_entrypoint
# or
docker compose down vote

Cas 1

La commande lancée au démarrage par défaut doit être:

gunicorn app:app -b 0.0.0.0:80

Il doit être possible d'overrider les options de gunicorn définies par défaut (i.e. overrider l'usage de -b 0.0.0.0:80)

Résultat attendu:

#
# Sans argument supplémentaire
#
docker compose run vote
#
# gunicorn app:app -b 0.0.0.0:80
#

#
# Arguments: --log-level DEBUG
#
docker compose run vote --log-level DEBUG
#
# gunicorn app:app --log-level DEBUG
#

Cette configuration peut-être utilisée pour fournir une image lançant notre serveur Vote en permettant à l'utilisateur final de passer à gunicorn des options différentes (comme un port différent ou un niveau de debug plus élévé)

Cas 2

La commande lancée au démarrage par défaut doit être:

gunicorn app:app -b 0.0.0.0:80

Il doit être possible de passer des options supplémentaires à gunicorn tout en conservant l'usage de -b 0.0.0.0:80 par défaut

Résultat attendu:

#
# Sans argument supplémentaire
#
docker compose run vote
#
# gunicorn app:app -b 0.0.0.0:80
#

#
# Arguments: --log-level DEBUG
#
docker compose run vote --log-level DEBUG
#
# gunicorn app:app -b 0.0.0.0:80 --log-level DEBUG
#

Cette configuration peut-être utilisée pour fournir une image lançant notre serveur Vote en permettant à l'utilisateur final de passer à gunicorn des options différentes (comme niveau de debug plus élévé) tout en semi-forçant l'utilisation de certaines options (dans notre cas, l'utilisation du port 80)

Cas 3

La commande lancée au démarrage par défaut doit être:

gunicorn app:app -b 0.0.0.0:80

Passer un argument au run du container doit overrider intégralement la commande lancée par le container par celle en paramètre.

Résultat attendu:

#
# Sans argument supplémentaire
#
docker compose run vote
#
# gunicorn app:app -b 0.0.0.0:80
#

#
# Arguments: --log-level DEBUG
#
docker compose run vote sh
#
# Lance une session shell interactive
#

Cette configuration peut-être utilisée pour fournir une image lançant notre serveur Vote en permettant à l'utilisateur final de lancer un binaire ou une commande différent au lancement du container.