Обновления приложений внутри контейнеров Docker?

9

Обычно на сервере настраиваются автоматические обновления исправлений безопасности. Поэтому, если я использую MySQL 5.5 и выйдет новое исправление безопасности, Ubuntu Server применит обновление и перезапустит MySQL, чтобы автоматически защитить меня. Очевидно, это можно отключить, но это полезно для тех из нас, кто немного ленивый;)

Существует ли такая концепция внутри контейнера Docker? Если я использую MySQL в контейнере Docker, нужно ли постоянно останавливать контейнер, открывать в нем оболочку, а затем обновлять и обновлять MySQL?

Нафтули Кей
источник
Это Docker, а не LXC вопрос. Поскольку сами контейнеры LXC - это просто еще один дистрибутив Linux, работающий под тем же ядром, вы просто используете те же команды для обновления системы контейнеров LXC.
Фопс

Ответы:

13

Я не согласен с принятым ответом. Во-первых, вы должны проектировать свои контейнеры с учетом разделения состояний (в случае с MySQL это означает, что по крайней мере /var/lib/mysqlидет в своем собственном объеме ). Во-вторых, вы должны определить стратегию апгрейдов; Современное состояние заключается в создании версионных образов для каждого набора обновлений apt-пакетов и их тестировании перед заменой тома данных с запущенного контейнера на новый. Это может включать либо простои, либо вообще отсутствовать, если вы используете что-то вроде hipache .

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

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

Deim0s
источник
+1 это лучшая практика. хранение данных в контейнере сервера просто напрашивается на неприятности.
Booyaa
4

TL; DR : Если вы не создадите это в себе, этого не произойдет.

Эффективный способ сделать это - просто написать собственный стартовый скрипт для вашего контейнера, указанного CMDв вашем Dockerfile. В этом файле запустите apt-get update && apt-get upgrade -qqyперед запуском все, что вы запускаете.

Затем у вас есть несколько способов обеспечить обновление до контейнера:

  1. Определите задание cron в вашей операционной системе, чтобы перезапустить контейнер по расписанию, чтобы он обновлялся и обновлялся по расписанию.
  2. Подпишитесь на обновления безопасности для частей программного обеспечения, затем при обновлении уязвимого пакета перезапустите контейнер.

Это не самая простая вещь для оптимизации и автоматизации, но это возможно.

Нафтули Кей
источник
1
Продолжайте читать вниз по странице. У deim0s есть лучший ответ.
mc0e