Lowterm: Docker Image erstellen

Hallo Zusammen,

folgendes Problem. Ich habe eine Projektstruktur wie folgt.

MyDockerFile
MyProject
   |____myFronts
           |____apps
                 |____myFiles

Oberhalb von MyProject habe ein Verzeichnis namens MyDockerFile, wo mein Dockerfile mit folgendem Inhalt drin steht:

FROM nginx:stable-alpine

RUN echo 'My Test Image'
RUN mkdir -p myFiles
COPY /MyProject/myFrontend/apps/myFiles myFiles

WORKDIR /myFiles

CMD ["nginx", "-g", "daemon off;"]

Ich möchte nun nur aus dem Verzeichnis myFiles und seinem Inhalt ein Docker-Image erstellen und diese Weitergeben und benutze dafür folgendes Befehl:

docker build -t my-dockerimage .

Allerdings bekomme ich dabei folgende Fehlermeldung:

 => ERROR [4/5] COPY /MyProject/myFrontend/apps/myFiles myFiles                                                0.0s
------
 > [4/5] COPY /MyProject/myFrontend/apps/myFiles myFiles                                     :
------
failed to compute cache key: "/MyProject/myFrontend/apps/myFiles" not found: not found

Kann bitte jemand mir dabei helfen, wie ich da vorzugehen habe?

Danke im Voraus.

  1. Hm. Der erste Blick:

    Du hast:

    MyProject/myFronts/apps/myFiles

    Du willst aber

    /MyProject/myFrontend/apps/myFiles

    kopieren. Sowas passiert mir auch…

    1. Hallo,

      sorry, mein Fehler. Das sollte natürlich so heißen:

      /MyProject/myFronts/apps/myFiles
      

      Gruß

      1. /MyProject/myFronts/apps/myFiles
        

        Bist Du Dir im Hinblick auf den führenden Slash sicher?

        1. Eigentlich nicht. Ich habe nun alles umgekehrt und mein MyDockerFile-Verzeichnis direkt in die myFiles-Verzeichnis verschoben und dann:

          cd MyProject/myFronts/apps
          docker build -f myFiles\DockerBuild\Dockerfile .
          

          Nun läuft alles zwar Fehlerfrei, ich finde aber mein DockerImage nirgendswo. Ich weiß auch nicht, ob der anfängliche Befehl mit FROM nginx:stable-alpine unbedingt notwendig ist, weil ich nur aus den Dateien ein Image erstellen möchte.

          Gruß

          1. Mehr als rudimentäres Halbwissen habe ich nicht zu bieten, aber da ja bislang noch niemand geantwortet hat…

            Nun läuft alles zwar Fehlerfrei, ich finde aber mein DockerImage nirgendswo.

            Die Frage finde ich komisch. Der physikalische Ablageort eines erstellen Images ist gewöhnlich nicht relevant. Ich vermute mal, Du willst Dein Image erstmal starten. Stichwort: „docker run“. Wenn Du tatsächlich Interesse an „einem File“ hast, dann wohl eher „docker save“.

            Das wird Dich aber frühestens dann interessieren, wenn Du ein Image gebaut und getestet hast, was auch das „tut“, was Du eigentlich erreichen möchtest.

            Oder man benötigt diesen Schritt nicht einmal, weil man ein Image gefunden hat, was die eigenen Anforderungen bereits erfüllt.

            Ich weiß auch nicht, ob der anfängliche Befehl mit FROM nginx:stable-alpine unbedingt notwendig ist...

            Probier es doch einfach mal aus. Ich würde erwarten, dass dann bereits Dinge wie „RUN mkdir“ aus Deinem Dockerfile zu einem Fehler führen. Ursache: Du hast dann kein Betriebssystem zur Hand. Man kann tatsächlich auch Images „from scratch“ bauen, wenn man das unbedingt möchte, aber das will man sich (zumindest Anfangs) eher nicht geben.

            Das mit dem „FROM “ ist gängige und empfehlenswerte Praxis. Wenn man seine Aufgabenstellung kennt, dann erzeugt man sein Docker-Image auf Basis eines passenden, bestehenden Images aus dem Docker-Hub.

            In Deinem Fall „FROM nginx:stable-alpine“ hast Du dann einen Nginx-Webserver auf einem Alpine-Linux als Basis.

            …weil ich nur aus den Dateien ein Image erstellen möchte.

            Ich vermute, Du hast die Zusammenhänge noch nicht ganz verinnerlicht. Was willst Du mit Deinen Dateien dann anfangen?

            Du willst doch vermutlich auf irgendeine Art von Webservice hinaus, der mit Deinen Dateien auch irgendwas Nützliches anstellt?

          2. Hallo,

            Hast du es mal mit "docker images" probiert? Da solltest du alle deine lokalen docker-images sehen.

            Ansonsten irritiert mich, wohin du die Dateien innerhalb des Container kopierst. Der Standard-Document-Root ist /usr/share/nginx/html. Aber vielleicht fehlt in deinem Beispiel auch einfach nur der Teil, an dem du eine custom nginx.conf nach /etc/nginx kopierst.

            Viele Grüße Matti