ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

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

Установить 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):

Как автоматически обновлять контейнеры 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

 

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

 

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

Вот список команд для других популярных приложений, таких как 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"

 

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

Exit mobile version