Een Docker-image aanpassen om uw eigen webapp te draaien
Docker Hub is een uitstekende bron van afbeeldingen om u op weg te helpen bij het bouwen van uw eigen gecontaineriseerde apps. U kunt een installatiekopie downloaden die de basisfunctionaliteit biedt die u nodig hebt en vervolgens uw eigen toepassing erbovenop te plaatsen om een nieuwe aangepaste installatiekopie te creëren. U kunt de stappen voor dit proces automatiseren door een Dockerfile te schrijven.
In het scenario van de online kledingwinkel heeft het bedrijf besloten dat Docker de weg voorwaarts is. De volgende stap bestaat eruit te bepalen wat de beste manier is om uw web-apps in een container te plaatsen. Het bedrijf is van plan om veel van de apps te bouwen met behulp van ASP.NET Core. U hebt gemerkt dat op Docker Hub een basisimage staat dat dit framework bevat. Als proof-of-concept wilt u beginnen met deze basisafbeelding en de code voor een van de web-apps toevoegen om een nieuwe aangepaste afbeelding te maken. U wilt ook dat dit proces eenvoudig kan worden herhaald, zodat dit kan worden geautomatiseerd wanneer u een nieuwe versie van de web-app vrijgeeft.
In deze eenheid zult u leren hoe u een aangepaste Docker-afbeelding maakt en hoe u dit proces kunt automatiseren door een Dockerfile te schrijven.
Een aangepaste Dockerimage maken met een Dockerfile
Als u een Docker-installatiekopie met uw toepassing wilt maken, begint u meestal met het identificeren van een basisinstallatiekopie waaraan u bestanden en configuratiegegevens toevoegt. Het proces van het identificeren van een geschikte basisimage begint meestal met een afbeeldingenzoektocht op Docker Hub. U wilt een image die al een toepassingsframework bevat en alle hulpprogramma's van een Linux-distributie, zoals Ubuntu of Alpine. Als u bijvoorbeeld een ASP.NET Core-toepassing hebt die u in een container wilt verpakken, heeft Microsoft daarvoor een installatiekopie gepubliceerd met de naam mcr.microsoft.com/dotnet/core/aspnet, die de ASP.NET Core-runtime al bevat.
U kunt een afbeelding aanpassen door een container te starten met de basisafbeelding en daar wijzigingen in aan te brengen. Wijzigingen omvatten meestal activiteiten zoals het kopiëren van bestanden naar de container vanuit het lokale bestandssysteem en het uitvoeren van verschillende hulpprogramma's en hulpprogramma's om code te compileren. Wanneer u klaar bent, kunt u de docker commit opdracht gebruiken om de wijzigingen op te slaan in een nieuwe afbeelding.
Het handmatig voltooien van het bovenstaande proces is tijdrovend en foutgevoelig. U kunt het script uitvoeren met een scripttaal zoals Bash, maar Docker biedt een effectievere manier om het maken van installatiekopieën te automatiseren via een Dockerfile.
Een Dockerfile is een platte-tekst bestand met alle opdrachten die nodig zijn om een image te maken. Dockerfiles worden geschreven in een minimale scripttaal die is ontworpen voor het bouwen en configureren van images. Ze documenteren de bewerkingen die nodig zijn om een beeld te bouwen, te beginnen met een basisbeeld.
In het volgende voorbeeld ziet u een Dockerfile die een .NET 6.0-applicatie bouwt en verpakt in een nieuwe image.
FROM mcr.microsoft.com/dotnet/sdk:6.0
WORKDIR /app
COPY myapp_code .
RUN dotnet build -c Release -o /rel
EXPOSE 80
WORKDIR /rel
ENTRYPOINT ["dotnet", "myapp.dll"]
In dit bestand vinden de volgende bewerkingen plaats:
| Opdracht | Actie |
|---|---|
| VAN | Download de opgegeven afbeelding en maak een nieuwe container op basis van deze afbeelding. |
| WORKDIR | Hiermee stelt u de huidige werkmap in de container in; gebruikt door de volgende opdrachten. |
| KOPIËREN | Kopieert bestanden van de hostcomputer naar de container. Het eerste argument (myapp_code) is een bestand of map op de hostcomputer. Het tweede argument (.) is de naam van het doelbestand of de doelmap in de container. In dit geval is de huidige werkmap (/app) de doelmap. |
| UITVOEREN | Voert een opdracht uit in de container. De argumenten voor de opdracht RUN zijn opdrachtregelopdrachten. |
| BLOOTSTELLEN | Hiermee maakt u een configuratie in de nieuwe image die aangeeft welke poorten moeten worden geopend wanneer de container draait. Als met de container een web-app wordt uitgevoerd, is het gebruikelijk dat poort 80 de EXPOSE-poort is. |
| Toegangspunt | Hiermee geeft u de bewerking op die de container moet uitvoeren wanneer deze wordt gestart. In dit voorbeeld wordt de pas gebouwde app uitgevoerd. U geeft de opdracht op die u wilt uitvoeren en elk van de argumenten als een tekenreeksmatrix. |
Voor toepassingen die bedoeld zijn om als Docker-images te worden verpakt, bevindt zich volgens conventie doorgaans een Dockerfile in de hoofdmap van hun broncode. Dit bestand heet bijna altijd Dockerfile.
Met de opdracht docker build wordt een nieuwe image gemaakt door een Dockerfile uit te voeren. De syntaxis van deze opdracht heeft verschillende parameters:
- De
-fvlag geeft de naam aan van het Dockerfile dat moet worden gebruikt. - Met de
-tvlag specificeert u de naam van de te maken afbeelding; in dit voorbeeld myapp:v1. - De laatste parameter,
.biedt de buildcontext voor de bronbestanden voor de opdracht COPY : de set bestanden op de hostcomputer die nodig is tijdens het buildproces.
docker build -t myapp:v1 .
Achter de schermen maakt het docker build commando een container aan, voert daarin opdrachten uit en zet de wijzigingen om in een nieuw image.