2016-06-20 5 views
9

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

  • базовой (это только набор общих зависимостей)

    FROM ubuntu:16.04 
    
    ENV FOO 1 
    
  • child1

    FROM mybaseimage # where mybaseimage corresponds to base 
    
    CMD ["bar1_command"] 
    
  • child2

    FROM mybaseimage # where mybaseimage corresponds to base 
    
    CMD ["bar2_command"] 
    

Можно ли создать docker-compose файл, который будет строить base, не запуская ее? Допустим, у меня есть следующие зависимости:

version: '2' 
services: 
    child1: 
     build: ./path-to-child1-dockerfile 
services: 
    child2: 
     build: ./path-to-child2-dockerfile 
    depends_on: 
     - child1 

Я хотел base быть строить, даже если он явно не начал. Возможно ли что-то подобное? Или я должен просто использовать внешний Makefile для создания зависимостей?

build_base: 
    docker build -t mybaseimage mybaseimage 

build_all: build_base 
    docker-compose build 

ответ

8

Использование файла Makefile. docker-compose не предназначен для создания цепей изображений, он предназначен для запуска контейнеров.

Вы также можете быть заинтересованы в dobi, который представляет собой инструмент автоматизации сборки (например, make), предназначенный для работы с изображениями и контейнерами докеров.

Отказ от ответственности: Я автор Доби

-2

Это работает в докер-компоновать 1.8.1

+7

Можете указать детали? –

+0

Извините, что не дал больше деталей. Ответ на @birchlabs выше - это то, что работает. – robbin

4

Это возможно. Есть своего рода обходной путь. Вы близки, но вам не хватало ярких тегов изображений (так что у вас мало возможностей на дочерние образы, чтобы объявить, какое изображение вы унаследовали).

version: '3.2' 
services: 
    base: 
    image: mybaseimage 
    build: ./path-to-base-dockerfile 
    child1: 
    build: ./path-to-child1-dockerfile 
    depends_on: 
     - base 
    child2: 
    build: ./path-to-child2-dockerfile 
    depends_on: 
     - base 

Предположим, у вас нет образов. Вы запускаете docker-compose up. Произойдет следующее:

  • docker-compose видит, что службы child1 и child2 зависят от базы. Поэтому сначала будет развертываться база.
  • docker-compose видит, что вы еще не отметили какое-либо изображение как mybaseimage. Он знает, как построить mybaseimage (вы дали ему путь построения), поэтому он будет строить его сейчас и пометьте его как mybaseimage.
  • docker-compose развертывает службу base.
    • В идеале вы должны спроектировать base, чтобы он немедленно ушел или не имеет точки входа. так как у нас нет на самом деле хотите, чтобы эта служба выполнялась.
  • докер-Compose считает развертывание child1 и child2
  • Докер-Compose видит, что вы еще не помечена любое изображение в качестве child1.Он знает, как построить child1 (вы дали ему путь сборки), поэтому он будет его строить сейчас и пометьте его как child1.
  • докер-Compose развертывает child1 службы
  • же последовательность шагов для Child2

Следующая docker-compose up будет проще (мы пометили изображения доступны, поэтому мы пропускаем все этапы сборки).

Если вы уже отметили изображения и хотите перестроить: используйте docker-compose build, чтобы рассказать об этом, чтобы создать все изображения (да, база и дети будут перестроены).

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