Utilizzo di Dockerfile per esporre le porte

Utilizzo di Dockerfile per esporre le porte
È davvero facile creare un'immagine Docker personalizzata dalle immagini Docker esistenti utilizzando Dockerfile. Di solito le persone usano un'immagine di base minima come alpino O Ubuntu/Debian per quello scopo. Diciamo, 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 Dalla tua macchina host. Dovrai dire a Docker che vuoi esporre o aprire la porta 8080 Per poterlo accedervi dalla macchina host.

In questo articolo, ti mostrerò un modo per esporre le porte usando Dockerfile Con un esempio del mondo reale. Iniziamo.

Creazione di una directory di progetto:

Innanzitutto, dobbiamo creare una directory di progetto. In questa directory, dovresti conservare tutti i file di progetto e un Dockerfile.

Esegui il comando seguente per creare una directory di progetto myapp/ Nella directory di home e navigatura degli utenti:

$ mkdir ~/myapp && cd ~/myapp

Preparare l'app Web:

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

$ mkdir src

Nel src/ Directory, verrà mantenuto tutto il codice sorgente della mia applicazione Nodejs.

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

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

Scrivere Dockerfile ed esporre le porte:

Ora crea un Dockerfile nel ~/myapp Directory con il seguente comando:

$ touch Dockerfile

Ora digita le seguenti righe al Dockerfile e salvalo. Discuterò cosa significano queste linee più tardi.

Qui, Da alpino: 3.8 significa usare il file Alpino: 3.8 Immagine Docker come base per la nuova immagine che costruiremo da questo Dockerfile.

Esegui l'aggiornamento APK significa, eseguire il Aggiornamento APK comando nell'immagine del docker di base Alpino: 3.8.

Esegui APK ADD -NO -Cache Nodejs significa, eseguire il APK ADD comanda di installare il linguaggio di programmazione nodejs nel Alpino: 3.8 Immagine di base Docker.

COPIA ./SRC /APP significa, copiare tutti i file da ~/myapp/src directory al /App directory della nuova immagine Docker che creeremo usando il Dockerfile.

CMD [“/usr/bin/node”, “/app/app.JS ”] significa, eseguire il /App/App.js file dal nuovo contenitore utilizzando nodo binario situato in /usr/bin/nodo.

Finalmente, a Esporre 8080/TCP significa, esporre o aprire la porta TCP 8080 al computer host.

Creazione dell'immagine Docker personalizzata usando Dockerfile:

Ora facciamo un'immagine Docker personalizzata NODE ALPINE: V1 usando il Dockerfile che abbiamo appena creato.

Prima assicurati di essere in ~/myapp/ Directory e quindi eseguire il seguente comando per creare l'immagine Docker personalizzata NODE ALPINE: V1:

$ Docker build -t alpine -node: v1 .

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

Come puoi vedere, l'immagine Docker personalizzata NODE ALPINE: V1 è creato con successo.

Testing dell'immagine Docker personalizzata:

Ora possiamo testare l'immagine Docker personalizzata NODE ALPINE: V1 molto facilmente. Tutto quello che dobbiamo fare è creare un contenitore fuori NODE ALPINE: V1 Immagine.

Esegui il comando seguente per creare un contenitore Docker www dal NODE ALPINE: V1 Immagine Docker:

$ Docker run -d -it --name www alpine -node: v1

Il container www è creato.

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

$ Docker Ispect www | indirizzo grep

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 a Port 8080 di questo indirizzo IP.

Ecco! Posso accedere alla porta 8080 del mio www Container Docker.

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

Esposizione delle porte TCP e UDP usando Dockerfile:

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

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

Esporre 53/TCP

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

Esporre 53/UDP

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

Esporre 53/TCP
Esporre 53/UDP

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

Esporre 53

Quindi Docker presumerà che desideri utilizzare la porta TCP 53.

Esposizione di più porte usando Dockerfile:

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

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

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

Esporre 80/TCP
Esporre 8080/TCP
Esporre 21/TCP
Esporre 22/TCP
Esporre 3306/TCP
Esporre 27017/TCP
Esporre 27018/TCP

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

Esporre 80
Esporre 8080
Esporre 21
Esporre 22
Esporre 3306
Esporre 27017
Esporre 27018

Se è necessario, puoi mescolare le porte TCP e UDP nelle tue Dockerfile. Ad esempio, se si esegue il server DNS (che funziona sulla porta UDP 53), insieme all'esempio sopra, aggiungeresti le seguenti righe al tuo Dockerfile.

Esporre 80
Esporre 8080
Esporre 21
Esporre 22
Esporre 53/UDP
Esporre 3306
Esporre 27017
Esporre 27018

Quindi è così che espondi le porte usando Dockerfile. Per saperne di più su Dockerfile ed esponendo le porte usando Dockerfile, leggi il Dockerfile Guida di riferimento su https: // documenti.Docker.com/motore/riferimento/builder/#esporre

Grazie per aver letto questo articolo.