Watchtower для Docker

Средний рейтинг
5 из 5 звезд. 1 голосов.
Мой рейтинг:

Всем привет.

Потребовалось настроить автоматическое обновление контейнеров после публикации обновленных образов в репозитории.

Можно это сделать в pipeline Ci\CD Gitlab’а, но в данном конкретном случае было принято решение воспользоваться отдельным инструментом.

Собственно, Watchtower — есть тот самый инструмент. Сразу скажу, что проект давно не развивается, судя по github’ у, но тем не менее решили его использовать (пока что).

Хорошее или плохое такое решение — пусть каждый сам судит.

Итак….

Подготовка.

У нас используется 2 разных репозитория Nexus для хранения образов Docker:

1-й внутренний. Там лежат, скажем так, не изменяемые образы, которые мы используем в своём проекте.

2- й внешний.  Там лежат образы проекта, которые обновляются по мере устранения ошибок, добавления функционала и т.п.

Надо создать файл конфигурации с адресами и доступами к данным репозиториям.

Все адреса и названия приведены для примера. У себя надо указывать реальные.

Создадим сам файл конфигурации

с таким содержимым:

где:

  • nexus1.internal.local — внутренний репозиторий,
  • nexus2.external.glob — внешний репозиторий.
  • auth — данные для авторизации

Auth создать можно так:

где:

  • user1 — имя пользователя,
  • password1 — пароль пользователя.

и полученное значение вставить в двойные кавычки — »

Теперь подготовим файл для docker-compose:

с таким содержимым:

где:

  • image — используемый образ,
  • container_name — название будущего контейнера,
  • restart — политика перезапуска контейнера,
  • enviroment — окружение:
    • TZ: Europe/Moscow — временная зона,
    • WATCHTOWER_POLL_INTERVAL: 60 — время проверки новых образов в репозиториях в секундах,
  • volumes — то, что будет «прокинуто» в контейнер.
    • созданный выше файл конфигурации,
    • и сокет самого docker’а.
Если у вас всё через прокси

добавить в environment заменив адрес и порт на свои

[свернуть]

Это самый простой пример. Если что-то более экзотическое надо, то в руководстве всё описано.

Сам запуск:

Лог запуска у меня такой (я использовал форк-версию):

лог

Как видно он каждую минуту проверяет обновление. И посчитал количество контейнеров.

[свернуть]

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

лог обновления

Как видно успешное обновление.

[свернуть]

Так же можно настроить уведомления про обновление, но я пока это не делал. Позже добавлю, как разберусь.

Уведомления.

Оказалось, что для телеграм это просто сделать. Надо добавить вот такие строки:

где:

  • TG_BOT_TOKEN — токен бота,
  • TG_CHAT_ID — id чата, куда бот будет доставлять сообщения.

MATRIX.

Для отправки уведомлений в matrix надо использовать такой URL:

тест отправки уведомлений

  • user1 — ваш пользователь, который будет отправлять уведомления в комнату\чат
  • password1 -пароль этого пользователя (токен почему-то не работает — про него ниже под спойлером информация)
  • domain.example.ru — доменное имя сервера matrix
  • ?rooms=!qqq111qqqq — то, что выделено — обязательно, далее ID комнаты\чата (начинается с !, тут он выделен для внимания)
  • disableTLS=no — обязательно.

[свернуть]

Тема с токеном

Я создавал отдельного пользователя, под ним заходил через браузер и там в профиле уже брал токен доступа, которым потом везде пользуюсь.

Но сделав настройку для watchtower, я стал от него получать ошибки:

Вычитал на просторах Интернета (но забыл сохранить как пруф 🙁 ), что это из-за того, что Watchtower использует — Shoutrr — который логинится так m.login.password

Правильный URL для того, что бы работал логин — m.login.token — такой:

перед ${MATRIX_TOKEN} — стоит :, т.к. имя пользователя отсутствует. Токена достаточно.

Как получить такой токен:

ну я делал через терминал такой командой:

Вывод показать не могу по понятным причинам.

Теперь watchtower.yml:

[свернуть]

Включение API для мониторинга в Prometheus + Grafana

Подразумевается, что порт у вас проброшен.

${API_TOKEN} — просто накидал последовательность цифр букв. Например: IKUhvewa09u723r3sfcLKeda932Jsdqaw032Jsqwa.

Потом в prometheus.conf добавил:

Шаблон для Grafana

grafana_templ

в виде кода

[свернуть]

[HOST]:[PORT] — заменить на свои.

пример

 

 

[Заметка_дополняется]

 

Ссылки:

Проект | Он же на Github

Форк проекта

Образы контейнеров:

оригинал: containrrr_watchtower_latest

форк (для систем x64): beatkin_watchtower_adm64-latest

 

 

If you found an error, highlight it and press Shift + Enter or to inform us.

Фото аватара

Дмитрий

родился, учился, работаю-учусь

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии