Dockerfile gebruiken om poorten zichtbaar te maken

Using Dockerfile Expose Ports



Het is heel eenvoudig om een ​​aangepaste Docker-afbeelding te maken van bestaande Docker-afbeeldingen met behulp van Dockerbestand . Gewoonlijk gebruiken mensen een minimale basisafbeelding zoals: alpine of ubuntu/debian met dat doel. Stel dat u een aangepaste Docker-afbeelding wilt maken van uw favoriete web-app geschreven in NodeJS. De app draait op poort 8080 . Standaard heb je geen toegang tot de web-app op poort 8080 vanaf uw hostcomputer. U moet Docker vertellen dat u de poort wilt vrijgeven of openen 8080 om er toegang toe te krijgen vanaf uw hostcomputer.

In dit artikel laat ik je zien hoe je poorten blootlegt met behulp van Dockerbestand met een voorbeeld uit de echte wereld. Laten we beginnen.







Eerst moeten we een projectdirectory maken. In deze map moet u alle projectbestanden bewaren en a Dockerbestand .



Voer de volgende opdracht uit om een ​​projectdirectory te maken: mijnapp/ in de HOME-directory van uw gebruikers en navigeer ernaar:



$mkdir~/mijnapp&& CD~/mijnapp

De web-app voorbereiden:

Maak nu een map aan src/ binnen in de ~/mijnapp/ map met het volgende commando:

$mkdirsrc

In de src/ directory, wordt alle broncode van mijn NodeJS-toepassing bewaard.

Ik zal gewoon een eenvoudige maken app.js bestand in de src/ directory en voer een eenvoudige webserver uit op poort 8080 alleen voor demonstratie.

De src/app.js bestand bevat de volgende regels codes:

Dockerfile schrijven en poorten blootleggen:

Maak nu een Dockerbestand in de ~/mijnapp map met het volgende commando:

$aanrakenDockerbestand

Typ nu de volgende regels in de Dockerbestand en bewaar het. Wat deze regels betekenen, zal ik later bespreken.

Hier, VAN alpine:3.8 betekent, gebruik de alpine: 3.8 Docker-afbeelding als basis voor de nieuwe afbeelding die we hiervan gaan bouwen Dockerbestand .

APK-update UITVOEREN betekent, voer de uit apk-update commando in de basis Docker-afbeelding alpine: 3.8 .

RUN apk add -no-cache nodejs betekent, voer de uit apk toevoegen commando om de NodeJS programmeertaal te installeren in de alpine: 3.8 Docker-basisafbeelding.

KOPIE ./src /app betekent, kopieer alle bestanden van de ~/mijnapp/src map naar de /app directory van de nieuwe Docker-afbeelding die we zullen bouwen met behulp van de Dockerbestand .

CMD [/usr/bin/node, /app/app.js] betekent, voer de uit /app/app.js bestand uit de nieuwe container met knooppunt binair gelokaliseerd in /usr/bin/node .

Tot slot, om BLOOT 8080/tcp betekent, bloot of open de TCP-poort 8080 naar de hostcomputer.

Aangepaste Docker-afbeelding maken met Dockerfile:

Laten we nu een aangepaste Docker-afbeelding maken alpine-knooppunt:v1 de ... gebruiken Dockerbestand die we zojuist hebben gemaakt.

Zorg eerst dat je in de ~/mijnapp/ directory en voer vervolgens de volgende opdracht uit om uw aangepaste Docker-afbeelding te maken: alpine-knooppunt:v1 :

$docker build-talpine-node:v1 .

Zoals u kunt zien, is de aangepaste Docker-afbeelding alpine-knooppunt:v1 wordt gecreëerd. De vereiste basis Docker-image en pakketten worden van internet gehaald.

Zoals u kunt zien, is de aangepaste Docker-afbeelding alpine-knooppunt:v1 succesvol is aangemaakt.

De aangepaste Docker-afbeelding testen:

Nu kunnen we de aangepaste Docker-afbeelding testen alpine-knooppunt:v1 Heel makkelijk. Het enige wat we moeten doen is een container maken van alpine-knooppunt:v1 afbeelding.

