Docker - Les commandes

Avant de voir les commands dans Kubernetes, voici un petit détour avec Docker.
Un pod ou un container vit seulement le temps de son process.

Avec Docker il y a plusieurs possibilités pour lancer des commandes :

  • RUN: utilisé lors du build de l’image
  • CMD: cette instruction est lancée lors du démarrage du container, mais peut être overridé si une commande est lancé via la commande **docker run **
  • ENTRYPOINT: idem à CMD mais ne peut pas être overridée
docker run ubuntu [COMMAND]

docker run ubuntu sleep 10

Docker commands

Exemple CMD

DockerFile:

FROM ubuntu
CMD sleep 10

Build du container:

docker build -t ubuntu-sleeper .

Execution

Execution de base

docker run ubuntu-sleeper

=> Le container se lance pendant 10 secondes.

Execution en forçant la commande

docker run ubuntu-sleeper sleep 20

=> le container se lance pendant 20 secondes (on aurait pu mettre une autre commande).

Exemple ENTRYPOINT

DockerFile:

FROM ubuntu
ENTRYPOINT sleep 10

Build du container:

docker build -t ubuntu-sleeper-entrypoint .

Exécution

Exécution de base

docker run ubuntu-sleeper-entrypoint

=> Le container se lance pendant 10 secondes.

Exécution en essayant de forçer la commande

docker run ubuntu-sleeper sleep 20

=> le container se lance pendant 10 secondes.

Un moyen pour le forcer mais c’est pas trop le but est d’utiliser l’option –entrypoint:

docker run --entrypoint ls ubuntu-sleeper-entrypoint

=> on ne le voit pas mais execute un ls, mais on ne peut pas passer d’argument.

Exemple ENTRYPOINT + CMD

Docketfile

FROM ubuntu
ENTRYPOINT ["sleep"]
CMD ["10"]

Build de l’image

docker build -t ubuntu-sleeper-entrypoint-cmd .

Exécution

docker run ubuntu-sleeper-entrypoint-cmd

=> Lancement du container pendant 10 secondes.

Forcer la commande

docker run ubuntu-sleeper-entrypoint-cmd sleep 10

=> cela ne fonctionne pas, cela génére dans le container la commande: sleep sleep 10.

docker run ubuntu-sleeper-entrypoint-cmd 5

=> Lancement du container pendant 5 secondes. On ne peut modifier que l’argument (CMD).

Forcer la commande ET l’argument

docker run  --entrypoint ls ubuntu-sleeper-entrypoint-cmd  /var

Command dans Kubernetes

Définition du pod

apiVersion: v1
kind: pod
metadata:
  name: ubuntu-sleeper-pod
spec:
  containers:
    - name: ubuntu-sleeper
      image: ubuntu-sleeper
      command: ["sleep"]
      args: ["10"]

Kubernetes commands

La command de Kube est l’ENTRYPOINT de docker, et l’args Kube est le CMD de docker.
La **command
et l’args override la configuration définie dans le Dockerfile, ils ne peuvent pas être modifiés uns fois que le pod est créé.
Si l’args est défini sans command c’est la command du Dockerfile qui est utilisé avec l’argument du pod.