Oefening: Een Docker-installatiekopie aanpassen voor het uitvoeren van uw eigen web-app
Een Dockerfile bevat de stappen voor het bouwen van een aangepaste Docker-installatiekopie.
U besluit een van de web-apps van uw organisatie te implementeren met behulp van Docker. U selecteert een eenvoudige web-app die een web-API implementeert voor een website voor hotelreserveringen. De web-API maakt HTTP POST- en GET-bewerkingen beschikbaar waarmee reserveringen van klanten worden gemaakt en opgehaald.
Notitie
In deze versie van de web-app worden de boekingen niet daadwerkelijk bewaard en retourneren query's dummygegevens.
In deze oefening maakt u een Dockerfile voor een app die er geen heeft. Vervolgens bouwt u de installatiekopie en gaat u deze lokaal uitvoeren.
Een Dockerfile voor de web-app maken
Als deze nog niet wordt uitgevoerd, start u Docker op uw computer.
In het opdrachtpromptvenster op uw lokale computer voert u de volgende opdracht uit om de broncode van de web-app te downloaden.
git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
Voer de volgende opdracht in om de
src
map te openen.cd mslearn-hotel-reservation-system/src
Voer in de
src
map de volgende opdrachten in om een nieuw bestand met de naamDockerfile
te maken en dit te openen in Kladblok:copy NUL Dockerfile notepad Dockerfile
Notitie
Met de opdracht Kladblok wordt standaard een tekstbestand geopend. Zorg ervoor dat u het opslaat als bestandstype Alle bestanden zonder bestandsextensie. Als u dit wilt controleren, opent u de src-map in Bestandenverkenner en selecteert u >> Bestandsextensies weergeven. Wijzig zo nodig de naam van het bestand en verwijder het uit
.txt
de bestandsnaam.Voeg de volgende code toe aan het 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"
Deze code bevat opdrachten voor het ophalen van een installatiekopie met de .NET Core Framework SDK. De projectbestanden voor de web-app (
HotelReservationSystem.csproj
) en het bibliotheekproject (HotelReservationSystemTypes.csproj
) worden gekopieerd naar de/src
map in de container. Metdotnet restore
de opdracht worden de afhankelijkheden gedownload die vereist zijn voor deze projecten vanuit NuGet.Voeg de volgende code toe aan de onderkant van het Dockerfile:
COPY . . WORKDIR "/src/HotelReservationSystem" RUN dotnet build "HotelReservationSystem.csproj" -c Release -o /app
Met deze opdrachten kopieert u de broncode voor de web-app naar de container en voert u vervolgens de dotnet-buildopdracht uit om de app te bouwen. De resulterende DLL's worden naar de
/app
map in de container geschreven.Voeg de volgende opdracht onder aan het Dockerfile toe.
RUN dotnet publish "HotelReservationSystem.csproj" -c Release -o /app
Met
dotnet publish
de opdracht worden de uitvoerbare bestanden voor de website gekopieerd naar een nieuwe map en worden eventuele tussentijdse bestanden verwijderd. De bestanden in deze map kunnen vervolgens worden geïmplementeerd op een website.Voeg de volgende opdrachten toe aan de onderkant van het Dockerfile.
EXPOSE 80 WORKDIR /app ENTRYPOINT ["dotnet", "HotelReservationSystem.dll"]
Met de eerste opdracht wordt poort 80 geopend in de container. Met de tweede opdracht wordt de map
/app
met de gepubliceerde versie van de web-app verplaatst. De laatste opdracht geeft aan dat de opdrachtdotnet HotelReservationSystem.dll
moet worden uitgevoerd als de container wordt uitgevoerd. Deze bibliotheek bevat de gecompileerde code voor de web-app.Sla het bestand op en sluit de teksteditor. Zorg ervoor dat u het opslaat als bestandstype Alle bestanden zonder bestandsextensie.
Bouw en implementeer de installatiekopie met behulp van het Dockerfile
Voer vanaf de opdrachtprompt de volgende opdracht uit om de installatiekopie voor de voorbeeld-app met behulp van het Dockerfile te bouwen. Vergeet de
.
aan het einde van de opdracht niet. Met deze opdracht wordt de installatiekopie gebouwd en lokaal opgeslagen. De installatiekopie krijgt de naamreservationsystem
. Controleer of de installatiekopie is gemaakt. Er kan een waarschuwing over bestands- en mapmachtigingen worden weergegeven wanneer het proces is voltooid. U kunt deze waarschuwing negeren voor de doeleinden van deze oefening. Het kan even duren voordat de installatiekopieën zijn gebouwd.docker build -t reservationsystem .
Voer de volgende opdracht uit om te controleren of de installatiekopieën zijn gemaakt en opgeslagen in het lokale register:
docker image list
De installatiekopie krijgt de naam
reservationsystem
. U hebt ook een afbeelding met de naam microsoft/dotnet:REPOSITORY TAG IMAGE ID CREATED SIZE reservationsystem latest d2501f0f2ced About a minute ago 1.76GB
De web-app testen
Voer de volgende code in om een container uit te voeren met behulp van de
reservationsystem
installatiekopieën. Docker retourneert een lange tekenreeks met hex-cijfers. De container wordt op de achtergrond uitgevoerd zonder gebruikersinterface. Poort 80 in de container wordt toegewezen aan poort 8080 op de hostcomputer. De container krijgt de naamreservations
.docker run -p 8080:80 -d --name reservations reservationsystem
Open een web browser en ga naar
http://localhost:8080/api/reservations/1
. U ziet nu een JSON-object met de gegevens voor reserveringsnummer 1, vergelijkbaar met de volgende uitvoer:Vervang de '1' aan het einde van de localhost-URL door een ander reserveringsnummer, zoals 2 of 20, om de bijbehorende reserveringsgegevens weer te geven.
Voer de volgende opdracht uit om de status van de container weer te geven:
docker ps -a
De uitvoer bevat het volgende voor alle beschikbare containers:
- CONTAINER-ID
- AFBEELDING
- BEVELEN
- TIJD GEMAAKT
- STATUS
- PORTS
- NAMEN
Controleer of de container
STATUS
up is.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
Voer de volgende opdracht in om de reserveringscontainer te stoppen:
docker container stop reservations
Verwijder de container reservations uit het lokale register.
docker rm reservations
Laat de container reservationsystem in het lokale register staan. In de volgende oefening gebruikt u deze afbeelding.
Gefeliciteerd U hebt een installatiekopieën voor uw web-app gemaakt en u hebt deze uitgevoerd met behulp van een Docker-container.