Övning – Anpassa en Docker-avbildning för att köra din webbapp
En Dockerfile innehåller stegen för att skapa en anpassad Docker-avbildning.
Du bestämmer dig för att distribuera en av organisationens webbappar med Docker. Du väljer en enkel webbapp som implementerar ett webb-API för en webbplats för hotellbokningar. Webb-API:et exponerar HTTP POST- och GET-åtgärder som skapar och hämtar kundernas bokningar.
Kommentar
I den här versionen av webbappen sparas inte bokningarna och frågor returnerar dummydata.
I den här övningen ska du skapa en Dockerfile för en app som inte har någon. Sedan kan du skapa avbildningen och köra den lokalt.
Skapa en Dockerfile för webbappen
Om den inte redan körs startar du Docker på datorn.
I Cloud Shell-fönstret till höger kör du följande kommando för att ladda ned källkoden för exempelwebbappen.
git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
Ange följande kommando för att öppna
src
katalogen.cd mslearn-hotel-reservation-system/src
I katalogen
src
anger du följande kommandon för att skapa en ny fil med namnetDockerfile
och öppna den i Anteckningar:copy NUL Dockerfile notepad Dockerfile
Kommentar
Som standard öppnar kommandot anteckningar en textfil. Se till att du sparar den som filtyp Alla filer utan filnamnstillägg. Kontrollera genom att öppna mappen src i Utforskaren och välja Visa filnamnstillägg>>. Om det behövs byter du namn på filen och tar bort
.txt
från filnamnet.Lägg till följande kod i Dockerfile:
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 WORKDIR /src COPY ["/HotelReservationSystem/HotelReservationSystem.csproj", "HotelReservationSystem/"] COPY ["/HotelReservationSystemTypes/HotelReservationSystemTypes.csproj", "HotelReservationSystemTypes/"] RUN dotnet restore "HotelReservationSystem/HotelReservationSystem.csproj"
Den här koden har kommandon för att hämta en avbildning som innehåller .NET Core Framework SDK. Projektfilerna för webbappen (
HotelReservationSystem.csproj
) och biblioteksprojektet (HotelReservationSystemTypes.csproj
) kopieras till/src
mappen i containern. Kommandotdotnet restore
laddar ned de beroenden som krävs av dessa projekt från NuGet.Lägg till följande kod längst ned i Dockerfile:
COPY . . WORKDIR "/src/HotelReservationSystem" RUN dotnet build "HotelReservationSystem.csproj" -c Release -o /app
Dessa kommandon kopierar källkoden för webbappen till containern och kör sedan kommandot dotnet build för att skapa appen. De resulterande DLL:erna skrivs till
/app
mappen i containern.Lägg till följande kommando längst ned i Dockerfile.
RUN dotnet publish "HotelReservationSystem.csproj" -c Release -o /app
Kommandot
dotnet publish
kopierar de körbara filerna för webbplatsen till en ny mapp och tar bort eventuella mellanliggande filer. Filerna i den här mappen kan sedan distribueras till en webbplats.Lägg till följande kommandon längst ned i Dockerfile.
EXPOSE 80 WORKDIR /app ENTRYPOINT ["dotnet", "HotelReservationSystem.dll"]
Det första kommandot öppnar port 80 i containern. Det andra kommandot flyttas till mappen
/app
som innehåller den publicerade versionen av webbappen. Det slutliga kommandot anger att containern ska köra kommandotdotnet HotelReservationSystem.dll
när den körs. Det här biblioteket innehåller den kompilerade koden för webbappen.Spara filen och stäng redigeringsprogrammet. Se till att du sparar den som filtyp Alla filer utan filnamnstillägg.
Skapa och distribuera avbildningen med hjälp av Dockerfile
I kommandotolken kör du följande kommando för att skapa avbildningen för exempelappen som använder Dockerfile. Glöm inte
.
i slutet av kommandot. Med det här kommandot skapas avbildningen och det lagras lokalt. Avbildningen får namnetreservationsystem
. Kontrollera att avbildningen har skapats. En varning om fil- och katalogbehörigheter kan visas när processen är klar. Du kan ignorera den här varningen i den här övningen. Avbildningen kan ta en stund att skapa.docker build -t reservationsystem .
Kör följande kommando för att kontrollera att avbildningen har skapats och lagrats i det lokala registret:
docker image list
Avbildningen får namnet
reservationsystem
. Du har också en avbildning med namnet microsoft/dotnet:REPOSITORY TAG IMAGE ID CREATED SIZE reservationsystem latest d2501f0f2ced About a minute ago 1.76GB
Testa webbappen
Ange följande kod för att köra en container med hjälp av avbildningen
reservationsystem
. Docker returnerar en lång sträng med hexsiffror. Containern körs i bakgrunden utan något användargränssnitt. Port 80 i containern mappas till port 8080 på värddatorn. Containern heterreservations
.docker run -p 8080:80 -d --name reservations reservationsystem
Öppna en webbläsare och gå till
http://localhost:8080/api/reservations/1
. Du bör se ett JSON-objekt som innehåller data för reservationsnummer 1 som liknar följande utdata:Ersätt "1" i slutet av localhost-URL:en med ett annat reservationsnummer, till exempel 2 eller 20, för att visa motsvarande reservationsinformation.
Kör följande kommando för att visa containerns status:
docker ps -a
Utdata visar följande för alla tillgängliga containrar:
- CONTAINER-ID
- AVBILDNING
- BEFALLNING
- SKAPAD tid
- STATUS
- PORTAR
- NAMN
Kontrollera att containerns
STATUS
är Upp.CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 07b0d1de4db7 reservationsystem "dotnet HotelReserva…" 5 minutes ago Up 5 minutes 0.0.0.0:8080->80/tcp reservations
Ange följande kommando för att stoppa reservationscontainern:
docker container stop reservations
Ta bort containern reservations från det lokala registret.
docker rm reservations
Låt reservationsystem vara kvar i det lokala registret. Du använder den här bilden i nästa övning.
Grattis! Du har skapat en avbildning för webbappen och du har kört den med en Docker-container.