Докер - Обновление базовой картинки - PullRequest
0 голосов
/ 31 октября 2019

У меня есть база, которая используется 100 приложениями. Все 100 приложений имеют общий базовый образ в своем Dockerfile. Теперь я обновляю базовый образ для обновления ОС или другого обновления и поднимаю версию, а также добавляю теги с последней версией. Здесь проблема в том, что всякий раз, когда я меняю базовый образ, все 100 приложений должны изменить базовый образ в своем файле Docker и перестроить приложение для использования самого последнего базового образа. Есть ли лучший способ справиться с этим?

Примечание: - Я запускаю свои контейнеры в Kubernetes и Dockerfile есть в GIT для каждого приложения.

Ответы [ 3 ]

1 голос
/ 31 октября 2019

Вам не нужно менять Dockerfile для каждого приложения, если оно использует base-image:latest. Вам придется перестраивать образы приложения после обновления базового образа. После этого вам необходимо обновить приложения, чтобы использовать новое изображение.

Например, используя советы от этот ответ

1 голос
/ 31 октября 2019

Вы можете использовать директиву Dockerfile ARG для изменения строки FROM (см. Понимание того, как ARG и FROM взаимодействуют в документации Dockerfile). Один из возможных подходов заключается в том, чтобы ваша система CI внедрила тег базового изображения.

ARG base=latest
FROM me/base-image:${base}
...

Это может привести к тому, что отдельные разработчики будут создавать тестовые изображения на основе более старого базового изображения;если различия между изображениями заключаются только в исправлениях ОС, вы можете считать это небольшим и приемлемым риском, поскольку только официальные изображения запускаются в производство. отдельные Dockerfiles. Вы можете написать это

# Individually check out everything first
BASE=$(pwd)
TAG=20191031
for d in *; do
  cd "$BASE/$d"
  sed -i.bak "s@FROM me/base-image.*@FROM:me/base-image:$TAG/" Dockerfile
  git checkout -b "base-image-$TAG"
  git commit -am "Update Dockerfile to base-image:$TAG"
  git push
  hub pull-request --no-edit
done

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

0 голосов
/ 31 октября 2019

Если вам нужно развернуть эту последнюю версию базового образа, да, вам нужно снова собрать, пометить, протолкнуть, вытащить и развернуть каждый контейнер. Если ваше базовое изображение не помечено должным образом, вам нужно изменить файл Docker для всех 100 файлов.

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

С помощью docker-compose вы можете обновить свои запущенные 100 приложений одной командой:

docker stack deploy --compose-file docker-compose.yml

но все еще нужно перестроить контейнеры.

edit: с помощью docker compose вы также можете собрать свои 100 контейнеров одной командой, вам нужно определить все из них в файле compose, проверьте доки на наличие составить файл .

...