Voer de volgende opdracht uit om een ​​Docker-container te maken: www van de alpine-knooppunt:v1 Docker-afbeelding:

$havenarbeider-NS -het --naamwww alpine-node:v1

De houder www is gecreëerd.

Laten we nu eens kijken naar het IP-adres van de www Docker-container met het volgende commando:

$havenarbeider inspecteren www| greepAdres

Zoals je kunt zien, is in mijn geval het IP-adres 172.17.0.3 . Dus de NodeJS-toepassing die ik heb geschreven, moet toegankelijk zijn via de webbrowser op poort 8080 van dit IP-adres.

Voila! Ik heb toegang tot de poort 8080 van mijn www Docker-container.

Dat is in feite hoe u bepaalde poorten blootlegt in uw aangepaste Docker-afbeeldingen die u gaat gebruiken Dockerbestand .

TCP- en UDP-poorten blootleggen met Dockerfile:

In het eerdere gedeelte van dit artikel heb ik je laten zien hoe je een TCP-poort blootlegt met a Dockerbestand .

U kunt eenvoudig een TCP-poort vrijgeven (laten we zeggen TCP-poort) 53 ) in uw Dockerbestand met de volgende regel:

EXPOSEER53/tcp

U kunt ook een UDP-poort blootleggen (laten we zeggen UDP-poort) 53 ) met de volgende regel in je Dockerbestand :

EXPOSEER53/udp

U kunt de TCP- en UDP-poort tegelijkertijd blootleggen met de volgende regels in uw: Dockerbestand :

EXPOSEER53/tcp
EXPOSEER53/udp

Als u niet opgeeft welk protocol (TCP of UDP) moet worden gebruikt, wordt standaard TCP gebruikt. Als u bijvoorbeeld de volgende regel in uw schrijft Dockerbestand :

EXPOSEER53

Dan gaat Docker ervan uit dat je de TCP-poort 53 wilt gebruiken.

Meerdere poorten blootleggen met Dockerfile:

Stel dat u een aangepaste MEAN-stack Docker-afbeelding wilt maken. In dit geval draait u een HTTP-server op een poort (laten we zeggen TCP-poort 80 of 8080), een FTP-server die draait op TCP-poort 21, een SQL-databaseserver (laten we zeggen MySQL) die draait op TCP-poort 3306, of NoSQL-databaseserver (laten we zeggen MongoDB) die draait op TCP-poort 27017 of 27018, een SSH-server die draait op TCP-poort 22. Dat zijn veel poorten!

Het goede nieuws is; u kunt zoveel poorten als nodig vrijgeven op uw aangepaste Docker-afbeelding die is gemaakt met Dockerbestand .

De poorten in het bovenstaande voorbeeld kunnen worden weergegeven met de volgende regels in uw: Dockerbestand :

EXPOSEER80/tcp
EXPOSEER8080/tcp
EXPOSEEReenentwintig/tcp
EXPOSEER22/tcp
EXPOSEER3306/tcp
EXPOSEER27017/tcp
EXPOSEER27018/tcp

Als u wilt, kunt u de protocolspecificatie laten zoals Docker standaard TCP gebruikt en hetzelfde doen met de volgende regels in uw Dockerbestand :

EXPOSEER80
EXPOSEER8080
EXPOSEEReenentwintig
EXPOSEER22
EXPOSEER3306
EXPOSEER27017
EXPOSEER27018

Indien nodig kunt u TCP- en UDP-poorten in uw Dockerbestand . Als u bijvoorbeeld een DNS-server gebruikt (die op UDP-poort 53 draait), samen met het bovenstaande voorbeeld, zou u de volgende regels aan uw Dockerbestand .

EXPOSEER80
EXPOSEER8080
EXPOSEEReenentwintig
EXPOSEER22
EXPOSEER53/udp
EXPOSEER3306
EXPOSEER27017
EXPOSEER27018

Dus zo stel je poorten bloot met behulp van Dockerbestand . Om meer te weten te komen over Dockerbestand en het vrijgeven van poorten met behulp van Dockerbestand , Lees de Dockerbestand naslaggids op https://docs.docker.com/engine/reference/builder/#expose

Bedankt voor het lezen van dit artikel.