Brug af Dockerfile til at afsløre porte

Using Dockerfile Expose Ports



Det er virkelig let at oprette et brugerdefineret Docker -billede ud fra eksisterende Docker -billeder ved hjælp af Dockerfile . Normalt bruger folk et minimalt basisbillede som f.eks alpint eller ubuntu/debian til det formål. Lad os sige, at du vil oprette et tilpasset Docker -billede af din yndlingswebapp, der er skrevet i NodeJS. Appen kører på port 8080 . Som standard har du ikke adgang til webappen på port 8080 fra din værtsmaskine. Du bliver nødt til at fortælle Docker, at du vil afsløre eller åbne port 8080 for at få adgang til det fra din værtsmaskine.

I denne artikel vil jeg vise dig, hvordan du udsætter porte ved hjælp af Dockerfile med et eksempel fra den virkelige verden. Lad os komme igang.







Først skal vi oprette et projektmappe. I denne mappe skal du gemme alle projektfilerne og a Dockerfile .



Kør følgende kommando for at oprette et projektmappe myapp/ i din brugers HOME -bibliotek og naviger til det:



$mkdir~/myapp&& CD~/myapp

Gør webappen klar:

Opret nu et bibliotek src/ inde i ~/myapp/ bibliotek med følgende kommando:

$mkdirsrc

I src/ bibliotek, beholdes al min NodeJS -kildekode.

Jeg vil bare oprette en enkel app.js fil i src/ bibliotek og kør en simpel webserver på port 8080 bare til demonstration.

Det src/app.js filen indeholder følgende linjer med koder:

Skrivning af Dockerfile og eksponeringsporte:

Opret nu en Dockerfile i ~/myapp bibliotek med følgende kommando:

$røre vedDockerfile

Indtast nu følgende linjer til Dockerfile og gem det. Jeg vil diskutere, hvad disse linjer betyder senere.

Her, FRA alpint: 3.8 betyder, brug alpine: 3,8 Docker -image som grundlaget for det nye image, som vi vil bygge ud fra dette Dockerfile .

Kør apk opdatering betyder, kør apk opdatering kommando i basis Docker -billedet alpine: 3,8 .

KØR apk add –no-cache nodejs betyder, kør apk tilføj kommando for at installere programmeringssproget NodeJS i alpine: 3,8 Docker -basisbillede.

KOPI. /Src /app betyder, kopier alle filer fra ~/myapp/src bibliotek til /app bibliotek med det nye Docker -billede, som vi vil bygge ved hjælp af Dockerfile .

CMD [/usr/bin/node, /app/app.js] betyder, kør /app/app.js fil fra den nye container ved hjælp af knudepunkt binær placeret i /usr/bin/node .

Endelig til EXPOSE 8080/tcp betyder, afsløre eller åbne TCP -porten 8080 til værtscomputeren.

Oprettelse af brugerdefineret Docker -billede ved hjælp af Dockerfile:

Lad os nu lave et tilpasset Docker -billede alpinknude: v1 bruger Dockerfile som vi lige har skabt.

Sørg først for, at du er i ~/myapp/ bibliotek, og kør derefter følgende kommando for at oprette dit brugerdefinerede Docker -billede alpinknude: v1 :

$docker build-talpinknude: v1.

Som du kan se, det brugerdefinerede Docker -billede alpinknude: v1 bliver skabt. Det nødvendige Docker -image og pakker, der er påkrævet, trækkes fra internettet.

Som du kan se, det brugerdefinerede Docker -billede alpinknude: v1 er oprettet med succes.

Test af det tilpassede Docker -billede:

Nu kan vi teste det tilpassede Docker -billede alpinknude: v1 meget let. Alt vi skal gøre er at oprette en beholder ud af alpinknude: v1 billede.

Kør følgende kommando for at oprette en Docker -container www fra alpinknude: v1 Docker -billede:

