Docker-lemezkép testreszabása saját webalkalmazás futtatásához

Befejeződött

A Docker Hub kiváló forrást biztosít olyan lemezképekhez, amelyekkel elkezdheti saját tárolóalapú alkalmazásainak létrehozását. Letölthet egy lemezképet, amely biztosítja a szükséges alapvető funkciókat, majd egy új egyéni rendszerkép létrehozásához rétegezheti a saját alkalmazását. A folyamat lépéseit egy Dockerfile megírásával automatizálhatja.

Az online ruházati áruház forgatókönyvében a vállalat úgy döntött, hogy a Docker a tovább vezető út. A következő lépésben a webalkalmazások tárolóba helyezésének legjobb módját kell meghatároznia. A vállalat azt tervezi, hogy számos alkalmazást ASP.NET Core használatával készít. Észrevette, hogy a Docker Hub tartalmaz egy alaprendszerképet, amely tartalmazza ezt a keretrendszert. A koncepció bizonyítékaként ezt az alaprendszerképet kell használnia, és hozzá kell adnia az egyik webalkalmazás kódját egy új egyéni rendszerkép létrehozásához. Azt is szeretné, hogy ez a folyamat könnyen megismételhető legyen, így a webalkalmazás új verziójának kiadásakor automatizálható.

Ebben a leckében megtudhatja, hogyan hozhat létre egyéni Docker-rendszerképet, és hogyan automatizálhatja a folyamatot egy Docker-fájl megírásával.

Egyéni lemezkép létrehozása Dockerfile használatával

Az alkalmazást tartalmazó Docker-rendszerkép létrehozásához általában egy alaprendszerkép azonosításával kell kezdenie, amelyhez fájlokat és konfigurációs adatokat ad hozzá. A megfelelő alaprendszerképek azonosításának folyamata általában a Docker Hubon történő képkereséssel kezdődik. Olyan lemezképet szeretne, amely már tartalmaz egy alkalmazás-keretrendszert, valamint egy Linux-disztribúció összes segédprogramját és eszközét, például az Ubuntu-t vagy az Alpine-t. Ha például egy olyan ASP.NET Core-alkalmazással rendelkezik, amelyet egy tárolóban szeretne elhelyezni, a Microsoft közzétesz egy mcr.microsoft.com/dotnet/core/aspnet nevű lemezképet, amely már tartalmazza az ASP.NET Core futtatókörnyezetet.

A rendszerképek testre szabhatók úgy, hogy elindítanak egy tárolót az alaprendszerképgel, és módosítják azt. A módosítások általában olyan tevékenységeket foglalnak magukban, mint például fájlok másolása a tárolóba a helyi fájlrendszerből, és különböző eszközök és segédprogramok futtatása a kód fordításához. Ha végzett, a docker commit paranccsal mentheti a módosításokat egy új képre.

A fenti folyamat manuális végrehajtása időigényes, és sok hibalehetőséget rejt. A szkriptet a Bashhez hasonló szkriptnyelvvel is szkriptelheti, de a Docker hatékonyabban automatizálja a képlétrehozást Egy Docker-fájlon keresztül.

A Dockerfile egy egyszerű szöveges fájl, amely tartalmazza a rendszerkép létrehozásához szükséges összes parancsot. A Dockerfile-ok írása egy lemezképek létrehozásához és konfigurálásához készült minimális parancsnyelven történik. Dokumentálják a rendszerképek létrehozásához szükséges műveleteket egy alaprendszerképtől kezdve.

A következő példa egy olyan Dockerfile-t mutat be, amely egy .NET Core 2.2 alkalmazást hoz létre, majd új lemezképbe csomagolja azt.

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

Ebben a fájlban a következő műveletek történnek:

Parancs Action
FROM Letölti a megadott lemezképet, és létrehoz egy új tárolót a rendszerkép alapján.
WORKDIR Beállítja a tároló aktuális munkakönyvtárát, amelyet a következő parancsok használnak.
MÁSOL Fájlokat másol a gazdagépről a tárolóba. Az első argumentum (myapp_code) a gazdagépen lévő egyik fájl vagy mappa. A második argumentum (.) a tárolóban célként szereplő fájl vagy mappa nevét határozza meg. Ebben az esetben a cél az aktuális munkakönyvtár (/app).
FUTTATÁS Végrehajt egy parancsot a tárolóban. A RUN parancs argumentumai parancssori parancsok.
EXPO Standard kiadás Létrehoz egy konfigurációt az új lemezképen, amely meghatározza, hogy mely portok nyíljanak meg a tároló futtatásakor. Ha a tároló egy webalkalmazást futtat, akkor az EXPOSE paranccsal általában a 80-as portot szokás megnyitni.
ENTRYPOINT Megadja, hogy a tárolónak milyen műveletet kell futtatnia az indításkor. Ebben a példában ez az újonnan létrehozott alkalmazás. Sztringtömbként adja meg a futtatni kívánt parancsot és annak argumentumait.

A Docker-lemezképként csomagolandó alkalmazások forráskódjának gyökerében általában megtalálható egy Dockerfile, amelynek neve szinte mindig Dockerfile.

A docker build parancs egy új lemezképet hoz létre egy Dockerfile futtatásával. A parancs szintaxisa több paramétert tartalmaz:

  • A -f jelölő a használandó Dockerfile nevét jelöli.
  • A -t jelölő a létrehozandó kép nevét adja meg; ebben a példában a myapp:v1.
  • A végső paraméter (.) a forrásfájlokhoz tartozó létrehozási környezetet adja meg a COPY parancs számára. Ez a létrehozási folyamat során szükséges fájlkészletet jelenti a gazdagépen.
docker build -t myapp:v1 .

A háttérben a docker build parancs létrehoz egy tárolót, parancsokat futtat benne, majd véglegesíti a módosításokat egy új lemezképen.