2015-03-05 2 views
3

Есть ли способ «применить патч» к изображению докера, в частности, один или несколько команд RUN, ADD и т. Д.?Есть ли способ «применить патч» к изображению докера?

Например, команда RUN может занять 20 минут, чтобы загрузить, скомпилировать и установить двоичный файл. Можно ли воспользоваться этим различием и применить его к другому изображению?

Единственный способ, которым я могу думать (что я до сих пор не пытался), чтобы запустить docker diff, разобрать вывод, создать TGZ, а затем использовать TGZ как ADD в другом Dockerfile.

Я понимаю, что есть проблемы с этим, например. если заранее вызван apt-get update, который может сломать ожидаемую связь динамической библиотеки для двоичного файла и т. д. Я в порядке с этим, так как мои тесты не удастся и покажут, что мне нужно снова перестроить «diff».

Я также понимаю, что могут быть конфликты. Я счастлив полностью заменить файл.

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

ответ

2

Короткий ответ: нет, вы не можете этого сделать.

Долгий ответ заключается в том, что с достаточной мотивацией вы сможете написать код, который будет делать то, что вы хотите. Я написал некоторые документы о формате докер изображения (и инструменте для манипулирования этих изображений) здесь:

Это может дать вам некоторые идеи о том, где начать.

Лично я подозреваю, что это не стоит.

0

Я вижу, что мы можем использовать различные подходы к применению исправлений или обновлений.

1.Patching using the Dockerfile 
2.Patching an instance of the container and converting it to an image 

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

1. Create a container from the image you would like to update. 
2. Inside the container, run the native package manager and update the desired packages or patches. 
3. Exit the container instance. 
4. Commit the changes done to get the updated image. 
5. Stop the containers that were instantiated from the pre-updated image. 
6. Instantiate new containers from the update image. 
Смежные вопросы