$docker løb-d -det --navnwww alpine-node: v1

Beholderen www er oprettet.

Lad os nu finde ud af IP -adressen til www Docker -container med følgende kommando:

$docker inspicere www| grebAdresse

Som du kan se, er IP -adressen i mit tilfælde 172.17.0.3 . Så NodeJS -applikationen, som jeg skrev, skal være tilgængelig fra webbrowseren i port 8080 af denne IP -adresse.

Voila! Jeg kan få adgang til porten 8080 af min www Docker container.

Det er dybest set, hvordan du udsætter visse porte i dine brugerdefinerede Docker -billeder, du vil bygge ved hjælp af Dockerfile .

Eksponering af TCP- og UDP -porte ved hjælp af Dockerfile:

I det tidligere afsnit af denne artikel viste jeg dig, hvordan du afslører en TCP -port ved hjælp af en Dockerfile .

Du kan let afsløre en TCP -port (lad os sige TCP -port 53 ) i din Dockerfile med følgende linje:

UDSÆTTE53/tcp

Du kan også afsløre en UDP -port (lad os sige UDP -port 53 ) med følgende linje i din Dockerfile :

UDSÆTTE53/udp

Du kan afsløre TCP- og UDP -port på samme tid med følgende linjer i din Dockerfile :

UDSÆTTE53/tcp
UDSÆTTE53/udp

Hvis du ikke angiver hvilken protokol (TCP eller UDP), der skal bruges, bruges TCP som standard. For eksempel, hvis du skriver følgende linje i din Dockerfile :

UDSÆTTE53

Derefter antager Docker, at du vil bruge TCP -porten 53.

Eksponering af flere porte ved hjælp af Dockerfile:

Lad os sige, at du vil oprette et brugerdefineret MEAN stack Docker -billede. I dette tilfælde kører du en HTTP -server på en eller anden port (lad os sige TCP -port 80 eller 8080), en FTP -server, der kører på TCP -port 21, en SQL -databaseserver (lad os sige MySQL), der kører på TCP -port 3306, eller NoSQL -databaseserver (lad os sige MongoDB), der kører på TCP -port 27017 eller 27018, en SSH -server, der kører på TCP -port 22. Det er mange porte!

Den gode nyhed er; du kan afsløre så mange porte som nødvendigt på dit brugerdefinerede Docker -billede, der er oprettet ved hjælp af Dockerfile .

Havnene i eksemplet ovenfor kan blive udsat for følgende linjer i din Dockerfile :

UDSÆTTE80/tcp
UDSÆTTE8080/tcp
UDSÆTTEenogtyve/tcp
UDSÆTTE22/tcp
UDSÆTTE3306/tcp
UDSÆTTE27017/tcp
UDSÆTTE27018/tcp

Hvis du vil, kan du forlade protokolspecifikationen, da Docker som standard bruger TCP og gøre det samme med følgende linjer i din Dockerfile :

UDSÆTTE80
UDSÆTTE8080
UDSÆTTEenogtyve
UDSÆTTE22
UDSÆTTE3306
UDSÆTTE27017
UDSÆTTE27018

Hvis du har brug for det, kan du blande TCP- og UDP -porte i din Dockerfile . Hvis du f.eks. Kører DNS -server (som kører på UDP -port 53), sammen med ovenstående eksempel, vil du tilføje følgende linjer til din Dockerfile .

UDSÆTTE80
UDSÆTTE8080
UDSÆTTEenogtyve
UDSÆTTE22
UDSÆTTE53/udp
UDSÆTTE3306
UDSÆTTE27017
UDSÆTTE27018

Så det er, hvordan du udsætter porte ved hjælp af Dockerfile . For at lære mere om Dockerfile og afsløre porte ved hjælp af Dockerfile , Læs Dockerfile referencevejledning kl https://docs.docker.com/engine/reference/builder/#expose

Tak fordi du læste denne artikel.