Anpassa en Docker-avbildning för att köra din webbapp

Slutförd

Docker Hub är en utmärkt källa för avbildningar när du ska komma igång med att skapa egna containerbaserade appar. Du kan ladda ned en avbildning som tillhandahåller de grundläggande funktioner som du behöver och sedan lägga ditt eget program ovanpå den för att skapa en ny anpassad avbildning. Du kan automatisera stegen för den här processen genom att skriva en Dockerfile.

I scenariot med klädbutiken online beslutade företaget att Docker är vägen framåt. Nästa steg är att avgöra det bästa sättet att contineranpassa dina webbprogram. Företaget planerar att skapa många av apparna med hjälp av ASP.NET Core. Du har märkt att Docker Hub innehåller en basavbildning som innehåller det här ramverket. Som ett konceptbevis vill du börja med den här basavbildningen och lägga till koden för en av webbapparna för att skapa en ny anpassad avbildning. Du vill också att den här processen ska vara lätt att upprepa, så att den kan automatiseras när du släpper en ny version av webbappen.

I den här lektionen får du lära dig hur du skapar en anpassad Docker-avbildning och hur du kan automatisera processen genom att skriva en Dockerfile.

Skapa en anpassad avbildning med en Dockerfile

Om du vill skapa en Docker-avbildning som innehåller ditt program börjar du vanligtvis med att identifiera en basavbildning som du lägger till filer och konfigurationsinformation till. Processen för att identifiera en lämplig basavbildning börjar vanligtvis med en bildsökning på Docker Hub. Du vill ha en avbildning som redan innehåller ett programramverk och alla verktyg och verktyg för en Linux-distribution, till exempel Ubuntu eller Alpine. Om du till exempel har ett ASP.NET Core-program som du vill paketera till en container kan Microsoft publicera en avbildning med namnet mcr.microsoft.com/dotnet/core/aspnet som redan innehåller ASP.NET Core-körningen.

Du kan anpassa en avbildning genom att starta en container med basavbildningen och göra ändringar i den. Ändringar omfattar vanligtvis aktiviteter som att kopiera filer till containern från det lokala filsystemet och köra olika verktyg och verktyg för att kompilera kod. När du är klar använder docker commit du kommandot för att spara ändringarna i en ny avbildning.

Att slutföra processen ovan manuellt är tidskrävande och felbenäget. Du kan skripta det med ett skriptspråk som Bash, men Docker ger ett effektivare sätt att automatisera skapandet av avbildningar via en Dockerfile.

En Dockerfile är en oformaterad textfil som innehåller alla kommandon som behövs för att skapa en avbildning. Dockerfiles skrivs på ett minimalt skriptspråk som har utformats för att skapa och konfigurera avbildningar. De dokumenterar de åtgärder som krävs för att skapa en avbildning, med början i en basavbildning.

I följande exempel visas en Dockerfile som skapar ett .NET Core 2.2-program och paketerar det i en ny avbildning.

FROM mcr.microsoft.com/dotnet/core/sdk:2.2
WORKDIR /app
COPY myapp_code .
RUN dotnet build -c Release -o /rel
EXPOSE 80
WORKDIR /rel
ENTRYPOINT ["dotnet", "myapp.dll"]

I den här filen utförs följande åtgärder:

Command Åtgärd
FROM Laddar ned den angivna avbildningen och skapar en ny container baserat på den här avbildningen.
WORKDIR Anger den aktuella arbetskatalogen i containern som används av efterföljande kommandon.
KOPIERA Kopierar filer från värddatorn till containern. Det första argumentet (myapp_code) är en fil eller mapp på värddatorn. Det andra argumentet (.) anger namnet på filen eller mappen som ska fungera som mål i containern. I det här fallet är målet den aktuella arbetskatalogen (/app).
KÖR Kör ett kommando i containern. Argument till kommandot RUN är kommandoradskommandon.
EXPONERA Skapar en konfiguration i den nya avbildningen som anger vilka portar som ska öppnas när containern körs. Om containern kör en webbapp är det vanligt att EXPOSE (tillgängliggöra) port 80.
ENTRYPOINT Anger vilken åtgärd containern ska köra när den startar. I det här exemplet körs den nyligen skapade appen. Du anger det kommando som du vill köra och vart och ett av dess argument som en strängmatris.

Enligt konventionen har program som är avsedda att paketeras som Docker-avbildningar vanligtvis en Dockerfile i roten av källkoden, och den heter nästan alltid Dockerfile.

Kommandot docker build skapar en ny avbildning genom att köra en Dockerfile. Det här kommandots syntax har flera parametrar:

  • -f-flaggan anger namnet på den Dockerfile som du ska använda.
  • Flaggan -t anger namnet på avbildningen som ska skapas. I det här exemplet myapp:v1.
  • Den sista parametern ., tillhandahåller skapandekontexten för källfilerna för kommandot COPY: uppsättningen filer på värddatorn som behövs under skapandeprocessen.
docker build -t myapp:v1 .

I bakgrunden docker build skapar kommandot en container, kör kommandon i den och genomför sedan ändringarna i en ny avbildning.