Aby zrozumieć, jak zbudowano obraz dokera, użyj
docker history --no-trunc
polecenia.
Możesz zbudować plik dokera z obrazu, ale nie będzie on zawierał wszystkiego, co chciałbyś w pełni zrozumieć, w jaki sposób obraz został wygenerowany. Rozsądnie można wyodrębnić części MAINTAINER, ENV, EXPOSE, VOLUME, WORKDIR, ENTRYPOINT, CMD i ONBUILD z pliku dockerfile.
Poniższy skrypt powinien działać dla Ciebie:
#!/bin/bash
docker history --no-trunc "$1" | \
sed -n -e 's,.*/bin/sh -c #(nop) \(MAINTAINER .*[^ ]\) *0 B,\1,p' | \
head -1
docker inspect --format='{{range $e := .Config.Env}}
ENV {{$e}}
{{end}}{{range $e,$v := .Config.ExposedPorts}}
EXPOSE {{$e}}
{{end}}{{range $e,$v := .Config.Volumes}}
VOLUME {{$e}}
{{end}}{{with .Config.User}}USER {{.}}{{end}}
{{with .Config.WorkingDir}}WORKDIR {{.}}{{end}}
{{with .Config.Entrypoint}}ENTRYPOINT {{json .}}{{end}}
{{with .Config.Cmd}}CMD {{json .}}{{end}}
{{with .Config.OnBuild}}ONBUILD {{json .}}{{end}}' "$1"
Używam tego jako części skryptu do odbudowywania działających kontenerów jako obrazów:
https://github.com/docbill/docker-scripts/blob/master/docker-rebase
Plik Docker jest przydatny głównie, jeśli chcesz móc ponownie spakować obraz.
Należy pamiętać, że obraz dokera może być po prostu kopią zapasową tar rzeczywistej lub wirtualnej maszyny. W ten sposób wykonałem kilka obrazów dokerów. Nawet historia kompilacji pokazuje mi importowanie ogromnego pliku tar jako pierwszy krok w tworzeniu obrazu ...