Bruke Dockerfile til å avsløre porter

Using Dockerfile Expose Ports



Det er veldig enkelt å lage et tilpasset Docker -bilde fra eksisterende Docker -bilder ved hjelp av Dockerfile . Vanligvis bruker folk et minimalt grunnbilde som f.eks alpint eller ubuntu/debian for den grunnen. La oss si at du vil lage et tilpasset Docker -bilde av din favorittwebapp skrevet i NodeJS. Appen kjøres på port 8080 . Som standard har du ikke tilgang til nettappen på porten 8080 fra vertsmaskinen. Du må fortelle Docker at du vil avsløre eller åpne porten 8080 for å få tilgang til den fra vertsmaskinen din.

I denne artikkelen vil jeg vise deg hvordan du avslører porter ved hjelp av Dockerfile med et eksempel fra den virkelige verden. La oss komme i gang.







Først må vi lage en prosjektkatalog. I denne katalogen bør du beholde alle prosjektfilene og a Dockerfile .



Kjør følgende kommando for å opprette en prosjektkatalog myapp/ i brukerens HOME -katalog og naviger til den:



$mkdir~/myapp&& CD~/myapp

Gjør nettappen klar:

Lag nå en katalog src/ inne i ~/myapp/ katalog med følgende kommando:

$mkdirsrc

I src/ katalog, beholdes all kildekoden til NodeJS -applikasjonen min.

Jeg skal bare lage en enkel app.js filen i src/ katalog og kjør en enkel webserver på port 8080 bare for demonstrasjon.

De src/app.js filen inneholder følgende kodelinjer:

Skrive Dockerfile og avsløre porter:

Lag nå en Dockerfile i ~/myapp katalog med følgende kommando:

$ta påDockerfile

Skriv inn følgende linjer til Dockerfile og lagre det. Jeg vil diskutere hva disse linjene betyr senere.

Her, FRA alpint: 3.8 betyr, bruk alpint: 3.8 Docker -image som grunnlaget for det nye bildet som vi skal bygge ut fra dette Dockerfile .

RUN apk oppdatering betyr, kjør apk oppdatering kommandoen i det grunnleggende Docker -bildet alpint: 3.8 .

RUN apk add –no-cache nodejs betyr, kjør apk legge til kommando for å installere NodeJS programmeringsspråk i alpint: 3.8 Docker -basisbilde.

KOPI. /Src /app betyr, kopier alle filene fra ~/myapp/src katalogen til /app katalogen for det nye Docker -bildet som vi skal bygge ved hjelp av Dockerfile .

CMD [/usr/bin/node, /app/app.js] betyr, kjør /app/app.js filen fra den nye beholderen ved hjelp av node binær lokalisert i /usr/bin/node .

Til slutt, til EXPOSE 8080/tcp betyr, avsløre eller åpne TCP -porten 8080 til vertsmaskinen.

Opprette tilpasset Docker -bilde ved hjelp av Dockerfile:

La oss nå lage et tilpasset Docker -bilde alpin-node: v1 bruker Dockerfile som vi nettopp har opprettet.

Sørg først for at du er i ~/myapp/ katalog og kjør deretter følgende kommando for å lage ditt egendefinerte Docker -bilde alpin-node: v1 :

$docker -bygg-talpin-node: v1.

Som du kan se, det tilpassede Docker -bildet alpin-node: v1 blir opprettet. Det nødvendige Docker -bildet og pakkene som kreves, blir hentet fra internett.

Som du kan se, det tilpassede Docker -bildet alpin-node: v1 er opprettet.

Test av det tilpassede Docker -bildet:

Nå kan vi teste det tilpassede Docker -bildet alpin-node: v1 veldig lett. Alt vi trenger å gjøre er å lage en beholder av alpin-node: v1 bilde.

Kjør følgende kommando for å opprette en Docker -beholder www fra alpin-node: v1 Docker -bilde:

$docker run-d -den --Navnwww alpine-node: v1

Beholderen www er skapt.

La oss nå finne ut IP -adressen til www Docker -beholder med følgende kommando:

$docker inspisere www| grepAdresse

Som du kan se, i mitt tilfelle er IP -adressen 172.17.0.3 . Så NodeJS -applikasjonen som jeg skrev, burde være tilgjengelig fra nettleseren ved port 8080 av denne IP -adressen.

Voila! Jeg får tilgang til porten 8080 av mine www Docker -beholder.

Det er i utgangspunktet hvordan du avslører visse porter i de tilpassede Docker -bildene du skal bygge Dockerfile .

Å avsløre TCP- og UDP -porter ved hjelp av Dockerfile:

I den tidligere delen av denne artikkelen viste jeg deg hvordan du avslører en TCP -port ved hjelp av en Dockerfile .

Du kan enkelt avsløre en TCP -port (la oss si TCP -port 53 ) i din Dockerfile med følgende linje:

AVDEKKE53/tcp

Du kan også avsløre en UDP -port (La oss si UDP -port 53 ) med følgende linje i din Dockerfile :

AVDEKKE53/udp

Du kan avsløre TCP- og UDP -porten samtidig med følgende linjer i din Dockerfile :

AVDEKKE53/tcp
AVDEKKE53/udp

Hvis du ikke angir hvilken protokoll (TCP eller UDP) som skal brukes, brukes TCP som standard. For eksempel, hvis du skriver følgende linje i Dockerfile :

AVDEKKE53

Da vil Docker anta at du vil bruke TCP -porten 53.

Å avsløre flere porter ved hjelp av Dockerfile:

La oss si at du vil lage et tilpasset MEAN stack Docker -bilde. I dette tilfellet kjører du en HTTP -server på en eller annen port (la oss si TCP -port 80 eller 8080), en FTP -server som kjører på TCP -port 21, en SQL -databaseserver (la oss si MySQL) som kjører på TCP -port 3306, eller NoSQL -databaseserver (la oss si MongoDB) som kjører på TCP -port 27017 eller 27018, en SSH -server som kjører på TCP -port 22. Det er mange porter!

Den gode nyheten er; du kan avsløre så mange porter som nødvendig på ditt tilpassede Docker -bilde som er opprettet med Dockerfile .

Portene i eksemplet ovenfor kan avsløres med følgende linjer i din Dockerfile :

AVDEKKE80/tcp
AVDEKKE8080/tcp
AVDEKKEtjueen/tcp
AVDEKKE22/tcp
AVDEKKE3306/tcp
AVDEKKE27017/tcp
AVDEKKE27018/tcp

Hvis du vil, kan du forlate protokollspesifikasjonen ettersom Docker bruker TCP som standard og gjøre det samme med følgende linjer i Dockerfile :

AVDEKKE80
AVDEKKE8080
AVDEKKEtjueen
AVDEKKE22
AVDEKKE3306
AVDEKKE27017
AVDEKKE27018

Hvis du trenger det, kan du blande TCP- og UDP -porter i din Dockerfile . For eksempel, hvis du kjører DNS -server (som kjører på UDP -port 53), sammen med eksemplet ovenfor, vil du legge til følgende linjer i Dockerfile .

AVDEKKE80
AVDEKKE8080
AVDEKKEtjueen
AVDEKKE22
AVDEKKE53/udp
AVDEKKE3306
AVDEKKE27017
AVDEKKE27018

Så det er slik du avslører porter ved å bruke Dockerfile . For å lære mer om Dockerfile og avsløre porter ved hjelp av Dockerfile , les Dockerfile referanseguide kl https://docs.docker.com/engine/reference/builder/#expose

Takk for at du leste denne artikkelen.