Это уловка автоматизации, которую я использую, когда обновляю веб-службу, развернутую с помощью Docker Compose.
Мы будем использовать Ghost CMS в качестве реального примера, основанного на этом развертывании.
Автоматическое обновление контейнеров ОС при обновлении веб-службы
Вы можете просто прочитать эту статью, чтобы понять, что мы делаем. Но если вы хотите следовать ему, вы тоже можете это сделать.
Мы покажем два разных примера:
- Для контейнеров Docker на основе Debian
- Для контейнеров Docker на базе Alpine
Автоматическое обновление контейнеров Debian
Процедура требует, чтобы вы выполняли два этапа:
Шаг 1: обратите внимание на инструкцию CMD
Обратите внимание на инструкцию CMD, которая, наконец, указана внутри файла Dockerfile WebApp.
Для этого вам нужно проверить Dockerfile, с помощью которого был собран образ (в данном примере Ghost):
Следовательно, настоящая команда здесь 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):
Команда здесь такая же, как видно на версии 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"
Надеюсь, эта статья поможет вам в повседневной деятельности системного администратора. Если у вас есть какие-либо вопросы, отзывы или предложения, оставьте свои мысли в разделе комментариев ниже.