Dockerfile – CMD, ENTRYPOINT

W Dockerfile powinna znaleźć się instrukcja ENTRYPOINT i/lub CMD. Najczęstszy scenariusz:

      • ENTRYPOINT […] – definiuje aplikację domyślną używaną przy tworzeniu kontenera – ustawienie podstawowego polecenia obrazu uruchomionego automatycznie.
      • CMD […] – (bez polecenia) – dostarcza argumenty domyślne do ENTRYPOINT
      • docker run ….. paramX paramY – nadpisuje parametry CMD

CMD – Polecenie i parametry startowe kontenera, lub parametry do ENTRYPOINT

CMD ["plik_wykonwywalny", "param1", "param2"] - Forma wykonywalna - parametry domyślne w celu uruchomienia kontenera

- jeśli podano komendę ENTRYPOINT - wszystkie wartości tablicy traktowane są jako parametry, jeśli nie podano pierwszy argument traktowany jest jako plik wykonywalny (uruchamiany) - bez powłoki.
- dozwolone tylko cudzysłowie (nie apostrofy)

CMD polecenie_powłoki param1 param2 - Forma powłokowa (preferowana) - polecenie i parametry przekazane do /bin/sh -c
- jeśli w obrazie nie będzie /bin/sh - uruchomienie kontenera nie powiedzie się
- np. CMD echo $HOSTNAME

// Nadpisanie CMD w czasie wykonania
# docker run <obraz> "polecenie_powłoki" "param1" "param2"

ENTRYPOINTpolecenie uruchamiane w czasie startu kontenera – parametry do polecenia mogą być także zawarte w instrukcji CMD lub podane w czasie uruchomienia (na końcu, po nazwie obrazu)

ENTRYPOINT ["plik_wykonwywalny", "param1", "param2"] - Forma wykonywalna

ENTRYPOINT polecenie_powłoki param1 param2 - Forma powłokowa

- ta forma będzie ignorować polecenie z docker run, lub CMD jednak parametry będą dodane do parametrów ENTRYPOINT

// Równoważne formie powłokowej
ENTRYPOINT ["/bin/sh", "-c", "echo $HOSTNAME"]

Przykłady

// Zmiana domyślnej powłoki
FROM ubuntu
ENTRYPOINT ["/bin/bash"] 

- parametry docker run, lub CMD będą przetwarzane przez bash

// Wykonanie /bin/ping localhost po uruchomieniu kontenera
FROM busybox
ENTRYPOINT ["/bin/ping"]
CMD ["localhost"] 

- komendy ENTRYPOINT nie nadpiszą parametry docker run - będą dołączone do tej instrukcji (ping)
- można uruchomić różne parametry do ping - domyślne podane w CMD lub nadpisane w docker run

# docker build .
# docker run <my_image>
.. pingi domyślne parametr z CMD (localhost)

# docker run <my_image> yahoo.com
.. nadpisany parametr CMD do polecenia ping
ENTRYPOINT może być nadpisane przez opcję docker run --entrypoint

- umożliwia nadpisanie programu do wykonania