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"
ENTRYPOINT – polecenie 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