Щоб зрозуміти, як побудовано зображення докера, скористайтеся
docker history --no-trunc
командою.
Ви можете створити файл докера з зображення, але він не буде містити все, що ви хотіли б повністю зрозуміти, як генерується зображення. Розумно, що ви можете витягти, це частини 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, як перший крок у створенні зображення ...