2013-07-30 5 views
31

Используя докеры, вы можете создавать изображения на основе других изображений очень красиво. Например, вы можете сделать изображение Java-jdk7 (на основе новейшего Ubuntu LTS) и на основе этого создать изображения для поиска эластичных изображений и tomcat7 (оба из которых нуждаются в java).Как управлять зависимостями изображения докеров (поддержка)

Так что, если я не помечать свои изображения, я в конечном итоге со следующим (экстракт docker images):

╔══════════════════════╦════════╦══════════════╗ 
║  REPOSITORY  ║ TAG ║  ID  ║ 
╠══════════════════════╬════════╬══════════════╣ 
║ ubuntu    ║ 12.04 ║ 8dbd9e392a96 ║ 
║ quintenk/jdk7-oracle ║ latest ║ 8928245086f4 ║ 
║ quintenk/tomcat7  ║ latest ║ 995cdb2cbfa8 ║ 
║ quintenk/elastics ║ latest ║ 123abc456ef2 ║ 
╚══════════════════════╩════════╩══════════════╝ 

Теперь вопрос. Как я/должен поддерживать эту зависимость? Как я могу выполнить обслуживание одного изображения и зависимых изображений?

  1. Если я обновляю изображение jdk (например, apt-get upgrade), я полагаю, что я не искажаю зависимые изображения? Однако я также предполагаю, что дерево зависимостей не так, как вы ожидали бы. [UPDATE: я воспроизвел это, так что см. Мой собственный ответ ниже)
  2. Если 1 правильно, есть ли способ, которым я могу зависеть от зависимых изображений как устаревших, и (надеюсь) их перестроить?

Или может пойти пометить контейнеры номером версии и вручную перестроить и перераспределить все зависимости с помощью увеличенных тегов номера версии? Это означало бы, что Dockerfiles необходимо изменить для обновления.

ОБНОВЛЕНИЕ: Я нашел следующее изображение на сайте докера в своем presentation. Однако я не совсем уверен в том, как это сделать (особенно с зависимостями от других изображений, как я описал).

Update flow for docker containers

+0

Является http://docs.docker.com/docker-hub/builds/#repository-links нужным вам решением? Он восстанавливает все зависимые изображения, если изменения сделаны на их базовых изображениях. –

+0

@WeiChing действительно - это был бы новый ответ. Конечно - это плохо, без автоматического тестирования. – qkrijger

ответ

9

Это отличный вариант использования. Пожалуйста, отправьте запрос об улучшении на Docker issues page.

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

+0

Просто сделал. Я еще не вижу этого, поэтому, думаю, он будет рассмотрен до его публикации. – qkrijger

+2

Это запрос расширения: https: // github.com/dotcloud/docker/issues/1379 , который был закрыт в пользу этого: https://github.com/dotcloud/docker/issues/2936 – seanf

5

В ответ на

Если я обновляю мой JDK изображение (APT-получить обновления, например), я предполагаю, что я не повреждать зависимые изображения? Однако я также предполагаю, что дерево зависимостей не так, как вы ожидали бы.

Я проверил это, обновив зависимое изображение и проверив зависимости. То, что вы получите действительно действительное состояние, но зависимая изображение не на основе изображения, которое вы бы наивно ожидать больше:

docker dependency tree

0

Я чувствую, используя multi-stage builds также может быть полезным в предотвращении таких ошибок. Это поможет вам сохранить один файл докеров для каждого приложения.

Смежные вопросы