Поиск по сайту:
Все прекрасное редко (Цицерон).

Как автоматически обновить контейнеры Docker при обновлении Dockerized веб-приложений

20.11.2021
Установить Docker 1.11 на Ubuntu 16.04 LTS x64
Обновление веб-приложений — обычная задача системных администраторов. Обновление контейнеров, в которых они находятся, — еще одно дополнительное усилие. Автоматизируйте это и сделайте жизнь проще.
Представьте себе такой сценарий. Вы размещаете несколько веб-сервисов, работающих в контейнерах Docker. Когда веб-служба выпускает новую версию, вы загружаете образ Docker и обновляете контейнеры, чтобы обновить службу.Здесь речь идет об обновлении самих контейнеров операционной системы.Обновление ОС, запущенной в контейнере вручную, время от времени может быть сложной задачей. Для этого необходимо самостоятельно запустить соответствующие команды обновления в работающем контейнере.Как насчет того, чтобы убрать этот лишний шаг и совместить обновление ОС с обновлением сервиса?

Это уловка автоматизации, которую я использую, когда обновляю веб-службу, развернутую с помощью Docker Compose.

Мы будем использовать Ghost CMS в качестве реального примера, основанного на этом развертывании.

 

Автоматическое обновление контейнеров ОС при обновлении веб-службы

Вы можете просто прочитать эту статью, чтобы понять, что мы делаем. Но если вы хотите следовать ему, вы тоже можете это сделать.

Мы покажем два разных примера:

  1. Для контейнеров Docker на основе Debian
  2. Для контейнеров Docker на базе Alpine

 

Автоматическое обновление контейнеров Debian

Процедура требует, чтобы вы выполняли два этапа:

 

Шаг 1: обратите внимание на инструкцию CMD

Обратите внимание на инструкцию CMD, которая, наконец, указана внутри файла Dockerfile WebApp.

Для этого вам нужно проверить Dockerfile, с помощью которого был собран образ (в данном примере Ghost):

Читать  Как отправлять логи и настроить агент Cloudwatch в Linux
Как автоматически обновлять контейнеры Docker при обновлении Dockerized веб-приложений

Следовательно, настоящая команда здесь node current/index.js.

 

Шаг 2. Добавьте параметр «Автообновление»

Добавьте команды обновления и указанную инструкцию CMD в раздел службы Ghost файла Docker Compose:

command: sh -c "apt update && apt -y upgrade && node current/index.js"

 

Посмотрим, как это в итоге будет выглядеть. Скажем, например, вы рассматриваете записи Docker Compose для службы Ghost из приведенного выше руководства. Обновленная версия, основанная на нашем руководстве, будет:

    ghost:
      image: ghost:4.20.4
      volumes:
        - ghost:/var/lib/ghost/content
        -./config.json:/var/lib/ghost/config.production.json
      command: sh -c "apt update && apt -y upgrade && node current/index.js"
      env_file:
        -./ghost-mariadb.env
      restart: on-failure
      depends_on: 
        - ghostdb
      networks:
        - net
        - ghost

 

Здесь мы указали команду сразу после раздела volumes.

 

Автоматическое обновление контейнеров Alpine

Эта процедура снова требует, чтобы вы выполнили два аналогичных шага:

 

Шаг 1: обратите внимание на инструкцию CMD

Обратите внимание на инструкцию CMD, которая, наконец, указана внутри файла Dockerfile WebApp.

Для этого вам нужно проверить Dockerfile (в данном примере Ghost Alpine):

Как автоматически обновлять контейнеры Docker при обновлении Dockerized веб-приложений

Команда здесь такая же, как видно на версии Debian ранее: node current/index.js.

 

Шаг 2. Добавьте параметр «Auto-Upgrade»

Добавьте команды обновления и указанную инструкцию CMD в раздел службы Ghost файла Docker Compose:

command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && node current/index.js"

 

Справочник по обновлению Alpine

Давайте посмотрим, как это в итоге будет выглядеть (обратите внимание, что на этот раз мы будем использовать образ Alpine для Ghost). Скажем, например, вы рассматриваете записи Docker Compose для службы Ghost из приведенного выше руководства. Обновленная версия, основанная на нашем руководстве, будет:

    ghost:
      image: ghost:4.20.4-alpine
      volumes:
        - ghost:/var/lib/ghost/content
        -./config.json:/var/lib/ghost/config.production.json
      command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && node current/index.js"
      env_file:
        -./ghost-mariadb.env
      restart: on-failure
      depends_on: 
        - ghostdb
      networks:
        - net
        - ghost

 

Читать  Как обновить Ubuntu автоматически?

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

ПРИМЕЧАНИЕ
При обновлении любого приложения путем изменения номера версии образа в файле компоновки Docker необходимо временно отключить обсуждаемый здесь параметр команды с помощью хэштега. После завершения обновления веб-приложения повторно включите ту же строку, чтобы обновить сам контейнер. Оба эти шага (обновление приложения и контейнера) достижимы без простоев за счет масштабирования.

 

Бонусные подсказки

Вот список команд для других популярных приложений, таких как Nextcloud и Rocket.Chat. Помните, что они должны быть добавлены точно так же, как вы видели в примере с Ghost.

Nextcloud

Для Debian:

command: sh -c "apt update && apt -y upgrade && apache2-foreground"

 

Для Alpine:

command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && apache2-foreground"

 

Rocket.Chat

command: sh -c "apt update && apt -y upgrade && node main.js"

 

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
Дистрибьютору строительных материалов необходимо идти в ногу с технологическими и…

Спасибо!

Теперь редакторы в курсе.