Hva gjør Docker EntryPoint?

Hva gjør Docker EntryPoint?
Dockerfiles er en kritisk del av å jobbe med containere; De lar oss lage bilder fra en Dockerfile og tilpasse dem til å passe til våre bruksbehov fordi DockerFiles fungerer ved å bruke direktiver og parametere for konfigurasjoner.

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.