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| grebAdresseSom 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/tcpDu kan også afsløre en UDP -port (lad os sige UDP -port 53 ) med følgende linje i din Dockerfile :
UDSÆTTE53/udpDu kan afsløre TCP- og UDP -port på samme tid med følgende linjer i din Dockerfile :
UDSÆTTE53/tcpUDSÆ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ÆTTE53Derefter 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/tcpUDSÆ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ÆTTE80UDSÆ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ÆTTE80UDSÆ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.