Cosa fa Docker Entrypoint?

Cosa fa Docker Entrypoint?
Dockerfiles sono una parte fondamentale del lavoro con i contenitori; Ci consentono di creare immagini da un file Docker e personalizzarle per soddisfare le nostre esigenze di utilizzo perché Dockerfiles funziona utilizzando direttive e parametri per le configurazioni.

Una delle direttive comuni in un file Docker è la direttiva sull'entrata. Questa direttiva specifica eseguibile che funziona durante la creazione del contenitore dall'immagine Dockerfile.

Questa guida esamina come funziona la direttiva entrypoint in Docker e come usarla in Dockerfiles.

Uso di base

La direttiva EntryPoint in un Dockerfile assume due moduli, Modulo esecutivo E forma di shell. Avere una direttiva sull'entrata in Dockerfile impedisce al contenitore di avviare e interrompere automaticamente.

La sintassi generale per la direttiva Entrypoint è:

Modulo esecutivo:

EntryPoint [Exec, Option1, Option2 ... Optionn]

Il dirigente rappresenta l'eseguibile per l'esecuzione; Le opzioni sono i parametri da eseguire per l'eseguibile.

L'altra forma della direttiva Enterypoint è la forma di shell. Il modulo shell funziona come sottocomando da /bin /sh -c [comando]. La sintassi generale per questo modulo è come:

Opzione comando entrypoint1, opzione 2 ... opzione

Allo stesso modo, il comando è eseguibile con shell, mentre le opzioni rappresentano i parametri da passare al comando.

Come funziona EntryPoint

In breve, la direttiva entrypoint in un file Docker consente ai contenitori creati dall'immagine di eseguire un eseguibile dopo la creazione. Sfortunatamente, le due forme della direttiva entrypoint tendono a comportarsi in modo diverso:

La forma della shell della direttiva entrypoint non supporta gli argomenti di comando all'avvio del contenitore. Inoltre, a differenza del modulo Exec che esegue l'eseguibile in background, il modulo Shell viene eseguito come sottomarino di /bin /sh -c che lancia il processo con un valore PID diverso rispetto al processo del contenitore.

D'altra parte, il modulo Exec supporta gli argomenti durante la creazione del contenitore. Ciò significa che il comando viene eseguito dopo l'eseguibile impostato nel punto di ingresso. Quindi, ad esempio, se si aggiunge un'opzione al comando Docker Run, viene eseguito in background dopo il set eseguibile nel punto di ingresso. Inoltre, Docker consente di sovrascrivere il valore di entrata utilizzando l'opzione -Entrypoint durante la creazione del contenitore.

Esempio 1: modulo Exec

Illustriamo come funziona il modulo Exec. In questo esempio, utilizziamo un'immagine NGINX come caso di test.

Un campione Dockerfile contiene le voci come:

Da Debian: ultimo
Esegui l'aggiornamento Apt-get && \
Apt -get Installa -y nginx
Etichetta manutenzione = "LinuxHint"
Etichetta versione = "1.0 "
Etichetta Descrizione = "Una semplice immagine che esegue Nginx su Debain 10"
Esporre 80/TCP
Entrypoint ["nginx", "-g", "daemon off;" "

Costruiamo l'immagine dal file Docker come:

Docker Build - -Pull - -RM -f "Dockerfile -T Nginx: Custom"."

Con l'immagine, creiamo un contenitore e lanciamo una shell nel contenitore.

Docker Exec -It F3538752D6C3 BASH

All'interno della shell del contenitore, eseguiamo i comandi di base e installano alcuni pacchetti.

root@f3538752d6c3:/# sudo apt-get update && apt-get installa htop

Se si esegue Htop all'interno del contenitore, otterrai un'uscita simile a quella mostrata di seguito:

Se ignori tutti i processi di lavoro Nginx e Htop, si noti che il demone Nginx principale è in esecuzione come PID di 1.

Esempio 2: forma di shell

Se si cambia Dockerfile per sembrare mostrato nelle voci seguenti:

Da Debian: ultimo
Esegui l'aggiornamento Apt-get && \
Apt -get Installa -y nginx
Etichetta manutenzione = "LinuxHint"
Etichetta versione = "1.0 "
Etichetta Descrizione = "Una semplice immagine che esegue Nginx su Debain 10"
Esporre 80/TCP
Entrypoint "nginx" "-g" "daemon off;"

Costruisci l'immagine e crea un contenitore.

Docker build - -pull - -rm -f "Dockerfile.Dockerfile "-t nginx: personalizzato"."
Docker run -d --name nginx-exec-forma nginx: personalizzato

All'interno del contenitore, se eseguiamo il comando htop, vediamo che il processo di lavoro Nginx è in esecuzione in /bin /sh -c come:

È inoltre possibile ottenere un output simile esaminando il contenitore usando il comando Docker Ispect come:

Riepilogo rapido

È positivo non confondere il punto di ingresso Docker e le direttive Docker CMD. Sebbene entrambe le direttive definiscano i comandi a Docker Esecutes durante il runtime del contenitore:

Assicurarsi di utilizzare la direttiva Dockerfile EntryPoint durante l'esecuzione del contenitore come eseguibile.

Utilizzare CMD per definire gli argomenti predefiniti per l'ingresso o per l'esecuzione di comandi ad hoc nel contenitore.

NOTA: Gli argomenti di CMD verranno sovrascritti quando si esegue il contenitore con altri argomenti.

Come indicato in precedenza, qualsiasi Dockerfile dovrebbe includere la direttiva CMD o Entrypoint.

Insomma.

In conclusione, Docker EntryPoint è una scelta molto adatta quando si definisce l'eseguibile per i contenitori. Per saperne di più, controlla la documentazione.