@Anrek

Как обновить контейнер docker через pipline и скрипт на сервере?

Добрый день!

Есть pipline, в котором в 1 из шагов запускаю на сервере скрипт deploy.sh для обновления контейнера, передав ему переменную $NUMBER_COMMIT, мне нужно удалить старую версию контейнера по номеру коммита и собрать новый (исходник примера тут):

if [ -z "$1" ];  then
        echo "  [!] No argument supplied, this script expects a docker tag to run."
        exit 1
fi

tag=$1

image="user/project" 

cd /docker

pull=$(docker pull $image:$tag)

if [[ -z "$pull" ]]; then
        echo "  [!] Fail to pull image with tag $tag"
        exit 1
fi

TAG=$tag docker-compose up -d


Вопрос: в примере приведена строка TAG=$tag docker-compose up -d, однако я не понимаю этой строки. Нужно же указать имя контейнера, который обновлять и как-то сослаться на образ, который был pull. Или ссылка на образ - это и есть $tag? Тогда странно, что $pull никак не используется. Корректно ли заменить вышеуказанную строку так?

TAG=$tag docker-compose up -d $service_name
  • Вопрос задан
  • 201 просмотр
Решения вопроса 1
karabanov
@karabanov
Системный администратор
TAG=$tag docker-compose up -d, однако я не понимаю этой строки

В docker-compose.yml в качестве тега для образа "user/project" вписана переменная ${TAG}
Скрипт выкачивает из Registry свежий образ pull=$(docker pull $image:$tag) и запускает из него контейнер средствами docker-compose, передав явно имя тега который надо запустить (просто образов "user/project" на хосте может быть много с разными тегами).

Тогда странно, что $pull никак не используется.

Но ведь используется. Делает ровно то, что ему положено - выкачивает из Registry свежий образ.

Корректно ли заменить вышеуказанную строку так?

В этом нет смысла, сработает конечно, но зачем так делать если docker-copose и так запустит контейнер из свежего образа.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы