Utilizzo di Dockerfile per esporre le porte

Using Dockerfile Expose Ports



È davvero facile creare un'immagine Docker personalizzata da immagini Docker esistenti usando Dockerfile . Di solito le persone usano un'immagine di base minima come alpino o ubuntu/debian per quello scopo. Diciamo che vuoi creare un'immagine Docker personalizzata della tua app Web preferita scritta in NodeJS. L'app verrà eseguita sulla porta 8080 . Per impostazione predefinita, non sarai in grado di accedere all'app Web sulla porta 8080 dal tuo computer host. Dovrai dire a Docker che vuoi esporre o aprire la porta 8080 per potervi accedere dalla macchina host.

In questo articolo, ti mostrerò come esporre le porte usando Dockerfile con un esempio del mondo reale. Iniziamo.







Per prima cosa, dobbiamo creare una directory del progetto. In questa directory, dovresti conservare tutti i file del progetto e a Dockerfile .



Esegui il seguente comando per creare una directory di progetto miaapp/ nella directory HOME degli utenti e vai ad essa:



$mkdir~/la mia app&& cd~/la mia app

Preparazione dell'app Web:

Ora crea una directory src/ dentro il ~/miaapp/ directory con il seguente comando:

$mkdirsrc

Nel src/ directory, verrà mantenuto tutto il codice sorgente della mia applicazione NodeJS.

Creerò solo un semplice app.js file nel src/ directory ed eseguire un semplice server web sulla porta 8080 solo per dimostrazione.

Il src/app.js file contiene le seguenti righe di codici:

Scrivere Dockerfile ed esporre le porte:

Ora crea un Dockerfile nel ~/miaapp directory con il seguente comando:

$toccoDockerfile

Ora digita le seguenti righe in Dockerfile e salvalo. Discuterò più avanti cosa significano queste righe.

Qui, DA alpino:3.8 significa, usa il alpino:3.8 Immagine Docker come base per la nuova immagine che costruiremo da questa Dockerfile .

ESEGUI aggiornamento apk significa, eseguire il aggiornamento apk comando nell'immagine Docker di base alpino:3.8 .

ESEGUI apk add –no-cache nodejs significa, eseguire il apk add comando per installare il linguaggio di programmazione NodeJS nel alpino:3.8 Immagine di base di Docker.

COPIA ./src /app significa, copiare tutti i file dal ~/miaapp/src directory per il /app directory della nuova immagine Docker che creeremo utilizzando il Dockerfile .

CMD [/usr/bin/node, /app/app.js] significa, eseguire il /app/app.js file dal nuovo contenitore usando nodo binario situato in /usr/bin/nodo .

Infine, a ESPOSI 8080/tcp significa, esporre o aprire la porta TCP 8080 al computer ospite.

Creazione di un'immagine Docker personalizzata utilizzando Dockerfile:

Ora creiamo un'immagine Docker personalizzata nodo alpino: v1 usando il Dockerfile che abbiamo appena creato.

Per prima cosa assicurati di essere nel ~/miaapp/ directory e quindi esegui il seguente comando per creare la tua immagine Docker personalizzata nodo alpino: v1 :

$costruzione della finestra mobile-Talpino-nodo: v1 .

Come puoi vedere, l'immagine Docker personalizzata nodo alpino: v1 viene creato. L'immagine e i pacchetti Docker di base richiesti vengono estratti da Internet.

Come puoi vedere, l'immagine Docker personalizzata nodo alpino: v1 viene creato con successo.

Test dell'immagine Docker personalizzata:

Ora possiamo testare l'immagine Docker personalizzata nodo alpino: v1 molto facilmente. Tutto quello che dobbiamo fare è creare un contenitore da nodo alpino: v1 Immagine.

Esegui il seguente comando per creare un contenitore Docker www dal nodo alpino: v1 Immagine della finestra mobile:

$corsa mobile-D -esso --nomewww nodo-alpino:v1

Il container www è creato.

Ora scopriamo l'indirizzo IP del www Contenitore Docker con il seguente comando:

$ispezionare la finestra mobile www| presaIndirizzo

Come puoi vedere, nel mio caso, l'indirizzo IP è 172.17.0.3 . Quindi l'applicazione NodeJS che ho scritto dovrebbe essere accessibile dal browser web alla porta 8080 di questo indirizzo IP.

Ecco! posso accedere al porto 8080 del mio www Contenitore mobile.

Questo è fondamentalmente il modo in cui esponi determinate porte nelle tue immagini Docker personalizzate che creerai utilizzando Dockerfile .

Esposizione di porte TCP e UDP utilizzando Dockerfile:

Nella sezione precedente di questo articolo, ti ho mostrato come esporre una porta TCP usando a Dockerfile .

Puoi facilmente esporre una porta TCP (diciamo porta TCP 53 ) nel tuo Dockerfile con la seguente riga:

ESPORRE53/tcp

Puoi anche esporre una porta UDP (diciamo una porta UDP 53 ) con la seguente riga nel tuo Dockerfile :

ESPORRE53/udp

Puoi esporre la porta TCP e UDP contemporaneamente con le seguenti righe nel tuo Dockerfile :

ESPORRE53/tcp
ESPORRE53/udp

Se non specifichi quale protocollo (TCP o UDP) utilizzare, per impostazione predefinita viene utilizzato TCP. Ad esempio, se scrivi la seguente riga nel tuo Dockerfile :

ESPORRE53

Quindi Docker presumerà che tu voglia utilizzare la porta TCP 53.

Esposizione di più porte utilizzando Dockerfile:

Supponiamo che tu voglia creare un'immagine Docker stack MEAN personalizzata. In questo caso, eseguirai un server HTTP su una porta (diciamo la porta TCP 80 o 8080), un server FTP che gira sulla porta TCP 21, un server di database SQL (diciamo MySQL) che gira sulla porta TCP 3306, o server di database NoSQL (diciamo MongoDB) che gira sulla porta TCP 27017 o 27018, un server SSH che gira sulla porta TCP 22. Ci sono un sacco di porte!

La buona notizia è; puoi esporre tutte le porte necessarie sulla tua immagine Docker personalizzata creata usando Dockerfile .

Le porte nell'esempio sopra possono essere esposte con le seguenti righe nel tuo Dockerfile :

ESPORRE80/tcp
ESPORRE8080/tcp
ESPORREventuno/tcp
ESPORRE22/tcp
ESPORRE3306/tcp
ESPORRE27017/tcp
ESPORRE27018/tcp

Se lo desideri, puoi lasciare le specifiche del protocollo poiché Docker utilizza TCP per impostazione predefinita e fare la stessa cosa con le seguenti righe nel tuo Dockerfile :

ESPORRE80
ESPORRE8080
ESPORREventuno
ESPORRE22
ESPORRE3306
ESPORRE27017
ESPORRE27018

Se necessario, puoi combinare le porte TCP e UDP nel tuo Dockerfile . Ad esempio, se esegui il server DNS (che gira sulla porta UDP 53), insieme all'esempio precedente, aggiungeresti le seguenti righe al tuo Dockerfile .

ESPORRE80
ESPORRE8080
ESPORREventuno
ESPORRE22
ESPORRE53/udp
ESPORRE3306
ESPORRE27017
ESPORRE27018

Ecco come esponi le porte usando Dockerfile . Per saperne di più su Dockerfile ed esponendo le porte usando Dockerfile , leggi il Dockerfile guida di riferimento su https://docs.docker.com/engine/reference/builder/#expose

Grazie per aver letto questo articolo.