Dieses Beispiel bezieht sich auf mein eigenes Projekt auf Github, welches ich um ein Dockerimage erweitert habe.

Zuerst braucht ihr eine Anwendung, die bereits über die Kommandozeile ausgeführt werden kann. Ihr könnt euch dafür auch ein neues Hello World-Projekt anlegen.
In meinem Fall gibt es eine Anwendung, die mit dotnet MailToGiteaIssue.dll [Parameter] aufgerufen werden kann.

Aufbau des Dockerfiles

Das Dockerimage sieht folgendermaßen aus:

FROM mcr.microsoft.com/dotnet/core/runtime:3.1-alpine

COPY MailToGiteaIssue/bin/Release/netcoreapp3.1/publish/ /App
WORKDIR /App
ENTRYPOINT ["dotnet", "MailToGiteaIssue.dll"]

Mit FROM gebe ich ein Basisimage an. Hier verwendet ich die .Net Core Runtime, damit ich den Befehl dotnet zur Verfügung habe.
In meiner Pipeline wird die Anwendung von außen kompiliert und mit dotnet publish veröffentlicht.
Der Befehl COPY kopiert diese Dateien (die kompilierte Anwendung) nach /App im Docker-Container.
Mit WORKDIR wird das aktuelle Verzeichnis des Containers geändert. Diesen Befehl kann man sich wie cd vorstellen.
ENTRYPOINT legt den Startpunkt des Containers fest. Das bedeutet, dass beim Start dieses Containers der Befehl dotnet MailToGiteaIssue.dll aufgerufen wird.

Euer ENTRYPOINT kann individuell anders aussehen, je nachdem, wie euer Projekt heißt oder ob weitere Parameter notwendig sind.

Erstellen und aufrufen des Containers

Als erstes müssen wir das Image bauen. Dazu verwenden wir docker build:

docker build -t my-app -f Dockerfile .

Mit dem Parameter -t geben wir unserem Image einen Namen und Tag. Der Tag wird am Ende mit einem Doppelpunkt angegeben. Hier habe ich das Image my-app genannt und den Tag weggelassen.

Da das Image nun lokal bekannt ist, führen wir den Container aus:

docker run my-app

Nun wird eure Anwendung lokal im Container ausgeführt. Wenn ihr das Image aktualisieren wollt, müsst ihr die Anwendung neu kompilieren und mit docker build das Dockerfile neu ausführen.

Fazit

Wie ihr gesehen habt, ist das Portieren einer Konsolenanwendung recht einfach. Die kompilierte Anwendung muss mit copy in das Image übertragen werden. Mit entrypoint legt ihr den Aufruf eurer Anwendung fest.


Bildnachweis: Pixabay.com