Junior
Na čo slúžia príkazy CMD a ENTRYPOINT v Docker?
sobes.tech AI
Odpoveď od AI
CMD a ENTRYPOINT určujú inštrukciu, ktorá sa vykoná pri spustení kontajnera.
Hlavný rozdiel:
CMD— inštrukcia, ktorú je možné ľahko prepísať argumentmi pri spustení kontajnera.ENTRYPOINT— inštrukcia, ktorá nastavuje hlavnú príkaz kontajnera. Argumenty odovzdané pri spustení sa k nej pridávajú. Ak používateCMDspolu sENTRYPOINT,CMDsa stáva argumentom preENTRYPOINT.
Príklady:
Docker s CMD:
FROM alpine
CMD ["echo", "Ahoj, svet!"]
Spustenie:
# Vypíše "Ahoj, svet!"
docker run <názov_obrázka>
# Prepíše `CMD`, vypíše "Toto je iný príkaz"
docker run <názov_obrázka> echo "Toto je iný príkaz"
Docker s ENTRYPOINT:
FROM alpine
ENTRYPOINT ["echo"]
Spustenie:
# Vypíše prázdny riadok (echo bez argumentov)
docker run <názov_obrázka>
# Pridá argumenty k `ENTRYPOINT`, vypíše "Ahoj, svet!"
docker run <názov_obrázka> "Ahoj, svet!"
Docker s ENTRYPOINT a CMD:
FROM alpine
ENTRYPOINT ["echo"]
CMD ["Ahoj, svet!"]
Spustenie:
# `CMD` sa stáva argumentom pre `ENTRYPOINT`, vypíše "Ahoj, svet!"
docker run <názov_obrázka>
# Argumenty prepíšu `CMD`, ale `ENTRYPOINT` zostáva. Vypíše "Toto je iný príkaz"
docker run <názov_obrázka> "Toto je iný príkaz"
Porovnávacia tabuľka:
| Vlastnosť | CMD | ENTRYPOINT |
|---|---|---|
| Účel | Predvolený príkaz alebo argumenty | Hlavný príkaz kontajnera |
| Prepis pri spustení | Ľahko prepísateľný argumentmi | Pridáva argumenty k svojmu príkazu |
| Kompatibilita s inou inštrukciou | Môže poskytovať argumenty pre ENTRYPOINT |
Používa CMD ako svoje argumenty |
Najlepšie praktiky:
- Používajte
ENTRYPOINT, ak je obraz určený na spustenie konkrétneho spustiteľného súboru (napr. webový server). - Používajte
CMDna poskytovanie predvolených argumentov preENTRYPOINTalebo na špecifikovanie príkazu, keď môže byť obraz použitý na rôzne účely. - Uprednostňujte formát "exec" (
["spustiteľný_súbor","argument1",...]) pred formátom "shell" (príkaz argumenty). Formát "exec" nespúšťa proces v shelli, čím sa zabraňuje problémom so signálmi a premennými prostredia.