Korištenje Dockerfile za otkrivanje portova

Using Dockerfile Expose Ports



Stvarno je jednostavno stvoriti prilagođenu Docker sliku od postojećih Docker slika koristeći Dockerfile . Obično ljudi koriste minimalnu osnovnu sliku, npr alpski ili ubuntu/debian u tu svrhu. Recimo, želite stvoriti prilagođenu Docker sliku svoje omiljene web aplikacije napisanu u NodeJS -u. Aplikacija će se izvoditi na portu 8080 . Prema zadanim postavkama nećete moći pristupiti web -aplikaciji na portu 8080 s vašeg računala domaćina. Morat ćete reći Dockeru da želite izložiti ili otvoriti port 8080 kako biste mu mogli pristupiti s vašeg računala domaćina.

U ovom članku ću vam pokazati kako izložiti portove pomoću Dockerfile sa primjerom iz stvarnog svijeta. Započnimo.







Prvo moramo stvoriti direktorij projekta. U ovom imeniku trebate zadržati sve datoteke projekta i Dockerfile .



Pokrenite sljedeću naredbu za stvaranje direktorija projekta myapp/ u direktoriju HOME korisnika i dođite do njega:



$mkdir~/myapp&& CD~/myapp

Priprema web aplikacije:

Sada stvorite direktorij src/ unutar ~/myapp/ imenik sa sljedećom naredbom:

$mkdirsrc

U src/ direktorij, sav izvorni kod moje NodeJS aplikacije bit će zadržan.

Ja ću samo stvoriti jednostavan app.js datoteku u src/ direktorij i pokrenite jednostavan web poslužitelj na portu 8080 samo za demonstraciju.

The src/app.js datoteka sadrži sljedeće redove kodova:

Pisanje Docker datoteke i otkrivanje portova:

Sada stvorite Dockerfile u ~/myapp imenik sa sljedećom naredbom:

$dodirDockerfile

Sada upišite sljedeće retke u Dockerfile i spremite ga. Kasnije ću raspravljati o značenju ovih redaka.

Ovdje, OD alpskog: 3.8 znači, koristiti alpski: 3,8 Docker slika kao osnova za novu sliku koju ćemo od ovoga graditi Dockerfile .

POKRENI apk ažuriranje znači, pokrenite apk ažuriranje naredba u osnovnoj Docker slici alpski: 3,8 .

POKRENI apk add –ne-cache nodejs znači, pokrenite apk dodaj naredba za instaliranje programskog jezika NodeJS u alpski: 3,8 Docker osnovna slika.

COPY ./src /app znači, kopirajte sve datoteke iz ~/myapp/src imenik u /app direktorij nove slike Dockera koju ćemo izgraditi pomoću Dockerfile .

CMD [/usr/bin/čvor, /app/app.js] znači, pokrenite /app/app.js datoteku iz novog spremnika pomoću čvor binarni koji se nalazi u /usr/bin/čvor .

Konačno, do IZLOŽBA 8080/tcp znači, izložiti ili otvoriti TCP port 8080 na glavno računalo.

Stvaranje prilagođene slike Dockera pomoću Docker datoteke:

Sada napravimo prilagođenu sliku Dockera alpski čvor: v1 koristiti Dockerfile koje smo upravo stvorili.

Prvo provjerite jeste li u ~/myapp/ direktorij, a zatim pokrenite sljedeću naredbu za stvaranje prilagođene slike Dockera alpski čvor: v1 :

$docker build-talpski čvor: v1.

Kao što vidite, prilagođena slika Dockera alpski čvor: v1 se stvara. Potrebna osnovna slika i paketi Dockera povlače se s interneta.

Kao što vidite, prilagođena slika Dockera alpski čvor: v1 je uspješno kreiran.

Testiranje prilagođene slike Dockera:

Sada možemo testirati prilagođenu sliku Dockera alpski čvor: v1 vrlo lako. Sve što moramo učiniti je stvoriti spremnik od alpski čvor: v1 slika.

