2017-01-06 6 views
1

кэширования Docker пока не доступно на Travis: https://github.com/travis-ci/travis-ci/issues/5358кэширования Docker для Трэвис строит

Я пытаюсь написать обходной путь, выполнив:

`docker save -o file.tar $(docker history -q image_name | grep -v missing)` 
`docker load -i file.tar 

Который прекрасно работает, дает мне все слои изображения назад. Моя единственная проблема сейчас в том, что сохранение занимает много времени, и большую часть времени я фактически меняю один слой, поэтому мне не нужно переписывать все остальное. Есть ли способ сообщить команде docker save пропустить слои уже в file.tar?

ответ

2

В файле manifest.json у вас есть необходимая информация.

tar -xOf file.tar manifest.json

Проверьте значение Config ключей. Первые 12 символов - это идентификатор изображения. Вы можете использовать приведенную выше команду, извлечь идентификаторы изображений, которые у вас уже есть, и исключить их в своей команде docker save.

Я не очень хорошо с Баш сценариев, но это работает на моем макинтоше

tar -xOf file.tar manifest.json | tr , '\n' | grep -o '"Config":".*"' | awk -F ':' '{print $2}' | awk '{print substr($0,2,12)}'

Используя это выводит все,

docker history -q IMAGE_HERE | grep -v missing && tar -xOf file.tar manifest.json | tr , '\n' | grep -o '"Config":".*"' | awk -F ':' '{print $2}' | awk '{print substr($0,2,12)}'

После этого вам нужно только, чтобы получить уникальные значения. Это можно сделать с помощью sort и uniq -u, но по какой-то причине сортировка не работает должным образом. Эта команда предполагает наличие file.tar, поэтому учтите это тоже.

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

+1

Отлично, я не знал о файле манифеста. Я принял ответ, но попытаюсь сгенерировать скрипт, который затушевывает diff. – yelsayed