2016-03-26 5 views
2

У меня есть следующий сценарий:Как управлять параллелизмом при нажатии на докере и докере?

  • daemon_pulling работает docker pull последней версию изображений из частного реестра.
    • E.g. docker pull localhost:5000/myimage:v1 # ша или ID изображения: 1234
  • daemon_pushing работает docker push последней версии изображения.
    • E.g. docker commit container_stable localhost:5000/myimage:v1 && docker push localhost:5000/myimage:v1 # ша или изображение ID: 6789

код отлично работает для развертывания изображения на основе контейнеров!

Проблема заключается в том, когда dameon_pushing (ша или изображении ID: 6789) работают и запустить daemon_pulling (ша или ID изображения: 1234) в то же время, из-за толкающим (6789) не закончен, когда грузчик тянуть (1234) и обнаружение локального изменения (6789! = 1234) и попробуйте загрузить изображение (1234), но мое последнее стабильное изображение толкается (6789) ...

Я ищу способ толкать, не влиять на ход, и наоборот.

Что такое лучший способ управлять этим параллелизмом?

Я попытался использовать другое имя изображения Docker в качестве поворота и переименовать его непосредственно на сервере реестра, но я не нашел способ переименовать удаленно (просто локальное переименование).

+0

В чем проблема, которую вы пытаетесь решить с помощью этой настройки/рабочего процесса? – jonatan

+0

@jonatan У нас есть CI, который обнаруживает изменения в конюшнях ветвей и ветви запроса на растяжение ... тогда сборки запроса тяги используют 'docker pull stable' и изменения в устойчивой ветви используют' docker push' – moylop260

ответ

1

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

Лучшим способом было бы создать изображение с Dockerfile, где вы определяете все шаги сборки. Посмотрите на справочную архитектуру на официальномДокера. Если вы хотите сократить время сборки, вы можете сделать свой собственный base image для начала.

+0

спасибо за ответ. Мой CI использует файл Docker со всем git-хранилищем продукции 'git clone production/8.0', если обновляется стабильная ветвь' production/8.0', а затем выполняется новая 'docker build'. Тем не менее, с помощью запроса на pull попробуйте использовать последнюю версию 'docker pull' (PR не выполняет' docker push'), но проблема в том, что CI выполняет «докер-нажатие», а PR приходит с «докер-тягой». Я просмотрю ссылки. Спасибо! – moylop260