Sobes.tech
Junior

Waarvoor dienen de commando's CMD en ENTRYPOINT in Docker?

sobes.tech AI

Antwoord van AI

CMD en ENTRYPOINT geven de instructie aan die wordt uitgevoerd bij het starten van de container.

Belangrijkste verschil:

  • CMD — instructie die gemakkelijk kan worden overschreven door argumenten bij het starten van de container.
  • ENTRYPOINT — instructie die de hoofdopdracht van de container bepaalt. De argumenten die bij het starten worden doorgegeven, worden eraan toegevoegd. Als CMD samen met ENTRYPOINT wordt gebruikt, wordt CMD een argument voor ENTRYPOINT.

Voorbeelden:

Docker met CMD:

FROM alpine
CMD ["echo", "Hallo, wereld!"]

Uitvoering:

# Zal "Hallo, wereld!" tonen
docker run <beeldnaam>

# Overschrijft `CMD`, toont "Dit is een andere opdracht"
docker run <beeldnaam> echo "Dit is een andere opdracht"

Docker met ENTRYPOINT:

FROM alpine
ENTRYPOINT ["echo"]

Uitvoering:

# Zal een lege regel tonen (echo zonder argumenten)
docker run <beeldnaam>

# Voegt argumenten toe aan `ENTRYPOINT`, toont "Hallo, wereld!"
docker run <beeldnaam> "Hallo, wereld!"

Docker met ENTRYPOINT en CMD:

FROM alpine
ENTRYPOINT ["echo"]
CMD ["Hallo, wereld!"]

Uitvoering:

# `CMD` wordt een argument voor `ENTRYPOINT`, toont "Hallo, wereld!"
docker run <beeldnaam>

# Argumenten overschrijven `CMD`, maar `ENTRYPOINT` blijft. Toont "Dit is een andere opdracht"
docker run <beeldnaam> "Dit is een andere opdracht"

Vergelijkingstabel:

Kenmerk CMD ENTRYPOINT
Doel Standaardcommando of argumenten Hoofdcommando van de container
Overschrijven bij starten Gemakkelijk overschreven door argumenten Voegt argumenten toe aan eigen commando
Compatibiliteit met andere instructies Kan argumenten voor ENTRYPOINT leveren Gebruikt CMD als zijn argumenten

Beste praktijken:

  • Gebruik ENTRYPOINT als de afbeelding bedoeld is om een specifiek uitvoerbaar bestand uit te voeren (bijvoorbeeld een webserver).
  • Gebruik CMD om standaardargumenten voor ENTRYPOINT te bieden of om het commando aan te geven wanneer de afbeelding voor verschillende doeleinden wordt gebruikt.
  • Geef de voorkeur aan het "exec"-formaat (["uitvoerbaar", "argument1", ...]) boven het "shell"-formaat (commando argumenten). Het "exec"-formaat start het proces niet in een shell, waardoor problemen met signalen en omgevingsvariabelen worden voorkomen.