Använda Dockerfile för att avslöja portar

Using Dockerfile Expose Ports



Det är verkligen enkelt att skapa en anpassad Docker -bild från befintliga Docker -bilder med Dockerfile . Vanligtvis använder människor en minimal basbild som t.ex. alpint eller ubuntu/debian i det syftet. Låt oss säga att du vill skapa en anpassad Docker -bild av din favoritwebbapp skriven i NodeJS. Appen körs på port 8080 . Som standard kan du inte komma åt webbappen på porten 8080 från din värdmaskin. Du måste berätta för Docker att du vill exponera eller öppna port 8080 för att kunna komma åt den från din värdmaskin.

I den här artikeln kommer jag att visa dig hur du exponerar portar med Dockerfile med ett verkligt exempel. Låt oss börja.







Först måste vi skapa en projektkatalog. I den här katalogen bör du behålla alla projektfiler och a Dockerfile .



Kör följande kommando för att skapa en projektkatalog myapp/ i din användares HOME -katalog och navigera till den:



$mkdir~/myapp&& CD~/myapp

Gör webbappen klar:

Skapa nu en katalog src/ inuti ~/myapp/ katalog med följande kommando:

$mkdirsrc

I src/ katalog, kommer all källkod för min NodeJS -applikation att behållas.

Jag ska bara skapa en enkel app.js filen i src/ katalog och kör en enkel webbserver på port 8080 bara för demonstration.

De src/app.js filen innehåller följande koderader:

Skriva Dockerfile och exponera portar:

Skapa nu en Dockerfile i ~/myapp katalog med följande kommando:

$RörDockerfile

Skriv nu följande rader till Dockerfile och spara det. Jag kommer att diskutera vad dessa rader betyder senare.

Här, FRÅN alpint: 3.8 betyder, använd alpint: 3,8 Dockerbild som basen för den nya bilden som vi kommer att bygga utifrån detta Dockerfile .

KÖR apk -uppdatering betyder, kör apk uppdatering kommandot i basdockern alpint: 3,8 .

RUN apk add –no-cache nodejs betyder, kör apk lägg till kommando för att installera programmeringsspråket NodeJS i alpint: 3,8 Dockerbasbild.

KOPIERA ./src /app betyder att kopiera alla filer från ~/myapp/src katalogen till /app katalog över den nya Docker -bilden som vi kommer att bygga med Dockerfile .

CMD [/usr/bin/node, /app/app.js] betyder, kör /app/app.js filen från den nya behållaren med nod binärt beläget i /usr/bin/nod .

Slutligen till EXPOSE 8080/tcp betyder, exponera eller öppna TCP -porten 8080 till värddatorn.

Skapa anpassad Docker -bild med Dockerfile:

Låt oss nu göra en anpassad Docker -bild alpin-nod: v1 använda Dockerfile som vi just skapat.

Se först till att du är i ~/myapp/ katalog och kör sedan följande kommando för att skapa din anpassade Docker -avbildning alpin-nod: v1 :

$dockningsbyggnad-talpin-nod: v1.

Som du kan se, den anpassade Docker -bilden alpin-nod: v1 skapas. Den nödvändiga basdocker -avbildningen och paketen hämtas från internet.

Som du kan se, den anpassade Docker -bilden alpin-nod: v1 skapas framgångsrikt.

Testa den anpassade Docker -bilden:

Nu kan vi testa den anpassade Docker -bilden alpin-nod: v1 väldigt lätt. Allt vi behöver göra är att skapa en behållare av alpin-nod: v1 bild.

Kör följande kommando för att skapa en Docker -behållare www från alpin-nod: v1 Docker -bild:

$docker kör-d -den --namnwww alpine-nod: v1

Behållaren www är skapad.

Låt oss nu ta reda på IP -adressen för www Docker -behållare med följande kommando:

$docker inspektera www| greppAdress

Som du kan se är IP -adressen i mitt fall 172.17.0.3 . Så NodeJS -programmet som jag skrev borde vara tillgängligt från webbläsaren vid porten 8080 av denna IP -adress.

Voila! Jag kan komma åt porten 8080 av mina www Dockerbehållare.

Det är i princip hur du exponerar vissa portar i dina anpassade Docker -bilder som du kommer att bygga med Dockerfile .

Exponera TCP- och UDP -portar med Dockerfile:

I det tidigare avsnittet i den här artikeln visade jag dig hur du exponerar en TCP -port med hjälp av en Dockerfile .

Du kan enkelt avslöja en TCP -port (låt oss säga TCP -port 53 ) i din Dockerfile med följande rad:

ÖVERSIKT53/tcp

Du kan också avslöja en UDP -port (Låt oss säga UDP -port 53 ) med följande rad i din Dockerfile :

ÖVERSIKT53/udp

Du kan exponera TCP- och UDP -porten samtidigt med följande rader i din Dockerfile :

ÖVERSIKT53/tcp
ÖVERSIKT53/udp

Om du inte anger vilket protokoll (TCP eller UDP) som ska användas, används TCP som standard. Om du till exempel skriver följande rad i din Dockerfile :

ÖVERSIKT53

Då antar Docker att du vill använda TCP -porten 53.

Exponera flera portar med Dockerfile:

Låt oss säga att du vill skapa en anpassad MEAN stack Docker -bild. I det här fallet kommer du att köra en HTTP -server på någon port (låt oss säga TCP -port 80 eller 8080), en FTP -server som körs på TCP -port 21, en SQL -databaseserver (låt oss säga MySQL) som körs på TCP -port 3306, eller NoSQL -databasserver (låt oss säga MongoDB) som körs på TCP -port 27017 eller 27018, en SSH -server som körs på TCP -port 22. Det är många portar!

Den goda nyheten är; du kan avslöja så många portar som behövs på din anpassade Docker -bild som skapats med Dockerfile .

Portarna i exemplet ovan kan exponeras med följande rader i din Dockerfile :

ÖVERSIKT80/tcp
ÖVERSIKT8080/tcp
ÖVERSIKTtjugoett/tcp
ÖVERSIKT22/tcp
ÖVERSIKT3306/tcp
ÖVERSIKT27017/tcp
ÖVERSIKT27018/tcp

Om du vill kan du lämna protokollspecifikationen eftersom Docker använder TCP som standard och göra samma sak med följande rader i din Dockerfile :

ÖVERSIKT80
ÖVERSIKT8080
ÖVERSIKTtjugoett
ÖVERSIKT22
ÖVERSIKT3306
ÖVERSIKT27017
ÖVERSIKT27018

Om du behöver kan du blanda TCP- och UDP -portar i din Dockerfile . Om du till exempel kör DNS -server (som körs på UDP -port 53), tillsammans med exemplet ovan, skulle du lägga till följande rader till din Dockerfile .

ÖVERSIKT80
ÖVERSIKT8080
ÖVERSIKTtjugoett
ÖVERSIKT22
ÖVERSIKT53/udp
ÖVERSIKT3306
ÖVERSIKT27017
ÖVERSIKT27018

Så det är så du exponerar portar med Dockerfile . För att lära dig mer om Dockerfile och exponera portar med Dockerfile , Läs Dockerfile referensguide på https://docs.docker.com/engine/reference/builder/#expose

Tack för att du läste denna artikel.