Pokrenite sljedeću naredbu za stvaranje Docker spremnika www od alpski čvor: v1 Docker slika:

$docker run-d -to --Imewww alpski čvor: v1

Kontejner www je stvoren.

Sada saznajmo IP adresu www Docker spremnik sa sljedećom naredbom:

$docker pregledati www| zahvatAdresa

Kao što vidite, u mom slučaju, IP adresa je 172.17.0.3 . Dakle, aplikacija NodeJS koju sam napisao trebala bi biti dostupna iz web preglednika na portu 8080 ove IP adrese.

Voila! Mogu pristupiti portu 8080 od mojih www Docker kontejner.

Tako u osnovi izlažete određene portove u prilagođenim Docker slikama koje ćete graditi Dockerfile .

Izlaganje TCP i UDP portova pomoću Dockerfile -a:

U prethodnom odjeljku ovog članka pokazao sam vam kako izložiti TCP port pomoću a Dockerfile .

Možete jednostavno izložiti TCP port (recimo TCP port) 53 ) u vašem Dockerfile sa sljedećim retkom:

IZLOŽITI53/tcp

Također možete izložiti UDP port (Recimo UDP port 53 ) sa sljedećim retkom u vašem Dockerfile :

IZLOŽITI53/udp

Možete istovremeno izložiti TCP i UDP port sa sljedećim redovima u vašem Dockerfile :

IZLOŽITI53/tcp
IZLOŽITI53/udp

Ako ne navedete koji protokol (TCP ili UDP) koristiti, TCP se koristi prema zadanim postavkama. Na primjer, ako u svoj sljedeći redak upišete sljedeći redak Dockerfile :

IZLOŽITI53

Tada će Docker pretpostaviti da želite koristiti TCP port 53.

Izlaganje više portova pomoću Docker datoteke:

Recimo da želite stvoriti prilagođenu sliku MEAN stack Dockera. U ovom slučaju, izvodit ćete HTTP poslužitelj na nekom portu (recimo TCP port 80 ili 8080), FTP poslužitelj koji radi na TCP portu 21, poslužitelj SQL baze podataka (recimo MySQL) koji radi na TCP portu 3306, ili NoSQL poslužitelj baze podataka (recimo MongoDB) koji radi na TCP portu 27017 ili 27018, SSH poslužitelj koji radi na TCP portu 22. To je puno portova!

Dobra vijest je; možete izložiti onoliko portova koliko je potrebno na vašoj prilagođenoj Docker slici stvorenoj pomoću Dockerfile .

Portovi u gornjem primjeru mogu biti izloženi sljedećim redovima u vašem Dockerfile :

IZLOŽITI80/tcp
IZLOŽITI8080/tcp
IZLOŽITIdvadeset i jedan/tcp
IZLOŽITI22/tcp
IZLOŽITI3306/tcp
IZLOŽITI27017/tcp
IZLOŽITI27018/tcp

Ako želite, možete napustiti specifikaciju protokola jer Docker prema zadanim postavkama koristi TCP i učiniti istu stvar sa sljedećim redovima u vašem Dockerfile :

IZLOŽITI80
IZLOŽITI8080
IZLOŽITIdvadeset i jedan
IZLOŽITI22
IZLOŽITI3306
IZLOŽITI27017
IZLOŽITI27018

Ako trebate, možete miješati TCP i UDP portove u svom Dockerfile . Na primjer, ako pokrenete DNS poslužitelj (koji radi na UDP portu 53), zajedno s gornjim primjerom, dodali biste sljedeće retke u svoj Dockerfile .

IZLOŽITI80
IZLOŽITI8080
IZLOŽITIdvadeset i jedan
IZLOŽITI22
IZLOŽITI53/udp
IZLOŽITI3306
IZLOŽITI27017
IZLOŽITI27018

Dakle, tako izlažete portove pomoću Dockerfile . Da biste saznali više o Dockerfile i izlaganje portova pomoću Dockerfile , čitati Dockerfile referentni vodič na https://docs.docker.com/engine/reference/builder/#expose

Hvala što ste pročitali ovaj članak.