Skip to content

ENTRYPOINT vs CMD

ENTRYPOINT

Jest to polecenie umożliwiające przekazanie całego polecenia, wykonanie skryptu, które będzie wykonane w kontenerze, jako ostatni krok przy budowaniu kontenera (już podczas uruchamiania kontenera).

Dzięki jego użyciu podczas wykonywania polecenia [[docker run - uruchomienie kontenera|docker run]] możliwe jest przekazanie parametru do części polecenia.

Użycie

FROM ubuntu

ENTRYPOINT ["sleep"]

Możemy (a nawet musimy, bo się nie uruchomi) przekazać wybraną wartość podczas robienia polecenia [[docker run - uruchomienie kontenera|docker run]].

Przykładowo:

docker run ubuntu-sleeper 5

Gdy nie podamy wartości podczas uruchamiania pojawi się taki komunikat:

sleep: missing perand
Try 'sleep --help' for more information.

Aby uniknąć takiego problemu należy dodać polecenie CMD.

CMD

Działa na podobnej zasadzie co ENTRYPOINT - wykonuje określone polecenie lub skrypt, tylko podczas uruchamiania jego wartości mogą być nadpisane.

Odbywa się to w taki sposób

FROM ubuntu

ENTRYPOINT ["sleep"]
CMD ["5"]

Wartość 5 będzie domyślna, lecz podczas uruchamiania można ją nadpisać.

Można to zrobić w taki sposób:

docker run ubuntu-sleeper 10

Wtedy, gdy nie wpiszemy wartości 10 wówczas domyślnie będzie 5 sekund, a po wpisaniu będzie 10 sekund wykonywane polecenie sleep.

Podsumowując

  • ENTRYPOINT - wykonywanie poleceń lub skryptów podczas uruchamiania kontenera, domyślnie nie możemy nadpisywać, a jedynie dodawać nowe parametry

    Możemy dodać z użyciem --entrypoint do polecenia docker run

  • CMD - wykonywanie poleceń lub skryptów. Podczas dodania do docker run na koniec parametrów, bądź polecenia nadpisywane jest domyślne w zbudowanym (przykładowo z użyciem Dockerfile) kontenerze

  • Takie połączenie:

...
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["apache2-foreground"]

Spowoduje wykonanie polecenia: docker-entrypoint.sh apache2-foreground.