Чтобы понять, как был создан образ докера, используйте
docker history --no-trunc
команду.
Вы можете создать файл Docker из изображения, но он не будет содержать всего, что вы хотели бы полностью понять, как было сгенерировано изображение. Разумно то, что вы можете извлечь, это части Dockerfile: MAINTAINER, ENV, EXPOSE, VOLUME, WORKDIR, ENTRYPOINT, CMD и ONBUILD.
Следующий скрипт должен работать на вас:
#!/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"
Я использую это как часть скрипта для восстановления запущенных контейнеров в виде изображений:
https://github.com/docbill/docker-scripts/blob/master/docker-rebase
Dockerfile в основном полезен, если вы хотите иметь возможность повторно упаковать изображение.
Необходимо помнить, что образ докера может быть просто резервной копией реального или виртуального компьютера. Я сделал несколько изображений докера таким образом. Даже история сборки показывает, что я импортировал огромный tar-файл как первый шаг в создании образа ...