Forum: PC Hard- und Software Docker: Dateien aus Image rein- und rauskopieren


von Dennis S. (eltio)


Lesenswert?

Hallo zusammen,

folgendes soll realisiert werden:
1) Erstellen eines Dockerimages
2) Kopieren einer Datei aus dem Image auf den Host
3) Manipulieren der Datei auf dem Host
4) Zurückkopieren der Datei in das Image

Die Punkte 1 bis 3 sind erledigt. Bei 4 wäre mein erster Ansatz, das 
Image aus 1 als Base Image zu nehmen und die manipulierte Datei mittels 
eines eigenen Dockerfiles zu kopieren.

Problem: Der Name des Base Images wird durch den Anwender bestimmt. Ist 
es möglich das Base Image als Paramter beim Aufruf von "docker build" zu 
übergeben? Irgendwelche anderen Ideen?

Viele Grüße

von Dirk D. (dicky_d)


Lesenswert?

für mich klingt das so als willst du, für die einmalige Verwendung ne 
Datei austauschen.
Das kannst du mit mapping erledigen, dafür musst du kein image bauen.

... und die Antwort auf deine eigentliche frage: nein, da könntest du 
nur, ggf. das Dockerfile umschreiben.

Darf ich nach dem Anwendungsfall fragen? das klingt erstmal 
merkwürdig...

von oszi40 (Gast)


Lesenswert?

Dennis S. schrieb:
> Zurückkopieren der Datei in das Image

Dafür gab es einen Image-Editor. Der kluge Mann würde natürlich nie im 
Original herumfummeln, sonderen eine Kopie bearbeiten.

von Sheeva P. (sheevaplug)


Lesenswert?

oszi40 schrieb:
> Dennis S. schrieb:
>> Zurückkopieren der Datei in das Image
>
> Dafür gab es einen Image-Editor. Der kluge Mann würde natürlich nie im
> Original herumfummeln, sonderen eine Kopie bearbeiten.

Du weißt aber schon, was ein Docker-Image ist, oder?

von Sheeva P. (sheevaplug)


Lesenswert?

Dennis S. schrieb:
> folgendes soll realisiert werden:
> 1) Erstellen eines Dockerimages
> 2) Kopieren einer Datei aus dem Image auf den Host
> 3) Manipulieren der Datei auf dem Host
> 4) Zurückkopieren der Datei in das Image

Bitte entschuldige meine Offenheit, aber das hört sich für mich nach 
einem kaputten Konzept an. Die Idee ist vielmehr, daß Images 
unveränderbar sein, und bei Änderungen neu gebaut werden sollten.

Man kann so etwas mit Containern machen, mit "docker cp" -- aber 
sonderlich elegant ist das leider auch nicht.

> Die Punkte 1 bis 3 sind erledigt.

Huch, wie das?

> Bei 4 wäre mein erster Ansatz, das
> Image aus 1 als Base Image zu nehmen und die manipulierte Datei mittels
> eines eigenen Dockerfiles zu kopieren.

Wie gesagt, das hört sich nach einem kaputten Konzept an. Wenn der User 
eh das Image bauen muß, kann mit den Befehlen "COPY" und "ADD" im 
Dockerfile eine (manipulierte) Datei in das Image übertragen werden. 
Kannst Du uns vielleicht genauer erklären, was genau Du erreichen 
willst, bzw. was Dein besonderer Anwendungsfall ist?

> Problem: Der Name des Base Images wird durch den Anwender bestimmt. Ist
> es möglich das Base Image als Paramter beim Aufruf von "docker build" zu
> übergeben? Irgendwelche anderen Ideen?

docker help build /-t

von Dennis S. (eltio)


Lesenswert?

Dirk D. schrieb:
> Das kannst du mit mapping erledigen, dafür musst du kein image bauen.

Kannst du das genauer erläutern?

Sheeva P. schrieb:
> Bitte entschuldige meine Offenheit, aber das hört sich für mich nach
> einem kaputten Konzept an. Die Idee ist vielmehr, daß Images
> unveränderbar sein, und bei Änderungen neu gebaut werden sollten.

Um es klarer zu formulieren: zur Zeit ist es so, dass ich das Docker 
Image "UNmodified" baue, die Datei herauskopiere und manipuliere und 
anschließend das Image "modified" mit Base Image "UNmodified" baue in 
das die manipulierte Datei reinkopiert wird.

Sheeva P. schrieb:
> Huch, wie das?

1) docker build -t <tag> .
2) docker run --rm --entrypoint cat <tag> /programm > programm
3) foo.exe programm

Sheeva P. schrieb:
> docker help build /-t
Das bestimmt den Namen des Tags. Wie soll mir das helfen? Der Punkt ist 
ja, dass in Dockerfile.modified das Base Image angegeben werden muss, 
welches beim Bauen von Dockerfile.unmodified vom User angegeben wurde.

Gruß
Dennis

von Dirk D. (dicky_d)


Lesenswert?

Dennis S. schrieb:
> Dirk D. schrieb:
>> Das kannst du mit mapping erledigen, dafür musst du kein image bauen.
>
> Kannst du das genauer erläutern?
Klar

> Sheeva P. schrieb:
>> Huch, wie das?
>
> 1) docker build -t <tag> .
> 2) docker run --rm --entrypoint cat <tag> /programm > programm
> 3) foo.exe programm

4) docker run -v ./programm:/programm (und deine üblichen optionen)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.