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| grepAdresseSom 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/tcpDu kan også avsløre en UDP -port (La oss si UDP -port 53 ) med følgende linje i din Dockerfile :
AVDEKKE53/udpDu kan avsløre TCP- og UDP -porten samtidig med følgende linjer i din Dockerfile :
AVDEKKE53/tcpAVDEKKE53/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 :
AVDEKKE53Da 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/tcpAVDEKKE8080/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 :
AVDEKKE80AVDEKKE8080
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 .
AVDEKKE80AVDEKKE8080
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.