Een Docker-installatiekopie aanpassen voor het uitvoeren van uw eigen web-app

Voltooid

Docker Hub is een uitstekende bron van installatiekopieën om u op weg te helpen bij het bouwen van uw eigen apps in containers. U kunt een installatiekopieën downloaden die de basisfunctionaliteit biedt die u nodig hebt en vervolgens uw eigen toepassing op een laag plaatsen om een nieuwe aangepaste installatiekopieën te maken. 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 Docker Hub een basisinstallatiekopieën bevat die dit framework bevat. Als proof-of-concept wilt u beginnen met deze basisinstallatiekopieën en de code voor een van de web-apps toevoegen om een nieuwe aangepaste installatiekopieën 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 les leert u hoe u een aangepaste Docker-installatiekopieën maakt en hoe u het proces kunt automatiseren door een Dockerfile te schrijven.

Een aangepaste installatiekopie 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 voor het identificeren van een geschikte basisinstallatiekopieën begint meestal met een installatiekopieën zoeken op Docker Hub. U wilt een installatiekopie die al een toepassingsframework bevat en alle hulpprogramma's en 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 installatiekopieën aanpassen door een container met de basisinstallatiekopieën te starten en er 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, gebruikt u de docker commit opdracht om de wijzigingen op te slaan in een nieuwe installatiekopieën.

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 bestand met tekst zonder opmaak met alle opdrachten die nodig zijn om een installatiekopie te maken. Dockerfiles worden geschreven in een minimalistische scripttaal die is ontworpen voor het bouwen en configureren van installatiekopieën. Ze documenteren de bewerkingen die nodig zijn om een installatiekopieën te bouwen, te beginnen met een basisinstallatiekopieën.

Het volgende voorbeeld toont een Dockerfile waarmee een .NET Core 2.2-toepassing wordt gebouwd en in een nieuwe installatiekopie wordt verpakt.

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"]

In dit bestand vinden de volgende bewerkingen plaats:

Opdracht Actie
FROM Hiermee downloadt u de opgegeven installatiekopieën en maakt u een nieuwe container op basis van deze installatiekopieën.
WORKDIR Hiermee stelt u de huidige werkmap in de container in, die wordt gebruikt door de volgende opdrachten.
COPY 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.
BLOOT Hiermee maakt u een configuratie in de nieuwe installatiekopieën die aangeeft welke poorten moeten worden geopend wanneer de container wordt uitgevoerd. Als met de container een web-app wordt uitgevoerd, is het gebruikelijk dat poort 80 de EXPOSE-poort is.
ENTRYPOINT Hiermee geeft u de bewerking op die de container moet uitvoeren wanneer deze wordt gestart. In dit voorbeeld wordt de nieuw gebouwde app ermee uitgevoerd. U geeft de opdracht op die u wilt uitvoeren en elk van de argumenten als een tekenreeksmatrix.

Voor toepassingen die zijn bedoeld om als Docker-installatiekopieën te worden verpakt, bevindt zich volgens de conventies doorgaans een Dockerfile in de hoofdmap waar zich ook hun broncode bevindt. Dit bestand heeft bijna altijd Dockerfile.

Met de opdracht docker build wordt een nieuwe installatiekopie gemaakt door een Dockerfile uit te voeren. De syntaxis van deze opdracht heeft verschillende parameters:

  • Met de vlag -f wordt de naam aangeduid van het Dockerfile dat moet worden gebruikt.
  • Met de vlag -t wordt de naam opgegeven van de installatiekopieën die moeten worden gemaakt; in dit voorbeeld myapp:v1.
  • De laatste parameter, ., biedt de bouwcontext voor de bronbestanden voor de opdracht COPY: de set bestanden op de hostcomputer die nodig zijn tijdens het bouwproces.
docker build -t myapp:v1 .

Achter de schermen maakt de docker build opdracht een container, voert de opdrachten erin uit en voert de wijzigingen door in een nieuwe installatiekopieën.