En av de vanlige direktivene i en DockerFile er EntryPoint -direktivet. Dette direktivet spesifiserer kjørbar som kjøres under oppretting av container fra Dockerfile -bildet.
Denne guiden ser på hvordan inngangspunktdirektivet i Docker fungerer og hvordan du bruker det i Dockerfiles.
Grunnleggende bruk
Inngangspunktdirektivet i en dockerfile har to former, Exec -form og skallform. Å ha et inngangspunktdirektiv i DockerFile forhindrer at beholderen starter og stopper automatisk.
Den generelle syntaksen for inngangspunktdirektivet er:
Exec -skjema:
EntryPoint [EXEC, Alternativ1, Alternativ2 ... Alternativ]
Exec representerer den kjørbare å løpe; Alternativene er parametrene som skal kjøres til den kjørbare.
Den andre formen for EnteryPoint -direktivet er skallformen. Skallformen kjører som en underkommando fra /bin /sh -c [kommando]. Den generelle syntaksen for denne formen er som:
Entrypoint kommandoalternativ1, alternativ2 ... alternativ
Tilsvarende er kommandoen en kjørbar skall, mens alternativene representerer parametrene som skal overføres til kommandoen.
Hvordan inngangspunkt fungerer
I et nøtteskall tillater inngangspunktdirektivet i en Dockerfile at containerne opprettet fra bildet kan kjøre en kjørbar etter opprettelsen. Dessverre har de to formene for EntryPoint -direktivet en tendens til å oppføre seg annerledes:
Skallformen for EntryPoint -direktivet støtter ikke kommandoargumenter når du starter beholderen. Videre, i motsetning til EXEC -form som kjører den kjørbare i bakgrunnen, kjører skallform som en sub av /bin /sh -c som lanserer prosessen med en annen PID -verdi enn containerprosessen.
På den annen side støtter Exec -skjemaet argumenter under oppretting av container. Dette betyr at kommandoen kjøres etter den kjørbare som er satt i inngangspunktet. Så for eksempel, hvis du legger til et alternativ til Docker Run -kommandoen, kjører det i bakgrunnen etter det kjørbare settet i EntryPoint. I tillegg lar Docker deg overstyre inngangspunktverdien ved å bruke alternativet -entrypoint under containeroppretting.
Eksempel 1: Exec -form
La oss illustrere hvordan Exec -skjemaet fungerer. I dette eksemplet bruker vi et Nginx -bilde som testtilfelle.
En prøve Dockerfile inneholder oppføringene som:
Fra Debian: siste
Kjør apt-get Update && \
apt -get install -y nginx
Etikett vedlikeholder = "Linuxhint"
Etikettversjon = "1.0 "
Etikettbeskrivelse = "Et enkelt bilde som kjører Nginx på Debain 10"
Eksponer 80/TCP
EntryPoint ["Nginx", "-g", "Daemon Off;" ]
La oss bygge bildet fra Docker -filen som:
Docker Build -PULL - -RM -f "DockerFile -T Nginx: Custom".""
Med bildet, la oss lage en beholder og starte et skall i beholderen.
Docker Exec -it F3538752D6C3 Bash
Inne i containerskallet, la oss utføre grunnleggende kommandoer og installere noen få pakker.
root@f3538752d6c3:/# sudo apt-get update && apt-get install htop
Hvis du kjører HTOP inne i beholderen, vil du få en utgang som ligner den som er vist nedenfor:
Hvis du ignorerer alle Nginx -arbeiderprosessene og HTOP, merker du at den viktigste Nginx -demonen kjører som PID på 1.
Eksempel 2: Skallform
Hvis du endrer Dockerfile for å se ut som vist i oppføringene nedenfor:
Fra Debian: siste
Kjør apt-get Update && \
apt -get install -y nginx
Etikett vedlikeholder = "Linuxhint"
Etikettversjon = "1.0 "
Etikettbeskrivelse = "Et enkelt bilde som kjører Nginx på Debain 10"
Eksponer 80/TCP
EntryPoint "Nginx" "-g" "Daemon Off;"
Bygg bildet og lag en beholder.
Docker Build -PULL - -RM -f "Dockerfile.dockerfile "-t nginx: tilpasset".""
Docker Run -D-Navn Nginx-Exec-form Nginx: Custom
Inne i beholderen, hvis vi kjører HTOP -kommandoen, ser vi at Nginx -arbeiderprosessen kjører under /bin /sh -c som:
Du kan også få en lignende utdata ved å undersøke beholderen ved å bruke Docker Inspect -kommandoen som:
Rask oppsummering
Det er bra å ikke forvirre Docker EntryPoint og Docker CMD -direktivene. Selv om begge direktiver definerer kommandoene til Docker utføres under container runtime:
Forsikre deg om å bruke DockerFile EntryPoint -direktivet når du kjører beholderen som en kjørbar.
Bruk CMD for å definere standardargumenter for inngangspunkt eller for å kjøre ad-hoc-kommandoer i beholderen.
MERK: CMD -argumenter vil bli overstyrt når du kjører beholderen med andre argumenter.
Som nevnt tidligere, bør enhver DockerFile inkludere enten CMD eller EntryPoint Direktiv.
For å konkludere.
Avslutningsvis er Docker EntryPoint et mye passende valg når du definerer kjørbare for containerne. For å lære mer, sjekk dokumentasjonen.