Восстановите тот же образ докера, но только с дополнительными изменениями в файле Docker.

Я создаю образ докера, используя Dockerfile. После сборки образа я внес некоторые базовые изменения в Dockerfile. Можно ли восстановить тот же образ только с дополнительными изменениями. Поскольку создание образа занимает очень много времени, я не хочу создавать его полностью. Заранее спасибо.


person TheRimalaya    schedule 27.07.2016    source источник


Ответы (3)


Все сборки докеров работают так, как вы описываете.

Единственное, что нужно учитывать, это зависимости слоев.

Рассмотрите Dockerfile

FROM something
RUN  cmd1
RUN  cmd2
RUN  cmd3
RUN  cmd4

Если вы измените cmd1, то все слои будут перестроены, потому что они могут отличаться по отношению к cmd1
Если вы измените cmd4, то будет перестроена только эта команда, потому что она не повлияла ни на какие другие слои.

Подумайте, какие команды нужно запускать и в каком порядке — возможно, вы сможете улучшить его, изменив порядок операторов.

person Evedel    schedule 27.07.2016

Да, если вы пометите свой образ docker myimage, просто запустите другой файл Docker с помощью

FROM myimage

и поместите после этого ваши дополнительные изменения

person user2915097    schedule 27.07.2016
comment
Обратите внимание, что это предполагает, что отредактированное/помеченное изображение будет доступно в будущем, например, сохранено в доступном репозитории. Хотя это может работать, это довольно хрупкое решение, поскольку его нельзя воссоздать с помощью Dockerfiles или репозитория кода. - person ldg; 27.07.2016

Вы не можете перестроить его с изменениями, для этого вам нужно будет хранить постоянные данные на томе.

Однако, чтобы сохранить изменения, вы можете использовать commit:

https://docs.docker.com/engine/reference/commandline/commit/

Создать новый образ из изменений контейнера

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Может быть полезно зафиксировать изменения или настройки файла контейнера в новом образе. Это позволяет отлаживать контейнер, запуская интерактивную оболочку, или экспортировать рабочий набор данных на другой сервер. Как правило, Dockerfiles лучше использовать для документированного и удобного управления образами. Подробнее о допустимых именах изображений и тегах.

Операция фиксации не будет включать данные, содержащиеся в томах, смонтированных внутри контейнера.

По умолчанию фиксируемый контейнер и его процессы будут приостановлены на время фиксации образа. Это снижает вероятность повреждения данных в процессе создания коммита.

person ldg    schedule 27.07.2016
comment
Обратите внимание, что, хотя вы можете это сделать, это немного анти-шаблон для Docker. В идеале вы хотели бы включить все окончательные обновления в свой Dockerfile (или том, если это необходимо). - person ldg; 27.07.2016
comment
Да, но фиксация докера будет отражаться только на контейнере, а не на самом изображении. - person TheRimalaya; 27.07.2016