Bruker Dockerfile for å eksponere porter

Bruker Dockerfile for å eksponere porter
Det er veldig enkelt å lage et tilpasset Docker -bilde fra eksisterende Docker -bilder ved hjelp av Dockerfile. Vanligvis bruker folk et minimalt basisbilde som for eksempel Alpine eller Ubuntu/Debian for den grunnen. La oss si, du vil lage et tilpasset Docker -bilde av din favoritt webapp skrevet i NodeJS. Appen kjører på port 8080. Som standard vil du ikke kunne få tilgang til webappen på Port 8080 fra vertsmaskinen din. Du må fortelle Docker at du vil eksponere eller åpne port 8080 for å kunne få tilgang til den fra vertsmaskinen.

I denne artikkelen vil jeg vise deg hvordan du utsetter porter ved hjelp av Dockerfile med et ekte verdenseksempel. La oss komme i gang.

Opprette en prosjektkatalog:

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

Kjør følgende kommando for å opprette en prosjektkatalog myapp/ I dine brukere hjemmekatalog og navigerer til den:

$ mkdir ~/myapp && cd ~/myapp

Å gjøre webappen klar:

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

$ MKDIR SRC

I src/ Katalog, all kildekoden til NodeJS -applikasjonen min vil bli holdt.

Jeg vil bare lage en enkel app.JS fil i src/ Katalog og kjør en enkel webserver på port 8080 Bare for demonstrasjon.

De SRC/APP.JS Filen inneholder følgende linjer med koder:

Skrive Dockerfile og utsette porter:

Nå opprette en Dockerfile i ~/myapp Katalog med følgende kommando:

$ Touch Dockerfile

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

Her, Fra Alpine: 3.8 betyr, bruk Alpine: 3.8 Docker -bildet som base for det nye bildet som vi skal bygge fra dette Dockerfile.

Kjør APK -oppdatering betyr, kjør APK -oppdatering Kommando i Base Docker -bildet Alpine: 3.8.

Kjør apk add -no -cache nodejs betyr, kjør APK Legg til kommando for å installere NodeJS -programmeringsspråket i Alpine: 3.8 Docker Base Image.

KOPIERE ./src /app betyr, kopier alle filene fra ~/myapp/src katalog til /app Katalog 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 fil fra den nye beholderen ved hjelp av Node binær lokalisert i /usr/bin/node.

Til slutt, til Utsett 8080/tcp betyr, utsett eller åpne TCP -porten 8080 til vertsdatamaskinen.

Opprette tilpasset Docker -bilde ved hjelp av DockerFile:

La oss nå lage et tilpasset Docker -bilde Alpine-node: v1 bruker Dockerfile at vi nettopp opprettet.

Forsikre deg først om at du er i ~/myapp/ Katalog og kjør deretter følgende kommando for å opprette ditt tilpassede Docker -bilde Alpine-node: v1:

$ docker build -t alpine -node: v1 .

Som du ser, det tilpassede docker -bildet Alpine-node: v1 opprettes. Det nødvendige base Docker -bildet og pakker trekkes fra Internett.

Som du ser, det tilpassede docker -bildet Alpine-node: v1 opprettes vellykket.

Testing av det tilpassede Docker -bildet:

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

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

$ Docker Run -D -It -Navn www Alpine -Node: V1

Beholderen www er skapt.

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

$ docker inspiser www | grep adresse

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

Voila! Jeg har tilgang til porten 8080 av min www Docker Container.

Det er i utgangspunktet slik du utsetter visse porter i dine tilpassede Docker -bilder du skal bygge ved hjelp av Dockerfile.

Å utsette TCP- og UDP -porter ved hjelp av Dockerfile:

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

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

Utsett 53/tcp

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

Utsett 53/udp

Du kan eksponere TCP- og UDP -port samtidig med følgende linjer i din Dockerfile:

Utsett 53/tcp
Utsett 53/udp

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

Utsett 53

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

Å utsette flere porter ved hjelp av DockerFile:

La oss si at du vil lage et tilpasset gjennomsnittlig 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 havner!

Den gode nyheten er; Du kan eksponere så mange porter som behov på det tilpassede Docker -bildet ditt som er opprettet ved hjelp av Dockerfile.

Portene i eksemplet over kan bli utsatt med følgende linjer i din Dockerfile:

Eksponer 80/TCP
Utsett 8080/tcp
Utsett 21/tcp
Utsett 22/tcp
Utsett 3306/tcp
Utsett 27017/tcp
Utsett 27018/tcp

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

Utsett 80
Utsett 8080
Utsett 21
Utsett 22
Utsett 3306
Eksponer 27017
Utsett 27018

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

Utsett 80
Utsett 8080
Utsett 21
Utsett 22
Utsett 53/udp
Utsett 3306
Eksponer 27017
Utsett 27018

Så det er slik du utsetter porter ved hjelp av Dockerfile. Å lære mer om Dockerfile og utsette porter ved hjelp av Dockerfile, Les Dockerfile Referansehåndbok ved https: // dokumenter.Docker.com/motor/referanse/byggherre/#eksponering

Takk for at du leste denne artikkelen.