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| greppAdressSom 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/tcpDu kan också avslöja en UDP -port (Låt oss säga UDP -port 53 ) med följande rad i din Dockerfile :
ÖVERSIKT53/udpDu 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 :
ÖVERSIKT53Då 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.