Folosind Dockerfile pentru a expune porturi

Using Dockerfile Expose Ports



Este foarte ușor să creați o imagine Docker personalizată din imaginile Docker existente folosind Dockerfile . De obicei, oamenii folosesc o imagine de bază minimă, cum ar fi alpin sau ubuntu / debian pentru acel scop. Să presupunem că doriți să creați o imagine Docker personalizată a aplicației dvs. web preferate scrisă în NodeJS. Aplicația va rula pe port 8080 . În mod implicit, nu veți putea accesa aplicația web din port 8080 de la mașina dvs. gazdă. Va trebui să îi spuneți lui Docker că doriți să expuneți sau să deschideți portul 8080 pentru a-l putea accesa de pe mașina dvs. gazdă.

În acest articol, vă voi arăta cum să expuneți porturile folosind Dockerfile cu un exemplu din lumea reală. Să începem.







În primul rând, trebuie să creăm un director de proiect. În acest director, ar trebui să păstrați toate fișierele de proiect și un Dockerfile .



Rulați următoarea comandă pentru a crea un director de proiect myapp / în directorul HOME al utilizatorilor dvs. și navigați la acesta:



$mkdir~/myapp&& CD~/myapp

Pregătirea aplicației web:

Acum creați un director src / în interiorul ~ / myapp / director cu următoarea comandă:

$mkdirsrc

În src / director, tot codul sursă al aplicației mele NodeJS va fi păstrat.

Voi crea doar un simplu app.js fișier în src / director și rulați un server web simplu pe port 8080 doar pentru demonstrație.

The src / app.js fișierul conține următoarele linii de coduri:

Scrierea fișierului Docker și expunerea porturilor:

Acum creați un Dockerfile în ~ / myapp director cu următoarea comandă:

$atingereDockerfile

Acum introduceți următoarele rânduri în Dockerfile și salvați-l. Voi discuta ce înseamnă aceste rânduri mai târziu.

Aici, DIN alpin: 3.8 înseamnă, utilizați alpin: 3,8 Imaginea Docker ca bază pentru noua imagine pe care o vom construi din aceasta Dockerfile .

Actualizare apk RUN înseamnă, rulați actualizare apk comanda din imaginea Docker de bază alpin: 3,8 .

RUN apk add –no-cache nodejs înseamnă, rulați apk add comanda de instalare a limbajului de programare NodeJS în alpin: 3,8 Imagine de bază Docker.

COPIE ./src / app înseamnă, copiați toate fișierele din ~ / myapp / src director la / app directorul noii imagini Docker pe care o vom construi folosind Dockerfile .

CMD [/ usr / bin / node, /app/app.js] înseamnă, rulați /app/app.js fișier din noul container folosind nodul binar situat în / usr / bin / node .

În cele din urmă, la EXPUNE 8080 / tcp înseamnă, expune sau deschide portul TCP 8080 la computerul gazdă.

Crearea unei imagini Docker personalizate utilizând Dockerfile:

Acum să facem o imagine Docker personalizată nod alpin: v1 folosind Dockerfile pe care tocmai l-am creat.

Mai întâi asigurați-vă că vă aflați în ~ / myapp / director și apoi executați următoarea comandă pentru a crea imaginea Docker personalizată nod alpin: v1 :

$docker build-tnod alpin: v1.

După cum puteți vedea, imaginea Docker personalizată nod alpin: v1 este creat. Imaginea și pachetele de bază Docker necesare sunt extrase de pe internet.

După cum puteți vedea, imaginea Docker personalizată nod alpin: v1 este creat cu succes.

Testarea imaginii personalizate Docker:

Acum putem testa imaginea Docker personalizată nod alpin: v1 foarte usor. Tot ce trebuie să facem este să creăm un container din nod alpin: v1 imagine.

Rulați următoarea comandă pentru a crea un container Docker www de la nod alpin: v1 Imagine Docker:

$docker run-d -aceasta --Numewww alpine-nod: v1

Containerul www este creat.

Acum, să aflăm adresa IP a www Container Docker cu următoarea comandă:

$docker inspect www| prindereAbordare

După cum puteți vedea, în cazul meu, adresa IP este 172.17.0.3 . Deci aplicația NodeJS pe care am scris-o ar trebui să fie accesibilă din browserul web din port 8080 a acestei adrese IP.

Voila! Pot accesa portul 8080 al meu www Container de andocare.

Practic, așa expuneți anumite porturi în imaginile Docker personalizate pe care le veți construi folosind Dockerfile .

Expunerea porturilor TCP și UDP folosind Dockerfile:

În secțiunea anterioară a acestui articol, v-am arătat cum să expuneți un port TCP folosind un Dockerfile .

Puteți expune cu ușurință un port TCP (să presupunem port TCP 53 ) în dumneavoastră Dockerfile cu următoarea linie:

EXPUNE53/tcp

De asemenea, puteți expune un port UDP (Să presupunem portul UDP 53 ) cu următoarea linie în Dockerfile :

EXPUNE53/udp

Puteți expune portul TCP și UDP în același timp cu următoarele linii în Dockerfile :

EXPUNE53/tcp
EXPUNE53/udp

Dacă nu specificați ce protocol (TCP sau UDP) să utilizați, TCP este utilizat în mod implicit. De exemplu, dacă scrieți următoarea linie în Dockerfile :

EXPUNE53

Atunci Docker va presupune că doriți să utilizați portul TCP 53.

Expunerea mai multor porturi utilizând Dockerfile:

Să presupunem că doriți să creați o imagine Docker stivă MEAN personalizată. În acest caz, veți rula un server HTTP pe un anumit port (să presupunem portul TCP 80 sau 8080), un server FTP care rulează pe portul TCP 21, un server de baze de date SQL (să presupunem MySQL) care rulează pe portul TCP 3306, sau server de baze de date NoSQL (să zicem MongoDB) care rulează pe portul TCP 27017 sau 27018, un server SSH care rulează pe portul TCP 22. Asta-i o mulțime de porturi!

Vestea bună este; puteți expune câte porturi aveți nevoie pe imaginea Docker personalizată creată utilizând Dockerfile .

Porturile din exemplul de mai sus pot fi expuse cu următoarele linii în Dockerfile :

EXPUNE80/tcp
EXPUNE8080/tcp
EXPUNEdouăzeci și unu/tcp
EXPUNE22/tcp
EXPUNE3306/tcp
EXPUNE27017/tcp
EXPUNE27018/tcp

Dacă doriți, puteți lăsa specificațiile protocolului deoarece Docker folosește TCP în mod implicit și faceți același lucru cu următoarele linii în Dockerfile :

EXPUNE80
EXPUNE8080
EXPUNEdouăzeci și unu
EXPUNE22
EXPUNE3306
EXPUNE27017
EXPUNE27018

Dacă aveți nevoie, puteți amesteca porturile TCP și UDP în Dockerfile . De exemplu, dacă rulați server DNS (care rulează pe portul UDP 53), împreună cu exemplul de mai sus, veți adăuga următoarele linii în Dockerfile .

EXPUNE80
EXPUNE8080
EXPUNEdouăzeci și unu
EXPUNE22
EXPUNE53/udp
EXPUNE3306
EXPUNE27017
EXPUNE27018

Deci, așa expuneți porturile folosind Dockerfile . Pentru a afla mai multe despre Dockerfile și expunerea porturilor folosind Dockerfile , Citeste Dockerfile ghid de referință la https://docs.docker.com/engine/reference/builder/#expose

Vă mulțumim că ați citit acest articol.